What this skill produces
Given a reference video (a link the user liked the style of) and a Vantage Circle topic or product angle, produce:
- An original voiceover script that borrows the reference's structural technique and pacing — never its sentences.
- A two-column HTML production sheet (voiceover left / screen ideas right, timecoded) built from the template below.
Step 1 — Understand the reference, don't just fetch it
YouTube pages are JS-rendered shells — WebFetch on a youtube.com/watch URL only returns nav/footer, never the transcript. Getting real signal takes two passes:
WebFetchthe oembed endpoint for title/channel:https://www.youtube.com/oembed?url=<video_url>&format=json— gives title + channel name reliably.WebSearchthe title + channel for context (series name, sponsor, publish date, general subject).
This gets you metadata, not structure. If the user wants the actual rhetorical structure copied (hook, pacing, central metaphor, sponsor pivot), ask them to paste the transcript rather than guessing from a title — a prior session guessed from genre conventions and it was wrong until the user pasted the real transcript.
Step 2 — Extract structure, not sentences
Once you have the real transcript, identify:
- The hook (first 10-15 sec device)
- The reframe (why the obvious fear/assumption is wrong)
- The central throughline device (a dichotomy, a metaphor, a recurring visual/verbal callback — whatever organizing idea the writer used)
- The concrete examples used to prove the point
- The pivot into product/sponsor — note exactly how it transitions (tone shift, framing move) since this is the hardest part to make feel natural
- The outro (CTA style, pace change)
Do not reuse the reference's actual phrases, character names, or parallel sentence structures ("There has never been a better time to be a ___", "picture two types of ___", etc.) with nouns swapped — that reads as a reskin, not an original script. A prior session did exactly this and the user caught it immediately. The fix: keep the technique (e.g., "one throughline metaphor," "reframe then contrast two archetypes," "specific examples before the abstract point"), invent fresh wording, a fresh central device, and fresh examples grounded in the actual VC topic.
Step 3 — Write the VC script
- Confirm target runtime with the user (default: ask; don't assume 90 sec vs 4 min vs longer).
- ~150 words/minute for a natural pace, but pacing devices (holds, pauses) can stretch it — write to the low end of the target and let cut rhythm fill the rest.
- Tie the payoff/pivot to a specific Vantage Circle product angle (R&R, engagement, pulse surveys, etc.) — confirm which one if not stated.
- Confirm host vs. voiceover-only before writing screen directions. VC has produced voiceover + b-roll only (no on-camera host) before, but don't assume it's always the case — ask.
Step 4 — Break into timed beats
Match the reference's cut frequency (ask, or infer from the transcript's pacing — e.g. a "fast" reference cuts every 2-4 sec even mid-sentence). Break the script into one row per beat: timecode, the voiceover phrase spoken during that beat, and the specific visual for it. Flag any deliberate hold beats (a pull-quote moment, a tone-shift into the product pivot, an outro slowdown) — these are the moments that should NOT follow the fast-cut rule, and calling them out explicitly stops an editor from cutting through them by default.
Step 5 — Build the production sheet artifact
Use the HTML template below as the base (already validated with a real script in production). Fill in the <tbody> rows; keep the token system, fonts, and layout — they're deliberately chosen (serif italic for voiceover = "spoken word" feel, sans for screen directions = "technical note" feel, monospace tabular timecodes, a warm paper ground with a gold/recognition accent, hold-beat badges in the accent color). Adjust the accent hue only if the topic calls for a different mood.
Publish via the Artifact tool with favicon: "🎬".
<title>{{VIDEO_TITLE}} — Production Sheet</title>
<style>
:root {
--paper: #f2efe8;
--vo-tint: #f6f3ea;
--screen-tint: #ecefe9;
--ink: #1c2321;
--ink-soft: #5b665f;
--accent: #a8763a;
--accent-soft: rgba(168, 118, 58, 0.13);
--line: #d9d3c2;
--line-strong: #c7bfa8;
}
@media (prefers-color-scheme: dark) {
:root {
--paper: #1a1c19; --vo-tint: #1e211d; --screen-tint: #202320;
--ink: #ece8de; --ink-soft: #9ba299; --accent: #dba658;
--accent-soft: rgba(219, 166, 88, 0.16); --line: #34372f; --line-strong: #454a3f;
}
}
:root[data-theme="dark"] {
--paper: #1a1c19; --vo-tint: #1e211d; --screen-tint: #202320;
--ink: #ece8de; --ink-soft: #9ba299; --accent: #dba658;
--accent-soft: rgba(219, 166, 88, 0.16); --line: #34372f; --line-strong: #454a3f;
}
:root[data-theme="light"] {
--paper: #f2efe8; --vo-tint: #f6f3ea; --screen-tint: #ecefe9;
--ink: #1c2321; --ink-soft: #5b665f; --accent: #a8763a;
--accent-soft: rgba(168, 118, 58, 0.13); --line: #d9d3c2; --line-strong: #c7bfa8;
}
* { box-sizing: border-box; }
body { margin: 0; background: var(--paper); color: var(--ink);
font-family: Georgia, "Iowan Old Style", "Palatino Linotype", serif; line-height: 1.5; }
.wrap { max-width: 980px; margin: 0 auto; padding: 2.5rem 1.5rem 4rem; }
header { margin-bottom: 2rem; padding-bottom: 1.5rem; border-bottom: 2px solid var(--line-strong); }
.eyebrow { font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace; font-size: 0.72rem;
letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); margin: 0 0 0.6rem; }
h1 { font-size: clamp(1.7rem, 4vw, 2.4rem); margin: 0 0 0.65rem; text-wrap: balance;
font-weight: 400; letter-spacing: -0.01em; }
.meta { display: flex; flex-wrap: wrap; gap: 0.4rem 1.4rem;
font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace; font-size: 0.82rem; color: var(--ink-soft); }
.meta span b { color: var(--ink); font-weight: 600; }
.table-scroll { overflow-x: auto; border: 1px solid var(--line-strong); border-radius: 3px; }
table { width: 100%; border-collapse: collapse; min-width: 720px; }
thead th { position: sticky; top: 0; background: var(--paper); border-bottom: 2px solid var(--line-strong);
text-align: left; padding: 0.7rem 1rem; font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
font-size: 0.7rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-soft);
font-weight: 600; z-index: 1; }
th.col-tc { width: 78px; } th.col-vo { width: 44%; }
td { padding: 0.85rem 1rem; border-bottom: 1px solid var(--line); vertical-align: top; font-size: 0.96rem; }
tr:last-child td { border-bottom: none; }
td.tc { font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace; font-variant-numeric: tabular-nums;
font-size: 0.78rem; color: var(--ink-soft); background: var(--paper); white-space: nowrap; }
td.vo { background: var(--vo-tint); font-style: italic; }
td.screen { background: var(--screen-tint); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-style: normal; font-size: 0.9rem; color: var(--ink); }
.beat { display: inline-block; font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace; font-size: 0.66rem;
letter-spacing: 0.06em; text-transform: uppercase; color: var(--accent); background: var(--accent-soft);
padding: 0.15rem 0.45rem; border-radius: 2px; margin-bottom: 0.4rem; }
.continued { color: var(--ink-soft); font-size: 0.85rem; }
footer { margin-top: 1.5rem; font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
font-size: 0.78rem; color: var(--ink-soft); }
@media (max-width: 600px) { td, th { padding: 0.6rem 0.7rem; font-size: 0.88rem; } }
</style>
<div class="wrap">
<header>
<p class="eyebrow">Vantage Circle · Production Sheet</p>
<h1>{{VIDEO_TITLE}}</h1>
<div class="meta">
<span>Format: <b>{{FORMAT}}</b></span>
<span>Runtime: <b>{{RUNTIME}}</b></span>
<span>Pace: <b>{{PACE_NOTE}}</b></span>
</div>
</header>
<div class="table-scroll">
<table>
<thead><tr><th class="col-tc">TC</th><th class="col-vo">Voiceover</th><th>Screen / B-roll</th></tr></thead>
<tbody>
<!-- one row per beat:
<tr><td class="tc">0:00</td><td class="vo">{{line}}</td><td class="screen">{{visual}}</td></tr>
for a hold/tone-shift beat, prefix the screen cell with:
<span class="beat">Hold Beat</span><br>{{visual}}
-->
</tbody>
</table>
</div>
<footer>{{N}} beats · cut every {{X}}–{{Y}} sec · hold-beats marked above</footer>
</div>
Gotchas learned in production
- Don't claim to have watched a video you only fetched metadata for — say plainly what you could and couldn't verify.
- Don't reskin the reference's actual sentences — extract technique, write fresh content.
- A recurring visual motif (a graphic that opens, changes, and pays off again near the end) gives a host-less voiceover+b-roll video the continuity a human host would otherwise provide — reach for one by default when there's no host.