# Content Recipe

> Find out why a social post worked: the hook, format, beats, call to action, sound and pace, as a reusable recipe in structured data and readable text.

Source: https://nodaro.ai/docs/nodes/video/content-recipe

The **Content Recipe** node explains why a social post worked, as a recipe you can reuse. It reads the post's material with a language model and returns the hook, the format, the beats, why the post works, the call to action, the sound and the pace. You get the recipe as structured data and as readable text, ready for [Content Ideas](https://nodaro.ai/docs/nodes/video/content-ideas).

- Found in: Video › Analyze
- API type: `content-recipe`

Content Recipe runs on Nodaro Cloud only. It is not available on self-hosted installs.

## When to use it
- You want to know why a competitor's video, a viral post or an ad holds attention.
- You want to reuse the structure of a post that worked, for your own brand, with [Content Ideas](https://nodaro.ai/docs/nodes/video/content-ideas).
- You want fixed labels for each post, such as its format and its hook type, to sort or route posts in a workflow.
- You want to compare several posts. Make one recipe per post and give them all to Content Ideas.

## Quick start
### Add the node

Press Tab on the canvas and choose **Video › Analyze › Content Recipe**.

### Give it the post

Analyze the post with [Video Analysis](https://nodaro.ai/docs/nodes/video/video-analysis), and connect its **Scenes JSON** output to the **Source material** input. A scraped post, a caption or a transcript in a [Text](https://nodaro.ai/docs/nodes/automate/text) node also works.

### Keep the post's link

Connect the [Video URL](https://nodaro.ai/docs/nodes/automate/video-url) node that holds the post to the **Source post** input. The recipe then cites the post, and every idea made from it links back to the post.

### Run it

Click **Run**. When the run ends, the app says "Content recipe ready". The node shows the topic, the format with its confidence, the length, the pace, the hook, the beats and the reasons the post works. Point at the recipe to open its full text or to copy it.

Workflow: Video Analysis reads the post, and Content Recipe turns the analysis into a recipe that keeps the post's link. Content Ideas writes ideas for your brand, and Generate Script writes one script per idea.

- Video URL → Video Analysis (video)
- Video URL → Content Recipe (source post)
- Video Analysis → Content Recipe (source material)
- Content Recipe → Content Ideas (recipes)
- Text → Content Ideas (brand)
- Content Ideas → Generate Script (prompt)

## Inputs
| Input | Accepts | What it does |
| --- | --- | --- |
| **Source material** | A Video Analysis result, or any node that gives text, JSON or a list, such as a Text node with a caption or a transcript | The material the recipe is read from. Required. |
| **Source post** | The [Video URL](https://nodaro.ai/docs/nodes/automate/video-url) node, or any text node that holds a link | The post's own link. The recipe cites it. A connected link wins over **Post link (optional)**. |

**The page link, not the file.** Most nodes connected to Video URL receive the downloaded video. **Source post** receives the link of the post's page instead, so the recipe can point back to the post.

**One post per run.** When **Source material** receives a list of several posts, the node reads the first one and says so on the node. To get one recipe per post, set the connection to **Each**. See [connection modes](https://nodaro.ai/docs/concepts/nodes-and-connections#connection-modes).

### Which material gives the best recipe

A [Video Analysis](https://nodaro.ai/docs/nodes/video/video-analysis) result gives the best recipe. It carries the timings, the spoken words, the on-screen text and the sound, so the hook and the beats come from what the post really does. A scraped post or plain text, such as a caption or a transcript, also works. Without timings, the node estimates the beats from a natural speaking pace.

## Outputs
| Output | What it carries |
| --- | --- |
| **Recipe JSON** | The recipe as structured data. See [What the recipe contains](#what-the-recipe-contains). |
| **Recipe text** | The same recipe as readable text. It is what a person reads, and what Content Ideas reads when the recipe arrives as text. |

[Content Ideas](https://nodaro.ai/docs/nodes/video/content-ideas) accepts either output.

## Settings
| Setting | What it does |
| --- | --- |
| **AI Model** | The language model that writes the recipe. The default is Gemini 3.6 Flash. The list offers the models that can return structured data. The model's tier sets the price. See [Credits](#credits). |
| **Focus (optional)** | What the recipe should pay special attention to, for example "the hook and the editing rhythm". Up to 2,000 characters. |
| **Post link (optional)** | The post's link, used when nothing is connected to **Source post**. The recipe cites the link, and the node never opens it. While a node is connected to **Source post**, the panel shows "Taken from the wired node" and the name of that node instead of the field. |

## What the recipe contains

| Field | What it holds |
| --- | --- |
| `version` | `1` |
| `source` | Where the recipe came from: `kind` (`video-analysis`, `post` or `text`) and, when known, the post's `url`, `platform`, account `handle`, `title` and `language`. These are read from the input, never invented. |
| `hook` | About the first 3 seconds: `spoken` (word for word, in the original language), `onScreenText` (word for word), `visual`, `types` (1 or 2 hook mechanics, the main one first) and `whyItStops`. |
| `format` | `label`, one format from the list below, and `confidence`, from 0 to 1. |
| `beats` | The post's structure, in order. Each beat has a `start` and an `end` in seconds, a `purpose` and a one-line `description`. |
| `whyItWorks` | 2 to 4 reasons. Each has a `reason` and a `detail` tied to a moment of the post. |
| `cta` | The call to action: its `kind`, and its `text` word for word. The text is empty when the kind is `none`. |
| `sound` | The `kind` of sound and a short `detail`. |
| `durationSec`, `pace`, `aspect` | The length in seconds, measured from the analysis when there is one. The pace, `fast`, `medium` or `slow`. The aspect ratio, when known. |
| `topic`, `summary` | The subject in a few words, and the reusable pattern in 2 or 3 sentences. |

The labels and the descriptions are in English. Quoted words, such as the spoken hook, stay in the language of the post.

### Label lists

Every label comes from a fixed list of English ids. Filters, routers and later nodes can rely on them. Every list except Sound kinds has `other`, for a post that fits none of the others.

- **Formats:** `talking-head`, `pov`, `skit`, `storytime`, `tutorial`, `listicle`, `before-after`, `transformation`, `demo`, `unboxing`, `reaction`, `comparison`, `myth-vs-fact`, `day-in-the-life`, `challenge`, `hot-take`, `trend-remix`, `testimonial`, `behind-the-scenes`, `other`.
- **Hook types**, the mechanic of the hook: `question`, `bold-claim`, `result-first`, `problem-callout`, `tease`, `story-open`, `direct-address`, `relatable-moment`, `pattern-interrupt`, `visual-shock`, `text-overlay`, `sound-hook`, `other`.
- **Beat purposes:** `hook`, `setup`, `problem`, `build`, `demo`, `proof`, `reveal`, `payoff`, `twist`, `cta`, `other`.
- **Reasons it works**, the driver of each reason: `curiosity`, `emotion`, `humor`, `relatability`, `social-proof`, `novelty`, `utility`, `aspiration`, `controversy`, `satisfaction`, `urgency`, `authority`, `other`.
- **Call to action kinds:** `none`, `follow`, `comment`, `share`, `save`, `link-in-bio`, `buy`, `sign-up`, `watch-next`, `dm`, `other`.
- **Sound kinds:** `voiceover`, `on-camera-speech`, `trending-sound`, `music`, `ambient`, `silent`, `mixed`.

## Credits
A run costs one flat price, set by the tier of the AI model:

| Model tier | Credits per run |
| --- | --- |
| Economy, such as Gemini 3.6 Flash (the default) | 6 |
| Standard, such as Claude Sonnet 4.6 | 22 |
| Premium, such as Claude Opus 5 | 39 |

- **Reasoning effort.** From the API, a `reasoningEffort` of `xhigh` or `max` moves the run one tier up, capped at Premium. The settings panel has no reasoning-effort control on this node.
- **Failed runs.** A run that fails is refunded. See [Credits](https://nodaro.ai/docs/concepts/credits).
- **The analysis is priced apart.** The [Video Analysis](https://nodaro.ai/docs/nodes/video/video-analysis) that usually feeds the node is priced by the length of the video. On **Pro**, a post of up to 60 seconds costs 238 credits.

For the price of the whole flow, from the post to the scripts, see [Content Ideas](https://nodaro.ai/docs/nodes/video/content-ideas#credits).

## Tips
- **Analyze the post first.** The hook and the beats are only as good as the material, and Video Analysis gives the most complete material.
- **Keep the link.** Connect the Video URL node to **Source post**, so every idea made from the recipe links back to its post.
- **Use the focus.** Fill **Focus (optional)** when one part matters most, such as the hook or the editing rhythm.
- **Mix several posts.** Make a recipe for each post and connect them all to Content Ideas. The ideas spread across the posts.

## Troubleshooting
**The run stops with "connect a Video Analysis, a post or some text first".** Nothing usable is connected to **Source material**. Connect a Video Analysis, a post or a text node, and run again. The run stops before anything is charged.

**The run ends with "Content recipe failed".** The model did not finish the recipe. The credits are refunded. Run the node again.

**The node says it read only the first post.** **Source material** received a list of several posts. Set the connection to **Each** to make one recipe per post.

**The recipe has no link to the post.** Nothing was connected to **Source post**, and **Post link (optional)** was empty. Connect the Video URL node to **Source post**, or paste the link into **Post link (optional)**.

## From the API
`POST /v1/content-recipe` makes a recipe on Nodaro Cloud. The body takes `source`, the post's material as text, and the optional `sourceUrl`, `focus`, `llmModel` and `reasoningEffort`. The material can be a Video Analysis result as a JSON string, a post, a caption or a transcript.

```bash
curl -s https://app.nodaro.ai/v1/content-recipe \
  -H "Authorization: Bearer $NODARO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
"source": "Caption: three mornings, one mug. Which one is you?",
"sourceUrl": "https://www.tiktok.com/@example/video/7300000000000000000",
"focus": "the hook and the editing rhythm"
}'
```

The answer is `{ "jobId": "…" }`. Poll the job with `GET /v1/jobs/:id/status` until its status is `completed`. Its `output_data` holds the recipe as `json` and as `text`. See [Jobs](https://nodaro.ai/docs/developers/api/jobs).

A request that cannot run is refused with `400` before any job exists, so nothing is charged. That happens with an empty `source` or one over 300,000 characters, a `focus` over 2,000 characters, a model that cannot return structured data, or a `sourceUrl` that is not an http or https link.

There is no dedicated MCP tool or SDK method. In a workflow, the node's type is `content-recipe`. AI assistants and code can add it with the [workflow tools](https://nodaro.ai/docs/mcp/tools/projects-and-workflows) or the [Workflows API](https://nodaro.ai/docs/developers/api/workflows).

## Frequently asked questions

### What does the Content Recipe node return?

A recipe of one post. It holds the hook of the first 3 seconds and why it stops the scroll, and the format with a confidence. It also holds the timed beats, 2 to 4 reasons the post works, the call to action, the sound, the length and the pace. The recipe comes as structured JSON and as readable text.

### What should I connect to Content Recipe?

A Video Analysis of the post gives the best recipe, because it carries the timings, the spoken words, the on-screen text and the sound. A scraped post, a caption or a transcript also works. Connect the Video URL node to Source post to keep the post's link on the recipe.

### How many credits does Content Recipe cost?

6 credits per run on an economy model such as Gemini 3.6 Flash, the default. A standard model costs 22 credits and a premium model 39. A failed run is refunded. The Video Analysis that usually feeds the node is priced separately, by the length of the video.

### Can I reuse a recipe without copying the original post?

Yes. Connect the recipe to Content Ideas. Its ideas borrow only the structure of the post, that is the format, the hook mechanic, the beat order and the pacing. The model that writes the ideas never sees the post's spoken lines, on-screen text or call to action.

### Can I use Content Recipe on a self-hosted install?

No. Content Recipe runs on Nodaro Cloud only, and self-hosted installs do not offer it.
