Hypereel Analysis Prompt (auto duration)
The prompt that finds viral moments — and knows the video's real length
- video
- prompt
- duration_sec
- duration_mmss
The core idea of the Hypereel pipeline in symbiotica-ai/comfyui-nodes is simple: feed your gameplay VOD to a Gemini-class LLM, have it spot the viral-worthy moments, then cut them into a streamer reel. The problem with that plan is clock mismatches. An LLM looking at a video has no idea how long the video is unless you tell it - and if you tell it wrong, every timestamp it returns is garbage.
Hypereel Analysis Prompt exists to close exactly that gap. It probes the actual VIDEO you've wired in, measures the real duration with ffprobe, and injects that number as a hard timestamp boundary into the analysis prompt it builds. The same number comes out of the node separately, so the guard downstream can use it. One clock, used everywhere - the prompt and the guard literally cannot disagree.
How it works
Mechanically it's a prompt builder with a tape measure. You give it the video and a task (the default is a well-built instruction asking for 3–6 viral moments in a strict line format, with evidence-checking baked in), and it:
- writes the video to a temp file,
- probes the real duration via ffprobe,
- returns the assembled prompt with the real duration as the timestamp boundary,
- and also returns that duration as a float (
duration_sec) and as an MM:SS string (duration_mmss).
So the LLM is told "this video is 14:37, timestamps are in MM:SS" - and the same 14:37 can flow into Hypereel Highlight Pick's source_duration guard. When the analysis comes back with a moment at 14:50, the picker knows it's bogus and drops it.
What you get
Three outputs:
- prompt - wire this into the Gemini text call (Hypereel expects Gemini's highlight list format, but the prompt itself is provider-agnostic).
- duration_sec - the real length in seconds as a FLOAT.
- duration_mmss - the same, formatted
MM:SS, useful if your LLM call takes the boundary as text.
One input beyond the video: task, multiline, with a strong default. You can replace it with your own instruction, but keep the line format contract (the HIGHLIGHT n | start=.. | end=.. structure) if you want Highlight Pick to parse the result.
Install
Ships with symbiotica-ai/comfyui-nodes - ComfyUI Manager search "Symbiotica", or git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica + pip install -r requirements.txt. Needs ffmpeg/ffprobe on PATH for the probe step. No API key needed on this node - the key lives on whichever LLM node you wire the prompt into.
Gotchas
This is the "LLM-in-the-graph" pattern, and the usual caveat applies (see docs/knowledge/llm-in-comfyui.md): the model will occasionally return prose instead of the strict format, or invent an evidence detail that isn't on screen at the stated time. The default task prompt tells it to verify evidence against the actual start time, which helps, but it's a soft constraint. When parsing fails, Highlight Pick will tell you exactly what format it expected. And since the duration probe reads the file you wired in, wire in the same video that Highlight Pick's source_duration compares against - that's the whole design.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | — | |
| task | STRING | Watch the whole video and return the 3-6 most viral-worthy moments (big plays, kills, clutch escapes, funny fails, dramatic reveals), best first, one per line, exactly: HIGHLIGHT <n> | start=MM:SS | end=MM:SS | <punchy label> | WHY: <what happens on screen AND what makes a viewer stop scrolling - the audacity, skill, luck, or absurdity of it> | BEATS: <the 2-4 events inside the window, in order, position words only (opening/early/midway/late/at the end), separated by ' -> '> | EVIDENCE: <exact subtitle/HUD text or visual detail visible at the start time> | MOOD: <hype/tense/funny/clutch/brutal/close-call> Before writing each line, verify: does your EVIDENCE actually appear at that start time in this video? If not, fix the time or drop the moment. | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| duration_sec | FLOAT | — |
| duration_mmss | STRING | — |