VOID Parse VLM Analysis
Turning your VLM's rambling into the JSON the rest of the VOID graph demands
- analysis_json
- integral_belongings_json
- affected_objects_json
- scene_description
- confidence
Vision-language models are great at describing what's in a video and terrible at following your output-format instructions. The prompt built by VOID Prepare VLM Analysis begs for strict JSON, and the model will still occasionally answer with markdown fences, trailing prose, or a stray comma. This node is the cleanup crew: it takes the raw text your VLM returned and turns it into the structured data the grey-mask stage is waiting for.
Without it, you'd be hand-copying JSON between a ShowText node and a text input - which is exactly how people burn an afternoon on a broken workflow. Wire the VLM's output here instead and the handoff is automatic.
How it works
It's a parser with opinions. It strips markdown code fences if present, then tries json.loads on the result; if that fails it hunts for the first { and last } and tries to parse the slice in between - a decent "the model wrapped the JSON in a sentence" fallback. Then it normalizes everything for the downstream stages:
confidenceis clamped to [0, 1].- integral belongings are capped at 3, affected objects at 5 - the grey-mask stage has to actually mask each one, and the prompt already asks for those limits; this enforces them.
- Every object gets sensible defaults (empty strings, zero frames) when the model skips a field, so a missing
whywon't crash the graph. - Trajectories and grid localizations are re-parsed into the exact
{frame, row, col}structureVOID Build Grey Maskconsumes, withobject_size_gridsdefaulting to 2×2 whenwill_moveis true but sizes are missing.
The input and outputs that matter
raw_response(STRING) - the VLM's raw text. In the example workflow that's thetextoutput ofVOID Gemma 4 E2B Video Prompt; if you're using Qwen-VL or any other VLM instead, paste/route its output here.
Outputs:
affected_objects_json(STRING) - this is the important wire; it goes intoVOID Build Grey Mask. It's the list of things that move, fall, or vanish when the primary object is removed, complete with trajectories.integral_belongings_json(STRING) - the bike/backpack-style items removed together with the subject.analysis_json(STRING) - the whole normalized structure, pretty-printed, for inspection.scene_description(STRING) - the model's "what the scene looks like without the object" text.confidence(FLOAT) - how sure the VLM was; worth a look before trusting the result.
Install
Standard for the pack: ComfyUI Manager → search "ComfyUI-NetflixVoid", or clone https://github.com/jaskirat05/ComfyUI-NetflixVoid into custom_nodes and restart. No model downloads for this node; it's pure text processing.
Common issues
- "Failed to parse VLM response as JSON" - the model went fully off-script and there's no
{...}to salvage. Your options: a stronger VLM, a longer/clearer prompt, or simply re-queue (greedy decoding means retries give the same answer, so change the model first). - Confidence is 0.0 but the graph runs - the model omitted the confidence field; the parser defaults it rather than failing. It means the rest of the analysis is probably thin too - check
analysis_jsonin a ShowText node before trusting the output. - Items getting silently dropped - that 3/5 cap is doing its job. If your scene has more affected objects than that, the extras are cut; that's by design, and over-masking is explicitly preferred to under-masking in this workflow.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| raw_response | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| analysis_json | STRING | — |
| integral_belongings_json | STRING | — |
| affected_objects_json | STRING | — |
| scene_description | STRING | — |
| confidence | FLOAT | — |