Strata 全程视频分析 / Full Video Analyze
Stop feeding your clip to a vision model 64 frames at a time
- connection
- video
- images
- audio
- report
- analysis_json
- evidence_json
- coverage_json
- usage_json
Every "analyze this video" node in ComfyUI hits the same wall: a vision-language model can only look at so many frames at once, so the workflow samples a bite-sized batch, describes it, and stops. Anything past the sample window never happened.
Strata 全程视频分析 / Full Video Analyze is the node that stops pretending. You tell it how dense to look (sampling_fps) and how long a stretch you care about (duration_s), and it plans the work itself: ten seconds at 24 fps is roughly 240 frames, cut into segments, analysed in order, then merged into one report. Up to 256 segments per run, all under one load/unload of the model.
How it works
Per segment, the node samples frames across one chunk (2–8 frames per segment in frames mode, 2–16 in native), decoding the video on CPU with PyAV while preserving container timestamps, then posts that chunk to the runtime's existing vision API. Each frame also gets measured locally - CPU RGB statistics and a normalised foreground-region centre - and those measurements ride along with the images. That's not decoration: the author's own regression notes say the first tests misread red-to-blue and got motion direction wrong on a synthetic clip until those pixel statistics were added.
Then the merge. All the ordered chunk reports go back in one final prompt explicitly forbidden from inventing facts - a constant colour inside one chunk is not evidence the whole video is constant, conflicts must be reported as conflicts, and the model has to cite the frame IDs it reasoned from. Output is schema-validated at both stages.
Honest framing, from the pack's own README: you get segment-level observation with cited evidence, not continuous playback. Sampling gaps can swallow actions, and multi-subject attribution is the weakness every captioning VLM shares. Careful merge or not, this is a summary of snapshots.
Inputs that matter
connection (required) wires up the Strata Connection node; question is what you actually want to know. Beyond those:
task-overview,timeline,storyboard,question, orprompt. That last one reverse-engineers an English video-generation prompt, and refuses to emit an empty one rather than handing you the analysis report as a prompt.mode-framesis the default and the one that works.nativedemands the service explicitly declare video capability, and errors out if it doesn't.duration_s-0means "to the end of the source."sampling_fpsis sampling density, capped at 30.fps- the trap. This is the frame rate of animagesbatch, not a dial for how much you look at. 144 frames at 12 fps is 12 seconds; at 24 fps it's 6. Official VIDEO input reads its own timing; irregular batches needtimestamps_json.sampling_strategy/continuitydefault touniform/off. Continuity reserves a frame slot for the previous window's boundary, so it needsframes_per_segmentof at least 3.save_progresscaches validated per-stage responses for 24 hours so a rerun resumes instead of re-asking;progress_keynames the task,clear_progresswipes it. Needs runtime 0.1.42-t8.9+, and the original file must still be there.
Outputs: report (the prose, also rendered in the node's UI), analysis_json (report, events, shots, prompt, limitations, segments, coverage, speech), evidence_json (frame IDs, timestamps, measurements), coverage_json (sample count, max gap, empty windows, and continuous_observation: false stated outright), and usage_json (requests per stage - your token bill). Feed analysis_json into Strata JSON Extract to pull a single field.
Install
Manager → search Strata-T8 (strata-t8, publisher t8star), or clone into ComfyUI/custom_nodes, install the single dependency (jsonschema) with ComfyUI's Python, restart. The node is the small part. The Strata-T8 runtime is the real install: an 83.62 GB IQ3_S main model, ~5.22 GB of MTP tensors, a 907 MB vision encoder, and 96 GB+ system RAM recommended. Budget that before you budget anything else. (The author, T8mars, is better known here for a VRAM-cleanup node people pass around in unload threads - he's used to models that don't fit politely.)
Where people get burned
"Video needs N segments." The 256 ceiling is a hard error with the fix printed in it: shorter duration_s or lower sampling_fps. You cannot brute-force a feature film.
Empty windows aren't backfilled. On low-frame-rate material, a time window with no frames is counted in empty_segments and answered from speech alone - never faked with the previous frame. Check coverage_json before you trust a claim.
Upload limits are real. 64 MiB per request, 256 MiB video file, 16 megapixels per source frame. Big files need downscaling first.
ASR needs audio that exists. enable_asr is off by default and IMAGE batches are silent - wire an AUDIO or supply timed_transcript. Transcribing twice is wasteful; run Speech Transcribe once and reuse its output here.
Managed mode is Windows-only. On Linux you point connection at an already-running service with mode: external. And with same_gpu: true the Strata engine has to exit before your downstream sampling nodes get the GPU back - which is why the thresholds default to 12 GiB free VRAM and 60 GiB free RAM.
Inputs (30)
| Name | Type | Default | Description |
|---|---|---|---|
| connection | STRATA_CONNECTION | — | |
| task | COMBO | 5 options: overview, timeline, storyboard, question, prompt | |
| question | STRING | — | |
| mode | COMBO | 2 options: frames, native | |
| start_s | FLOAT | 0.000–86400 | — |
| duration_s | FLOAT | 0.000–3600 | — |
| sampling_fps | FLOAT | 24.000.01–30 | — |
| frames_per_segment | INT | 82–16 | — |
| max_pixels | INT | 58982465536–1048576 | — |
| max_tokens | INT | 2048128–4096 | — |
| temperature | FLOAT | 0.000–2 | — |
| top_p | FLOAT | 0.950.01–1 | — |
| top_k | INT | 201–64 | — |
| seed | INT | 00–2147483647 | — |
| reasoning_effort | COMBO | 5 options: none, low, medium, high, xhigh | |
| refresh | INT | 00–2147483647 | — |
| videoopt | VIDEO | — | |
| imagesopt | IMAGE | — | |
| sampling_strategyopt | COMBO | uniform | Adaptive sampling retains time coverage and uses a bounded CPU pixel-change scan. It does not track object identity. |
| continuityopt | BOOLEAN | false | Reserve one frame slot for the previous window boundary and retain bounded chronological history. |
| save_progressopt | BOOLEAN | false | Cache validated stage responses locally for 24 hours. Rerunning the same source/workflow resumes without repeating completed model requests. |
| progress_keyopt | STRING | Optional private task label. Empty uses the source/options fingerprint; changed source/settings create a new task. | |
| clear_progressopt | BOOLEAN | false | Clear this task’s saved responses before running. Disable again to resume. |
| fpsopt | FLOAT | 24.000.001–240 | Source IMAGE frame rate, not sampling density. Official VIDEO reads its own timing. Supply timestamps_json for irregular IMAGE timing. |
| timestamps_jsonopt | STRING | — | |
| transcriptopt | STRING | — | |
| enable_asropt | BOOLEAN | false | Automatically transcribe speech. Configure its separate model directory in Strata Model Settings; supplied timed subtitles do not require ASR. |
| audioopt | AUDIO | — | |
| audio_offset_sopt | FLOAT | 0.00-86400–86400 | — |
| timed_transcriptopt | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| report | STRING | — |
| analysis_json | STRING | — |
| evidence_json | STRING | — |
| coverage_json | STRING | — |
| usage_json | STRING | — |