---
title: 'Content Analyzer'
description: 'Break a video down shot by shot: hook, shot list, script beats, visual style, and a brief to recreate it'
updated: 2026-07-28
---

# Content Analyzer

**Badge:** New  
**Node type:** `research:content_analyzer`  
**Category:** `llm`

## Description

Break a video down shot by shot: hook, shot list, script beats, visual style, and a brief to recreate it

## Pricing

- **Cost:** ~7 credits per units

## Canvas ports

These appear as port handles on the left side of the node.

| ID      | Label     | Details                                                                     |
| ------- | --------- | --------------------------------------------------------------------------- |
| `video` | **Video** | `VIDEO` _(required)_ — The video to break down (wire a TikTok Content node) |

## Sidebar config

These render as form fields in the right-side config panel when the node is selected.

| ID                  | Label                  | Details                                                                                                                                                                                                                                                       |
| ------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `videoMasterPrompt` | **Analysis Brief**     | `TEXT` — Replaces the built-in shot-by-shot brief entirely, so ask for the final thing you want. Example: "Break this down, then output only a production-ready Seedance prompt that recreates it for my product." Leave blank to keep the default breakdown. |
| `model`             | **Model**              | `TEXT` · options: `google/gemini-2.5-flash`, `openai/gpt-4.1-mini` — Vision model used for the breakdown. Cheap vision models only, because the node is flat-priced.                                                                                          |
| `numFrames`         | **Max frames**         | `NUMBER` · `1…16` — Upper bound, not a target. Frames are sampled at scene changes, so a short or static video comes back with fewer than you ask for. Max 16.                                                                                                |
| `includeTranscript` | **Include transcript** | `BOOLEAN` — Transcribe the audio and feed it alongside the frames. Falls back to frames-only (and says so) if transcription fails.                                                                                                                            |
| `maxTokens`         | **Max output tokens**  | `NUMBER` — Hard cap on the breakdown length (max 6000)                                                                                                                                                                                                        |

## Outputs

| ID       | Label          | Type    |
| -------- | -------------- | ------- |
| `text`   | **Breakdown**  | `TEXT`  |
| `json`   | **Structured** | `JSON`  |
| `images` | **All Frames** | `IMAGE` |

## Max frames is a ceiling, not a count

Setting **Max frames** to 28 does not mean you get 28 frames back. Two things
cut it down, and both are by design:

1. **The cap is 16.** Anything above that is clamped server-side. The number is
   the node's cost bound: every frame is about 258 input tokens to the vision
   model, and the flat price only stays honest while the worst case is bounded.
   The sidebar field is bounded to 1 to 16 so the value you save is the value
   that runs.
2. **Frames are sampled at scene changes, not on a timer.** The node cuts the
   video at its scene boundaries and takes one frame per scene, so a video with
   fewer scenes than your number returns fewer frames. A 12-cut ad returns 12
   frames whether you asked for 16 or 28. Short or static videos return the
   fewest.

So read the field as "no more than this". The `images` output tells you how
many you actually got.

## The Analysis Brief replaces the default prompt

**Analysis Brief** is not an extra instruction bolted onto the built-in
breakdown. Whatever you type there becomes the entire prompt, and the default
forensic shot-by-shot brief is dropped. Leave it blank to keep the default.

That is a feature once you know it: you can ask for the finished artifact
directly instead of running the breakdown and then chaining a second LLM node to
reshape it. For example:

> Break this down, then output only a production-ready Seedance prompt that
> recreates it for my product.

One node, one charge, and the `text` output is already the prompt you wanted.

## The All Frames output is the full array

`images` carries **every** frame the vision model looked at, as an array, and
the frames also render as a gallery on the node itself. Wire it into an **Image
Iterator** to fan out one run per frame (regenerate each frame with an image
model, then animate it). The single-frame collapse other `IMAGE` ports do does
not apply here: the array only survives on the `images` handle, not through
`json`.

---

_Auto-generated from the Wireflow node registry._

---

Documentation index: fetch https://www.wireflow.ai/llms.txt for the full list of Wireflow docs.
