Skip to content
Back to skills

Script Video

ASecurity

Direct a NodeTool video whose timing follows written voiceover, such as an explainer or narrated b-roll. For on-camera creators, use ugc-video.

  • 552 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 1, 2026
ai-agentsgonode

Works with

  • cli

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add nodetool-ai/nodetool --skill script-video --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Script Video?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Script Video
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/nodetool-ai-script-video/badge)](https://www.skillsdirectory.com/skills/nodetool-ai-script-video)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: script-video
description: "Direct a NodeTool video whose timing follows written voiceover, such as an explainer or narrated b-roll. For on-camera creators, use ugc-video."
---

**Load `/storyboard-core` first.** It carries the loop, the tool contract and
the gating this skill assumes. This job type inverts the order of that loop, so read
the sequence below before creating a board.

## What makes this job type its own

Everywhere else the picture comes first and the words ride along. Here the words are
the spine: they set the running time, and each shot has to be exactly as long as the
line it covers. That is a different tool path — a **script resource** the storyboard
links to — not a storyboard with narration typed into it.

The payoff is that `assemble_storyboard_timeline` on a linked board cuts words and
picture together: each shot runs as long as the takes it covers, and every voiced line
becomes its own voiceover clip.

## The sequence

1. **Research and write the voiceover.** 150–165 words is about 60 seconds. Write it
   before anything visual exists.
2. `create_script {name}`.
3. `edit_script {script_id, ops}` — `{"op": "add_speaker", "name": "Narrator"}`, then
   one `{"op": "add_line", "text": "..."}` per sentence. One sentence per line: a line
   is the unit that gets a take and times a shot, so a paragraph in one line gives you
   a shot you cannot cut.
4. **Give the narrator a voice:** `find_model` (`text_to_speech`) →
   `{"op": "set_speaker_voice", "target": "Narrator", "provider", "model", "voice"}`.
   Without it every line reads `no_voice`.
5. `derive_storyboard_from_script {script_id, provider, model}` — one shot per line, in
   reading order, each carrying the line ids it covers. Pass a language provider and
   model for a director pass that writes each shot's visuals over that scaffold; omit
   **both** for the bare scaffold.
6. **Rewrite the visuals.** The derived shots are a starting point. Go through with
   `edit_storyboard` `update_shot`, giving each an `action` that is concrete b-roll and
   a `motion` with a count. Set the board `style` and `entity_ids` with `set_board`.
7. **Stills on every shot**, reviewed, before any clip.
8. `voice_script_lines {script_id}` — defaults to every draft or stale line. Word
   timings come from a transcription pass (`transcribe: true` by default) and ride into
   the clips as captions.
9. Clips, then `assemble_storyboard_timeline`, then `validate_timeline`.
10. **Duck the pictures' own sound.** Assembly gives every shot clip an audio twin on a
    "Shot Audio" track. `edit_timeline` → `get_state`, then `set_clip_params` with
    `muted: true` on those clips so the voiceover carries.

## Timing

A shot on a linked board takes its length from its lines' takes — that is
`duration_source: "audio"`, the default once linked. Leave it alone. Pin a shot with
`duration_source: "manual"` plus `duration_seconds` only when it must hold past its
narration, such as a final card.

Voice **before** you cut. A line with no take leaves its shot on its own duration, and
the assembly lists it as skipped.

## Style registers

Put one in the board `style`, and say `no on-screen type` — titles belong on the
timeline as text clips, where they stay editable.

| Register | `style` |
|---|---|
| Flat 2D | `flat vector illustration, three-colour palette, thick uniform strokes, white ground` |
| Documentary macro | `macro photography, shallow depth, natural light, matte film grade` |
| Dark UI | `dark interface on a black ground, single accent colour, crisp type-free panels` |
| Paper-craft | `cut-paper layers, soft drop shadows, warm raking light` |

## Music

Set the board's `music_prompt` only if the board is open in a browser tab —
`ui_storyboard_set_screenplay` is the only writer for it, and assembly turns it into a
draft audio clip. Headless, add a music track yourself: `generate_music`, then
`edit_timeline` → `add_track` + `add_media_clip`, and set its `volumeDb` low enough to
sit under the voiceover.

## Brief

Adapt these examples to the user's brief. Example deliverables, style choices,
and approval checkpoints apply only when the user adopts them.

```
Research [TOPIC], then direct a faceless 16:9 explainer. No on-camera talent.

Write the voiceover first, 150-165 words, one sentence per line, as a script:
create_script, then edit_script to add a Narrator speaker and the lines. Give
the narrator a voice with set_speaker_voice before anything else.

Then derive_storyboard_from_script with a director pass, and rewrite each of the
eight shots' action and motion as concrete b-roll to that voiceover.
Board style: [flat 2D / documentary macro / dark UI / paper-craft], no on-screen
type.

Stills on every shot before any clip. Then voice_script_lines so the shots take
their length from the takes, then clips, then assemble_storyboard_timeline and
validate_timeline. Finish by muting the Shot Audio clips under the voiceover.

Stop after the script and the board. Show me the words before you spend.
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…