marioslideshow - Director
Storyboard the whole video before you render a single frame — then edit it and hand it to the renderer
- beats
- plan
- timeline_json
- timeline_preview
- duration_seconds
The one-node marioslideshow is convenient until you want to change a single shot's timing and have to re-render everything to see if it worked. MarioSlideshowDirector (display "marioslideshow - Director") is the answer to that: it plans the whole video - photo order, shot durations, scenes, transitions, headlines - without rendering frames. You get an editable plan, its JSON, and a visual preview chart, you tweak it, and only then hand it to the renderer. It's the difference between directing a video and blindly pressing render.
How it works
You tell it how many photos you're working with (image_count), pick a vibe from the presets - High energy, Luxury editorial, Cinematic gallery, or Hard-cut promo - and choose the timing model: BPM (with bpm and beats_per_image) or Seconds. pacing of Dynamic alternates full and half-length shots for rhythm; headlines are assigned per image. The Director turns all that into a structured shot plan: for each shot, which source photo, how long it runs, what scene layout and transition it uses, and what headline appears.
The workflow is deliberately a two-stage graph: the Director's plan (MARIO_PLAN) feeds the pack's MarioSlideshowRenderer, which does the actual frame production. The killer feature for iterating is timeline_json on the output side and timeline_json_in on the input side - it's an edit loop. Render a plan, grab the JSON, paste it into timeline_json_in, and it replaces the generated plan, timing and headlines included, no re-typing of every shot. That's how you hand-edit a specific duration without fighting the presets.
Inputs worth touching
presetis your starting style - it seeds layouts, transitions, and pacing. Pick the closest match and refine rather than building from scratch.beats(optional MARIO_BEATS) - feed it from the pack's MarioBeatAnalyzer and the Director cuts shot boundaries to real song onsets instead of a metronome grid.timing/bpm/beats_per_imageor seconds - how shots are measured.shuffle+seedrandomize order reproducibly.image_countmust match the number of photos you'll hand the renderer - the advanced pipeline splits loading from rendering, so the Director can't count your images itself.
Outputs
plan (MARIO_PLAN → renderer), timeline_json (the edit loop), timeline_preview (an IMAGE you can actually look at - shot boundaries and durations drawn as a chart), and duration_seconds so you know the runtime before committing GPU time.
Install
Director is part of the unified MSCH Nodes pack, same install as everything else. ComfyUI Manager search "MSCH Nodes" / msch-comfyui-nodes, or:
cd ComfyUI/custom_nodes
git clone https://github.com/mariobilly/msch-comfyui-nodes.git
cd msch-comfyui-nodes
python -m pip install -r requirements.txt
Restart ComfyUI. No models to fetch; planning is pure computation.
Gotchas
The classic mistake is an index mismatch: Director plans shots 0..N-1 assuming image_count, and if the renderer receives a different set of photos, the shots land on the wrong images. Keep the same photo source in both halves - the pack docs are explicit about reusing the Director's source order. Second, don't skip the timeline_preview; it's the whole point of the split - a five-second glance at the chart catches a shot that's half a second too short before you've spent a render discovering it.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| image_count | INT | 81–200 | — |
| preset | COMBO | 4 options: High energy, Luxury editorial, Cinematic gallery, Hard-cut promo | |
| timing | COMBO | 2 options: BPM, Seconds | |
| bpm | FLOAT | 12820–300 | — |
| beats_per_image | FLOAT | 4.01–16 | — |
| seconds_per_image | FLOAT | 2.00.4–30 | — |
| pacing | COMBO | 2 options: Dynamic, Even | |
| headlines | STRING | — | |
| shuffle | BOOLEAN | false | — |
| seed | INT | 00–2147483647 | — |
| timeline_json_in | STRING | Paste edited timeline_json here. It replaces the generated plan, including timing and headlines. | |
| beatsopt | MARIO_BEATS | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| plan | MARIO_PLAN | — |
| timeline_json | STRING | — |
| timeline_preview | IMAGE | — |
| duration_seconds | FLOAT | — |