ComfyUI Node

Character Randomizer

A fighting-game OC generator that respects its seed

By marcoc2·Created 2 years ago·Updated 5 months ago· 1
Character Randomizer
    • gender
    • fighting_style
    • nationality
    • personality
    • occupation
    • special_power
    • weapon
    • clothing
    • makeup
    • accessories
    seed0

    Character Randomizer is the "draft" half of the AnotherUtils character pipeline. Give it a seed and it rolls ten attributes - gender, fighting style, nationality, personality, occupation, special power, weapon, clothing, makeup, accessories - from the same fixed pools its sibling Character Constructor understands. Ten string outputs pop out, and because the randomness is seeded, the same seed always rolls the same character. For a character-design batch where you want fresh fighters without hand-typing, that determinism is the whole appeal: reproducible variety on demand.

    The pools are fighting-game canon, and honestly they're fun: ten martial arts from Judo to Krav Maga, ten nationalities, weapons ranging from "None" to "Ancient Relic Weapon", special powers like Ki Energy and Beast Transformation. It's the vocabulary of a late-90s arcade roster, and it covers the range well enough that rolling a few characters gives you very different fighters.

    How it works

    Under the hood it's one line you could write yourself: random.seed(seed), then random.choice() from each attribute list. The seed is an integer up to 2^64, matching the ranges you're used to from sampler seeds. No LLM, no API calls, no model - the "randomness" is Python's Mersenne Twister, fully deterministic given the seed. That's a feature: lock the seed, get the same character forever, and rerun the workflow to compare how a single character renders under different prompts or models.

    The single input is seed (INT). The ten outputs are the attributes themselves, one per socket: gender, fighting_style, nationality, personality, occupation, special_power, weapon, clothing, makeup, accessories - all STRING.

    The intended loop

    The clean workflow is Randomizer → Constructor → CLIP Text Encode. Wire each of the ten outputs into the matching dropdown of Character Constructor (the sockets line up one-to-one), let it assemble the paragraph, and feed that to your sampler. The node also marks itself as an output node, so it can sit at the end of a graph and just display its picks - handy for a quick sanity check before you burn a generation.

    Because everything is deterministic, you can also drive it from a List of Seeds workflow node and batch out a whole roster, one seed per character. Want a different lineup? Just change the seed.

    Install

    Part of the AnotherUtils pack - ComfyUI Manager (search AnotherUtils), or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/marcoc2/ComfyUI-AnotherUtils.git
    

    Restart ComfyUI. Zero dependencies, zero weights. This is as dependency-free as a custom node gets.

    Common issues

    The one trap is thematic rather than technical: the output vocabulary is fixed, so the node won't match whatever setting you're actually going for - a sci-fi or cyberpunk character will need hand-editing. And if you reuse the same seed across runs you'll get the same character every time, which surprises people who expected "random." Change the seed (or wire in a per-run seed generator) if you want a fresh roll. Beyond that there's nothing to break - it's ten random.choice() calls.

    Categoryprompt/generators

    Inputs (1)

    NameTypeDefaultDescription
    seedINT00–18446744073709550000

    Outputs (10)

    NameTypeDescription
    genderSTRING
    fighting_styleSTRING
    nationalitySTRING
    personalitySTRING
    occupationSTRING
    special_powerSTRING
    weaponSTRING
    clothingSTRING
    makeupSTRING
    accessoriesSTRING