H3 Flight Recorder Stop (alpha)
Read the peaks, append the line, pass the wire on
- anything
- anything
- record
The other half of the flight-recorder pair, and the one that does the actual writing. H3 Record Start resets the torch peak counters in front of the expensive node; H3 Record Stop, placed after it, reads the peaks and appends one JSON line per render to the flight-recorder file. Same local-only design, nothing phones home. Between the two of them, your renders start paying the timeline's price meter with real data.
How it works
Beyond the passthrough anything and the matching key, Record Stop is where you tell the recorder what the run actually was:
work_units(0) - latent tokens this run generated; the compiled plan reports it.steps(25) - denoise steps the run executed.pixels(0),frames(0) - optional; resolution and length, so the line can be priced per pixel-frame.model(defaultminimax-h3-int8-convrot) - a tag so the recorder can separate int8 from fp16 from whatever stack you're profiling.path(default/root/.cache/mainodes/flight_recorder.jsonl) - where the line lands. The timeline'srecorder_pathdefault matches this.log_path- optional; if given, the streamed flag is READ from ComfyUI's partial-load lines, never guessed.
Outputs: anything (passthrough) and record - the JSON line it just wrote, so you can see exactly what got recorded.
The honest part
The recorded line is only as good as the numbers you give it. work_units and steps are typed by you (or wired from the plan), which means an empty or wrong work_units pollutes the calibration that H3 Plan Estimate leans on. The -1 you get from Plan Estimate when the recorder is empty is this design being honest; garbage-in is the only way it becomes garbage-out.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/matlowai/ComfyUI-MAINodes
or ComfyUI Manager → ComfyUI-MAINodes, restart. Category latent/minimax/timeline.
Common gotchas
Same as its partner: Start without Stop writes nothing, and mismatched keys silently produce no line. And watch the default model tag - if you run a different stack (fp16, a turbo LoRA pass), tag it, or the recorder will price your fp16 render as if it were the int8-convrot stack. That's the kind of subtle thing that makes a price estimate quietly wrong.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| anything | * | — | |
| key | STRING | default | — |
| work_units | INT | 00–100000 | latent tokens this run generated (the compiled plan reports it) |
| steps | INT | 251–1000 | — |
| pixelsopt | INT | 00–1073741824 | — |
| framesopt | INT | 00–10000 | — |
| modelopt | STRING | minimax-h3-int8-convrot | — |
| pathopt | STRING | /root/.cache/mainodes/flight_recorder.jsonl | — |
| log_pathopt | STRING | ComfyUI's log file, if you have one: the streamed flag is READ from its partial-load lines, never guessed |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| anything | * | — |
| record | STRING | — |