Nodes/ComfyUI_SAA_Character_Selector/SAA Character Selector
ComfyUI Node

SAA Character Selector

Click a picture instead

By wrt122311·Created 5 months ago·Updated 4 months ago· 0
SAA Character Selector
    • character_zh
    • character_en
    • origin
    • prompt
    • character_json
    selected_character_id
    source_groupAll
    auto_refresh_datafalse

    Every anime workflow has the same bottleneck: you know the character you want, but not the tag. If you run WAI-illustrious or anything in the Illustrious family, the model only speaks Danbooru - you need the exact character tag, and it's never the spelling you guessed. The SAA Character Selector is a picture book for that moment. It loads a big list of characters (Chinese and English names), shows them as clickable image cards right inside the node, and hands you the generation tag when you click. You stop googling "what's the tag for X" and just point at the face.

    It's a niche tool, aimed at the Chinese-language anime community, and it's genuinely handy if you live in that world. If you're doing anything that isn't anime, skip it - there's nothing here for you.

    How it works

    On first load the node reaches out and downloads two files into its own folder:

    • wai_characters.csv - the character list, from the character_select_stand_alone_app project on GitHub
    • wai_character_thumbs_v160.json - matching thumbnails, served from a HuggingFace dataset

    That's it for dependencies. No requirements.txt, no model downloads, no API keys - everything else is the Python standard library plus ComfyUI's own server (aiohttp and PromptServer ship with ComfyUI). The files are only fetched once; after that they're cached on disk (they're gitignored, so an update won't wipe them). Clicking the in-node Reload button forces a re-download.

    Behind the scenes, the node parses the CSV into a searchable index. The second column is the actual generation tag, so the prompt output is just that tag with parentheses escaped - \( and \) - so you can paste it straight into a positive prompt without it accidentally becoming weighting syntax. The "origin" (which series or game the character is from) is extracted from the parens in the names, with a cute safeguard: it skips things like "Windows 95" so a character tagged (...) (Windows 95) doesn't get filed under an operating system. Thumbnails are base64+gzip compressed inside that JSON and served to the UI as webp. You never touch any of that; it just works.

    The inputs and outputs that matter

    Despite three inputs and five outputs, this is a one-click node. The inputs exist mostly so the canvas remembers your state:

    • selected_character_id - set automatically when you click a card. Leave it alone.
    • source_group - the origin dropdown, default "All". Filter by series here.
    • auto_refresh_data - a trap. The README is explicit: it's kept for workflow compatibility and does nothing. Refresh with the Reload button instead.

    The five string outputs wire straight into text nodes:

    • character_en / character_zh - the English and Chinese names
    • origin - the source series
    • prompt - the escaped tag, ready to drop into a positive prompt
    • character_json - all of the above as a JSON string, handy if you want to stash metadata or parse it with another node

    If you haven't clicked anything, character_json comes back as {"error": "no character selected"} - that's the node telling you to click a card, not a bug.

    Install

    The easy way is ComfyUI Manager - search "SAA Character Selector". Or clone it manually:

    cd ComfyUI/custom_nodes
    git clone https://github.com/wrt122311/ComfyUI_SAA_Character_Selector
    

    Then restart ComfyUI. The node shows up under SAA/Character. The first time you add it to the canvas, expect a pause while the CSV and thumbnails download - that's normal, and the node shows a progress bar while it works.

    Common issues

    The pain points here are mostly about the data, not the code:

    • No cards showing after install. The first download may have failed silently (the HTTP timeout is 120 seconds per file). Click Reload and watch the progress bar.
    • "No character selected" JSON. You haven't clicked a card, or the workflow saved an empty selected_character_id. Click something.
    • Prompt output looks weird with backslashes. That's intentional - the parens are escaped so the tag doesn't become a weighting token. Don't un-escape it before wiring it in.
    • You want a character that isn't in the list. The dataset is what it is - it's the "wai" character list, tied to the WAI-illustrious scene. There's no built-in way to add your own characters, and the list only updates when the upstream project does and you hit Reload.

    For a character-driven anime workflow it turns a minute of tag-hunting into one click, which is about the best trade you'll get out of a custom node.

    CategorySAA/Character

    Inputs (3)

    NameTypeDefaultDescription
    selected_character_idSTRING
    source_groupCOMBOAll1 options: All
    auto_refresh_dataBOOLEANfalse

    Outputs (5)

    NameTypeDescription
    character_zhSTRING
    character_enSTRING
    originSTRING
    promptSTRING
    character_jsonSTRING