Nodes/Strata-T8/Strata 全程视频分析 / Full Video Analyze
ComfyUI Node

Strata 全程视频分析 / Full Video Analyze

Stop feeding your clip to a vision model 64 frames at a time

By T8mars·Created 21 days ago·Updated 10 days ago· 20
Strata 全程视频分析 / Full Video Analyze
  • connection
  • video
  • images
  • audio
  • report
  • analysis_json
  • evidence_json
  • coverage_json
  • usage_json
◄task▾►
◄question►
◄mode▾►
◄start_s0.00►
◄duration_s0.00►
◄sampling_fps24.00►
◄frames_per_segment8►
◄max_pixels589824►
◄max_tokens2048►
◄temperature0.00►
◄top_p0.95►
◄top_k20►
◄seed0►
◄reasoning_effort▾►
◄refresh0►
◄sampling_strategyuniform►
◄continuityfalse►
◄save_progressfalse►
◄progress_key►
◄clear_progressfalse►
◄fps24.00►
◄timestamps_json►
◄transcript►
◄enable_asrfalse►
◄audio_offset_s0.00►
◄timed_transcript►

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, or prompt. 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 - frames is the default and the one that works. native demands the service explicitly declare video capability, and errors out if it doesn't.
  • duration_s - 0 means "to the end of the source." sampling_fps is sampling density, capped at 30.
  • fps - the trap. This is the frame rate of an images batch, 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 need timestamps_json.
  • sampling_strategy / continuity default to uniform/off. Continuity reserves a frame slot for the previous window's boundary, so it needs frames_per_segment of at least 3.
  • save_progress caches validated per-stage responses for 24 hours so a rerun resumes instead of re-asking; progress_key names the task, clear_progress wipes 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.

CategoryStrata-T8

Inputs (30)

NameTypeDefaultDescription
connectionSTRATA_CONNECTION—
taskCOMBO5 options: overview, timeline, storyboard, question, prompt
questionSTRING—
modeCOMBO2 options: frames, native
start_sFLOAT0.000–86400—
duration_sFLOAT0.000–3600—
sampling_fpsFLOAT24.000.01–30—
frames_per_segmentINT82–16—
max_pixelsINT58982465536–1048576—
max_tokensINT2048128–4096—
temperatureFLOAT0.000–2—
top_pFLOAT0.950.01–1—
top_kINT201–64—
seedINT00–2147483647—
reasoning_effortCOMBO5 options: none, low, medium, high, xhigh
refreshINT00–2147483647—
videooptVIDEO—
imagesoptIMAGE—
sampling_strategyoptCOMBOuniformAdaptive sampling retains time coverage and uses a bounded CPU pixel-change scan. It does not track object identity.
continuityoptBOOLEANfalseReserve one frame slot for the previous window boundary and retain bounded chronological history.
save_progressoptBOOLEANfalseCache validated stage responses locally for 24 hours. Rerunning the same source/workflow resumes without repeating completed model requests.
progress_keyoptSTRINGOptional private task label. Empty uses the source/options fingerprint; changed source/settings create a new task.
clear_progressoptBOOLEANfalseClear this task’s saved responses before running. Disable again to resume.
fpsoptFLOAT24.000.001–240Source IMAGE frame rate, not sampling density. Official VIDEO reads its own timing. Supply timestamps_json for irregular IMAGE timing.
timestamps_jsonoptSTRING—
transcriptoptSTRING—
enable_asroptBOOLEANfalseAutomatically transcribe speech. Configure its separate model directory in Strata Model Settings; supplied timed subtitles do not require ASR.
audiooptAUDIO—
audio_offset_soptFLOAT0.00-86400–86400—
timed_transcriptoptSTRING—

Outputs (5)

NameTypeDescription
reportSTRING—
analysis_jsonSTRING—
evidence_jsonSTRING—
coverage_jsonSTRING—
usage_jsonSTRING—