Scene
A named container for beats, and where transitions quietly happen
- scene_beat_1
- scene_beat_2
- scene
Scene is the middle layer of the pack's "play" tree: it groups a couple of scene-beats under one title and one shared prompt flavor, and it hands that bundle up to a Play-Act. In the author's theatre model, a scene is where something changes - a location shift, a character entering or leaving - "that would result in crossfade, cut, fade_to_black, etc." The beats inside carry the consistent look; the scene is the container that says "all of this belongs together."
Honestly, it's a thin node. It doesn't render anything, it doesn't compute frames - its only real work is bundling. But it matters because the play-level loop treats scenes as organizational boundaries: each scene gets its own frames_count computed by summing its beats, and its filename_part slots into the output naming. If you're sequencing a story, this is your chapter-within-a-chapter grouping.
The inputs that matter
positive,negative- the scene's shared prompt text, applied on top of what each beat brings. Again: plain strings, not conditioning. There's no encoding inside this pack; the prompts flow down to the sampler as text.title(default "Scene #1") - names the scene in the console traversal and keeps your graph readable.filename_part(default "#1") - inserted into every chunk filename that comes out of this scene's beats.fot_play_#1_#1_b1_0_0means filename_basefot_play, act part#1, scene part#1, beat partb1. Keep it tidy.scene_beat_1,scene_beat_2(optional) - the beats, fed fromScene-Beatnodes. Only two slots, hard-coded; the README lists "make scene_beats_* a dynamic list input (currently hard-coded limit)" as a known TODO.
The scene output (type SCENE) plugs into a Play-Act's scene_1/scene_2 inputs.
Installing
Same pack, same steps. ComfyUI Manager → search "comfyui_play_traversal", or:
cd ComfyUI/custom_nodes
git clone https://github.com/wgedeon/comfyui_play_traversal
pip install -r requirements.txt
Then restart. The requirements list is chunky (diffusers, accelerate, onnxruntime, opencv-python, spandrel, peft, clip_interrogator, sentencepiece, matplotlib, lark), so the first install is the slow part. No models are downloaded by the pack.
Where people get burned
- The two-beat ceiling. Want three beats in a scene? You can't - not with one Scene node. You'll need to fake it with more scenes or restructure. Known limitation, not a bug you've introduced.
- Gaps break the tree. The list builders reject holes: if you wire
scene_beat_2but leavescene_beat_1empty you'll get "Found gap in scene beats, please defragment!" Fill slots in order. - Every node in the tree has to exist. Play (Start) requires at least one act, which requires at least one scene, which requires at least one beat. An empty tree is an error, not an empty video.
- Don't expect conditioning sharing yet. The README's stated goal is "sharing conditionings with sub-tree nodes," but the current build passes text strings through, not encoded conditioning. If you were hoping to reuse one CLIP encoding across the tree, that's the roadmap talking, not the code.
It's a small, young pack from a single dev - treat the console's tree-traversal prints as the documentation. If a scene title doesn't show up in the logs, your scene isn't in the play.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| title | STRING | Scene #1 | — |
| positive | STRING | — | |
| negative | STRING | — | |
| filename_part | STRING | #1 | — |
| scene_beat_1opt | SCENE_BEAT | — | |
| scene_beat_2opt | SCENE_BEAT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| scene | SCENE | — |