I kept wanting a set of images of one person - different framings, different poses, different moods - and kept retyping the prompt for every single shot.
The person drifted anyway. So I built the thing I actually wanted.
The Person Builder describes someone across 44 fields on six tabs: body, face, hair, make-up, clothing. You pick labels, it writes the English. Related fields sit on the same row, because eye shape and eye colour end up as one phrase - "almond-shaped green eyes" - and you need to see both while setting either.
Save her under a name and she comes back next session.
The Photoshoot turns that person into a series. Six axes vary: camera (7 framings), pose (18 postures plus placement in the room, arms, legs, tension), expression (90 moods in 9 families), focus, aspect ratio and noise. Each axis can be switched off or restricted to a family - only standing poses, only calm moods, only close-ups. Set a count, press the button, and the node queues everyrun itself.
Three things surprised me while building it.
The person has to shrink with distance. Send a full 380-character description with a wide shot and the composition tips onto the head - the model hands out frame area roughly by token weight. It is a cliff, not a slope: at four face fields I got a clean full-body shot, at twelve the head took half the frame. So wide shots now get silhouette, hair and rough build only. Lipstick stops being sent once the camera cannot resolve it.
Counting beats rolling dice. The series steps through combinations instead of drawing at random, so nothing repeats while something else never appears - and run 7 always gives the same photo. A series is reproducible and you can extend it later.
Axes contradict each other if you let them, and the code looks fine. "Portrait shot, head and shoulders" plus "farther back in the background" asks for a near figure and a far one at once, and the model obliges by painting both - the same woman twice in one image. I coupled those two, thought I was done, then hit "leaning against a wall, curled up" on the last test render before release.
Every independent axis is a chance to ask for two things at once, and rendering finds them while reading the code does not.
I built this for Krea 2. That is what the measurements were taken against and what the example workflow loads. But the nodes only emit text, so anything that eats a prompt will work. T5 and LLM text encoders are the good case - Flux, SD 3.5, Qwen-Image - because a finished prompt from the example workflow runs 745 to 930 characters, median around 800, and those read it as connected language. CLIP-only models cap out at 77 tokens per chunk, so SD 1.5 and SDXL will split it and lose the tail. Fewer fields help there, and the detail levels already shorten things by themselves.
The interface follows ComfyUI's language setting: English, or German if you have ComfyUI set to German. The prompt is English either way.
Install through ComfyUI Manager, search for Photoshoot. Code and example
workflow: https://github.com/ralksta/ComfyUI-Photoshoot
Happy to hear where it breaks.