Nodes/ComfyUI-TJ_NODE/Scene Maker (TJ)
ComfyUI Node

Scene Maker (TJ)

Turn one idea into a shot list your sampler will actually follow

By designloves2·Created 4 months ago·Updated 3 days ago· 13
Scene Maker (TJ)
  • input_image
  • clip
  • Scene brief
  • Visual Beat
  • Visual anchor
  • Scene prompt
  • Scene prompt line
  • Translated result
  • pipe
Model_Typetextencode
clip_namet5xxl_fp16.safetensors
gguf_modelqwen3.5-4B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf
mmproj_filemmproj-qwen3.5-4B-Uncensored-HauhauCS-Aggressive-BF16.gguf
chat_handlerAuto-detect
n_gpu_layers-1
n_ctx8192
get_name(none)
auto_setfalse
modeProduct Commercial
translateKO
ideaA beautiful woman is standing with her back to the camera on a beach at sunset, wearing a red bikini.
stylecinematic, high-end perfume commercial, elegant composition
fixed_elementsGolden lighting, warm tones
shot_count6
seed1
brief_override
visual_beat_override

Stop writing one prompt, start writing a scene list

The single biggest quality jump in prompt-driven work isn't a better model - it's splitting a vague idea into distinct shots. Scene Maker (TJ) is an LLM prompt composer that does exactly that: you give it an idea, a style, and a mode like Product Commercial or Music Video, and it expands the idea into a structured, scene-by-scene brief with per-shot prompts. If you've ever hand-written six variants of "woman on a beach at sunset" because one long prompt made the model mush everything together, this node is aimed straight at you.

It lives in the LLM section of the TJ_NODE pack, and it's one of the few nodes in that pack that does actual generation-side thinking rather than graph plumbing. You feed it a concept, it returns a storyboard in text form.

How it works

Scene Maker has two Model_Type backends:

  • textencode - the default. It uses ComfyUI's TextGenerate node if you have it installed, otherwise falls back to loading a CLIP directly (t5xxl_fp16.safetensors by default). No extra Python dependencies, but it's limited to text-encoder quality.
  • llama(gguf) - a real local Vision-LLM via llama-cpp-python. This is where the interesting output comes from. You pick a GGUF model (gguf_model) plus an mmproj_file vision projector if you're feeding in an input_image. It's also the model that can look at a reference image and write a brief about it.

The mode dropdown sets the production genre, shot_count decides how many beats to break the idea into, and translate lets you pipe the result out in KO, EN, JP, or CN (handy if your downstream CLIP was trained on a different language than the one you think in). Both brief_override and visual_beat_override exist so you can replace the LLM's copy with your own and still get the structured outputs.

The outputs that matter

The node returns seven things, and honestly you'll mostly use three:

  • Scene brief - the overall creative summary.
  • Visual Beat - the per-shot breakdown; this is the list you actually animate or generate against.
  • Scene prompt - a merged, ready-to-use prompt (and Scene prompt line gives it as a list for batch feeding).
  • Visual anchor - the fixed-elements bit that stays consistent across shots.
  • pipe - a TJ_SCENE_PIPE bundle you feed into Scene Maker Result - pipe(TJ) to unpack everything at a distance, or into any downstream node that accepts the pipe type.

Installing it

Scene Maker ships inside the TJ_NODE pack, so first install that:

cd ComfyUI/custom_nodes
git clone https://github.com/designloves2/ComfyUI-TJ_NODE.git

Or use ComfyUI Manager → Install Custom Nodes → search TJ_NODE. Then restart.

The textencode backend needs the TextGenerate node pack installed (search it in Manager). The llama(gguf) backend needs a GGUF model in ComfyUI/models/text_encoders/. The default expects the author's qwen3.5-4B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf, but any GGUF you drop in shows up in the dropdown. One catch: the default pip install llama-cpp-python is CPU-only and slow, and it can't load the newest models. For GPU speed you'll want to build it from source - the pack ships build_llama_gemma4.bat for Windows and the README's LLAMA_GPU_SETUP.md walks through a CMAKE_ARGS="-DGGML_CUDA=on" build.

Where people get burned

The most common failure is a vision error on the llama(gguf) backend - that's your llama-cpp-python being too old or CPU-only. Either update/reinstall it with GPU support, or disconnect input_image and use text-only briefs. If you see "Required ComfyUI node not available," you're missing the TextGenerate pack. And remember the whole TJ_NODE thing of wireless get_name/auto_set: Scene Maker can receive an idea wirelessly and publish results under a name, so you can keep the LLM in one corner of a big workflow without dragging prompt text wires across the canvas.

Category ✨ TJ_Node/LLM

Inputs (20)

NameTypeDefaultDescription
Model_TypeCOMBOtextencode2 options: textencode, llama(gguf)
clip_nameCOMBOt5xxl_fp16.safetensors1 options: t5xxl_fp16.safetensors
gguf_modelCOMBOqwen3.5-4B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf1 options: qwen3.5-4B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf
mmproj_fileCOMBOmmproj-qwen3.5-4B-Uncensored-HauhauCS-Aggressive-BF16.gguf2 options: none, mmproj-qwen3.5-4B-Uncensored-HauhauCS-Aggressive-BF16.gguf
chat_handlerCOMBOAuto-detect1 options: Auto-detect
n_gpu_layersINT-1-1–999
n_ctxINT8192512–32768
get_nameCOMBO(none)1 options: (none)
auto_setBOOLEANfalse
modeCOMBOProduct Commercial3 options: Product Commercial, Music Video, Short Drama
translateCOMBOKO4 options: KO, EN, JP, CN
ideaSTRINGA beautiful woman is standing with her back to the camera on a beach at sunset, wearing a red bikini.
styleSTRINGcinematic, high-end perfume commercial, elegant composition
fixed_elementsSTRINGGolden lighting, warm tones
shot_countINT61–24
seedINT10–18446744073709550000
input_imageoptIMAGE
clipoptCLIP
brief_overrideoptSTRING
visual_beat_overrideoptSTRING

Outputs (7)

NameTypeDescription
Scene briefSTRING
Visual BeatSTRING
Visual anchorSTRING
Scene promptSTRING
Scene prompt lineSTRING
Translated resultSTRING
pipeTJ_SCENE_PIPE