ComfyUI Node

H3 Timeline

The card strip where you actually edit the video, mid-render

By AIJigyasa·Created 22 days ago·Updated 19 days ago· 4
H3 Timeline
  • project
  • timeline
  • cast
  • timeline
  • report
  • segment_count
◄sourceinline►
◄timeline_json{ "name": "delhi-rap", "segments": [ { "id": "s1", "beat": "hook", "duration": 3.0, "prompt": "subject_definitions:\n<Subject 1> is the rapper from the reference photo...", "audio_start": 0.0 }, { "id": "s2", "beat": "verse", "duration": 8.0, "prompt": "...", "audio_start": 3.0 } ] }►
◄on_changemerge►
◄reset_failedtrue►
◄file_path►

Every planner in this pack writes the same object, and H3 Timeline is where you look at it. A horizontal strip of segment cards - thumbnail, beat, planned vs rendered duration, state chip, seed - with an editor underneath for whichever card is selected: id, beat, duration, audio_start, link type, and the prompt itself. Buttons to add, duplicate, delete, reorder, lock, and redo a segment.

It's the node that makes a twelve-segment render feel like editing rather than babysitting a queue.

Authored vs rendered, kept apart on purpose

This is the design decision that makes the strip trustworthy. Authored fields live in the timeline_json widget, so they save and travel with the workflow. Render state - clips, takes, thumbnails, failures - is read live from disk, so the strip shows what has actually rendered while you are still editing. The two never fight: the cards only ever write authored fields, and H3 Vault Write only ever writes runtime state.

The timeline itself persists to output/h3_planner/<project>/timeline.json. Delete that file to start over. Delete a clip from vault/ and its segment goes back to outstanding.

Inputs

project, plus:

  • source - inline (edit the JSON widget), saved (reuse the timeline already on disk for this project, so planning and rendering can live in separate workflows), or file.
  • timeline_json - the authored document. Press JSON on the node to edit it raw. It accepts a full object, a bare array, or even a list of strings; the minimum useful segment is {"id": "s1", "duration": 6.0, "prompt": "..."}.
  • on_change - merge keeps clips for segments whose spec is unchanged. That's what makes it safe to keep tweaking mid-render: re-running with an edited prompt resets only the segments that changed, and everything already rendered keeps its clips.
  • reset_failed - retry segments that failed.

Optional timeline (from the Segment Prompter or Slicer - it takes precedence over the JSON below it), file_path, and cast, which is what lets the node flag a prompt citing <Subject 4> when the cast only has three images.

Outputs are timeline, report, and segment_count - that last one is there to wire into the Stitcher's min_clips, so the stitch waits for the whole timeline with no number for you to keep in step by hand.

Refine: fix one shot without re-planning the rest

Select a card and describe the change in plain English - "make it a low angle, she walks away from camera" - and only detailed_description is rewritten. The tags, spoken lines, style prefix and every other section are guaranteed to survive, and a revision that loses any of them is refused, leaving the card exactly as it was. That refusal is the feature: it's the difference between a quick edit and a slow corruption of your whole prompt.

It uses the provider that wrote the timeline, or local Ollama when the timeline was made without a model.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/AIJigyasa/ComfyUI-H3-Planner

Restart, or install MiniMax H3 Planner from ComfyUI Manager. Refine needs a language model and the sibling ComfyUI-H3-Prompt-Creator pack; everything else on the node - including authoring cards by hand and rendering - works without either. The pack needs ffmpeg on PATH or pip install imageio-ffmpeg.

Where people get burned

source: saved with the wrong project name raises an error naming the projects that do have a timeline. It's nearly always a project_name mismatch between your planning and rendering workflows - fix it on H3 Project, not here.

A card warns that its duration won't fit the ladder. That's not an error, it's the node telling you the segment will render longer than you asked and get trimmed. If it says a prompt cites a tag the cast doesn't have, fix the prompt or add the reference.

Two warnings in the report mean the same thing: DISCARDED clips (a node upstream rewrote the prompt on a queue) is what breaks auto-advance loops, and it's the number one symptom of a planner sitting in the render graph with reuse_existing off. Keep planning in its own workflow.

CategoryH3 Planner

Inputs (8)

NameTypeDefaultDescription
projectH3_PROJECT—
sourceCOMBOinlinesaved = reuse the timeline already on disk for this project, so planning and rendering can live in separate workflows
timeline_jsonSTRING{ "name": "delhi-rap", "segments": [ { "id": "s1", "beat": "hook", "duration": 3.0, "prompt": "subject_definitions:\n<Subject 1> is the rapper from the reference photo...", "audio_start": 0.0 }, { "id": "s2", "beat": "verse", "duration": 8.0, "prompt": "...", "audio_start": 3.0 } ] }—
on_changeCOMBOmergemerge keeps clips for segments whose spec is unchanged
reset_failedBOOLEANtrue—
timelineoptH3_TIMELINEfrom the Segment Prompter or Treatment Splitter; takes precedence over the JSON below
file_pathoptSTRING—
castoptH3_CAST—

Outputs (3)

NameTypeDescription
timelineH3_TIMELINE—
reportSTRING—
segment_countINT—