Stable Diffusion

Describe a person once, ComfyUI shoots the whole series

Describe a person once, ComfyUI shoots the whole series

Keeping the same person consistent across a series of images is a long-standing problem in image generation. Either you train a LoRA, or you rely on an IP-Adapter to hold the face together. And even when that works, you still rewrite the prompt by hand for every shot: close-up now, full body next, then a different pose. By the twentieth photo it has turned into mechanical labour, and on the twenty-first you forget she was supposed to have freckles.

The ComfyUI-Photoshoot node by developer ralksta approaches it from the other end. You describe the person once, and it runs the whole shoot for you.

Two halves: the person and the shoot

The first half is Photoshoot Person — a single node with 44 fields across six tabs. Basics (gender, age, ethnicity, skin tone and texture), body (height, build, shoulders), head (hair type and colour, eye shape and colour), face (cheekbones, nose), make-up and clothing (legwear, footwear, outer layer, accessories). You fill the description in once and save it under a name.

The second half is Photoshoot Series. You set the number of photos, press Start shooting, and the node queues the entire series by itself. Individual frames vary along six independent axes:

  • Camera — 7 framings, from extreme close-up to wide shot
  • Pose — 18 postures in four families, plus placement in the room, orientation, arms, legs and body tension
  • Expression — 90 moods in nine families (calm, assertive, engaged, frightened, sad, dismissive) plus eyes, gaze, brows, mouth and head tilt
  • Focus — 12 focal points, from the face down to the feet
  • Ratio — 9 aspect ratios at a constant pixel count
  • Noise — a fresh seed per photo, or a single seed for the whole series

Each axis can be restricted or switched off. If you only want portraits, leave the camera on two values and the remaining axes keep varying.

Three details that make the difference

What caught my attention was less the idea itself than the way it is built.

The axes are not drawn at random. The node uses a Kronecker sequence — each field steps by the fractional part of a different square root. Two fields therefore never synchronise into a repeating pattern, and the series is reproducible: the same settings always yield the same photos, and a series can be extended later without reshuffling what you already have.

The axes are coupled to each other. A full-body shot never lands in a widescreen landscape ratio, and a wide shot never focuses on the lips. It looks like a minor thing until you spend an evening wading through nonsensical combinations.

The description shortens with the framing. For a close-up, the full description including make-up goes into the prompt. For a full-body shot, make-up micro-detail drops out. For a wide shot, only identity remains — silhouette, hair, rough build. Freckles are invisible at that distance anyway, and in the prompt they would only take weight away from the composition. Models have a limited attention budget, and this manages it for you.

Installation and requirements

Installation is unusually painless. In ComfyUI Manager, search for "Photoshoot"; manually:

cd ComfyUI/custom_nodes
git clone https://github.com/ralksta/ComfyUI-Photoshoot

Restart ComfyUI and you are done. The node has no dependencies beyond ComfyUI itself — nothing is installed through pip and no models are downloaded. It does not generate images at all; it only assembles the prompt text and the dimension numbers. The generation itself stays with whichever model you use.

That also determines compatibility. Models with a T5 or LLM text encoder — Flux, SD 3.5, Qwen-Image, Krea 2 — handle 190 to 250 tokens, so the description passes through in full. Models built on CLIP alone (SD 1.5, SDXL) cap out at 77 tokens per chunk, the prompt gets split, and the tail of the description loses weight. On SD 1.5 at 512 px the result is weaker still, because the edge lengths are designed for 1024 to 1536 px.

Limitations to plan for

The repository is fresh, with a single commit and a few dozen stars, so expect to hit rough edges. The MIT licence, on the other hand, leaves your hands free.

Saved persons, scenes and styles live in the ComfyUI/user/ directory. They are not part of the repository, so nobody backs them up for you on a reinstall — and an hour spent tuning a person is worth keeping.

You cannot use the node for ordinary img2img: the latent carries the geometry of the source image, so framing and aspect ratio have no way to move. This is a tool for generating from scratch.

The author also addresses age explicitly. The tool describes adults — age presets start in the early twenties and the exact-age field has a hard floor of 18. He himself calls it a guardrail against an accident rather than a content filter.

How much time it takes

According to the author, forty full runs cost 860 seconds, roughly 21.5 seconds per image. For tuning he recommends bypassing the upscaler and the second sampler with Ctrl+B, which brings a single preview down to 10.2 seconds. The approach makes sense: dial in the person and the lighting on fast previews first, then launch the full series.

One practical tip to start with: run the first series at twelve photos with every axis enabled, so you see the full range of what the node comes up with. Only then narrow the axes down to what your project actually needs. That is faster than guessing up front.

Repository: github.com/ralksta/ComfyUI-Photoshoot (MIT, free)

← Back to tutorials