# Prepublish, full content > Full text of Prepublish's guides, tool comparisons, and original research, with tables and FAQs inline, for AI agents that prefer one request. Canonical index: https://prepublish.ai/llms.txt. Per-page markdown: append .md to any /guides or /blog URL. --- # What Is YouTube Audience Retention? Benchmarks and Fixes (2026) URL: https://prepublish.ai/guides/youtube-retention-guide Updated: 2026-10-01 TL;DR: YouTube audience retention is the percentage of a video the average viewer watches. Strong retention varies by length: 65-75% for under 5 minutes, 50-60% for 5-10 minutes, 40-50% for 10-15 minutes, 35-45% for 15+ minutes. Retention is the single strongest signal in the algorithm. Improve it by strengthening the first 30 seconds, planting re-engagement beats at the 25 and 65 percent marks, varying sentence and section length, and matching script length to topic depth. ## What is YouTube audience retention? Audience retention is the percentage of a video that the average viewer watches: a 10-minute video with 50% retention has an average view duration (AVD) of 5 minutes. What counts as a good rate depends on the length of the video, YouTube publishes no benchmark of its own, and the brackets on this page are third-party numbers, so your own videos are the comparison that matters. YouTube reports both retention and AVD in Studio under Analytics > Engagement. The percentage form is what most creators talk about because it normalizes across video lengths. The graph form (the retention curve) is where the actual diagnosis happens. The curve almost always starts near 100% and drops sharply through the first 30-60 seconds, then declines more gradually until the end. Unlike views or subscribers, retention is a behavioral signal: it records whether the people who started your video kept watching. YouTube Studio reports it after publishing, so it describes what already happened rather than what will happen next. For the formal definition, formula, and comparison to other metrics, see our [audience retention definition](/blog/what-is-youtube-audience-retention). Studio shows the curve after a video is published. To find the passages in your next script most likely to lose attention while they are still words, paste the draft into the [free Prepublish script check](/upload?source=retention-guide-opener). It marks the riskiest passages and rewrites the weakest one. No account and no email address are needed. ## How is audience retention calculated? The formula is straightforward: **Audience retention = (total watch time across all views) / (number of views × video length)** A 10-minute video with 1,000 views and 5,000 minutes of total watch time has retention of 5,000 / (1,000 × 10) = 50%. AVD is 5 minutes. YouTube also calculates retention moment-by-moment: at each timestamp in your video, what percentage of the original audience is still watching? That moment-by-moment percentage is what shows up in the retention graph in Studio. Two sub-metrics matter for diagnosis: - **Absolute retention**: the actual percentage of your audience still watching at each moment in your specific video. - **Relative retention**: how your video's curve compares to similar videos at similar lengths. "Above average" at 3:00 means you are holding viewers better than peers at that point. Use absolute for diagnosis. Use relative for benchmarking. ## How retention affects the YouTube algorithm YouTube's recommendation system uses retention as one of the strongest single inputs for both search ranking and home-feed recommendations. The mechanism is an expanding test: every new video gets shown to a small audience first. If retention is high, the audience expands. If it is low, the test stops. This is why a smaller channel can outrank a larger one for the same query. The smaller channel held the test audience; the larger one did not. Retention affects four specific algorithm decisions: - **Search rankings**: videos with higher retention rank better for their target keywords. - **Suggested videos**: the "up next" sidebar favors videos that hold attention, since the next-video click is the strongest session-continuation signal. - **Home and subscription feeds**: prioritize creators with consistent retention; a consistent upload schedule alone is not enough. - **Monetization quality**: higher retention correlates with better ad CPM because advertisers prefer engaged audiences. For a fuller breakdown of how the algorithm actually weighs signals, see [The YouTube Algorithm Is Simpler Than You Think](/blog/youtube-algorithm-2025). ## What is a good YouTube retention rate? (2026 benchmarks) Benchmarks vary by video length and niche, and the brackets below are third-party numbers rather than YouTube figures: YouTube publishes no retention benchmark. The study these brackets are usually traced to (Backlinko, 2017, 1.3 million videos) analyzed ranking correlations on long-form videos published before Shorts existed, not measured retention rates. Use the table as a rough starting point, then compare your own videos with each other in YouTube Studio, which is the only benchmark that describes your audience: | Video length | "Strong" retention | "Exceptional" retention | | --- | --- | --- | | Under 5 minutes | 65-75% | 75%+ | | 5-10 minutes | 50-60% | 60%+ | | 10-15 minutes | 40-50% | 50%+ | | 15+ minutes | 35-45% | 45%+ | | Shorts (under 60s) | 70-85% | 85%+ | | Live streams | 10-20% (different format, different viewing behavior) | 25%+ | By niche, the rough brackets: | Niche | Typical strong retention (8-12 min videos) | | --- | --- | | Educational and tutorial | 45-55% | | Tech reviews | 45-55% | | Finance and business | 40-50% | | Vlogs and lifestyle | 50-60% | | Gaming (full videos) | 35-45% | | Commentary and essay | 50-60% | | Reaction | 35-45% | | Documentary-style | 45-55% | For a more detailed niche-by-niche benchmark report with citations, see our [retention benchmarks 2026 report](/blog/youtube-retention-benchmarks-2026). The critical rule: compare your retention to similar videos at similar lengths in your niche, not to a global average. A 12-minute finance video at 48% retention is doing well. A 12-minute vlog at 48% retention has work to do. ## How to read your retention graph The retention graph in YouTube Studio is the most useful single piece of analytics data you can read. Four things to look for: **The first 30 seconds.** The steepest drop in almost every video happens here. A steep first-30-seconds drop usually means the hook is weak or the opening does not deliver on the title. Judge steepness against your own recent videos in YouTube Studio rather than a universal threshold. See our [first 30 seconds guide](/guides/first-30-seconds). **Spikes (the curve goes up).** Spikes mean viewers rewatched that section. These are your most valuable moments. Identify what made them compelling and reuse the pattern. **Cliffs (sudden drops at specific timestamps).** A cliff at 2:30 in a 10-minute video means something specific at that moment lost viewers. Common causes: a tangent, a slow visual, a confusing transition, or a sponsorship break that ran too long. **Gradual decline.** A steady downward slope is normal. The slope of the decline matters more than its existence. There is no universal healthy per-minute slope; judge the decline against your own channel's previous videos in Studio. The shape of the curve carries information beyond the average percentage. A smooth 50% curve outranks a 50% curve with a 30-point cliff at 90 seconds, because the cliff predicts where future viewers will also leave. ## The 10 retention killers (in order of impact) The patterns that consistently destroy retention, ranked by how often they show up in script analysis: 1. **Weak first 15 seconds.** The largest single drop in almost every video. The opening does not deliver on the title's promise. 2. **Long setup or intro.** More than 15-20 seconds of context before any value. Viewers leave before the actual topic arrives. 3. **Padded length.** Stretching a 6-minute idea to 10 minutes for ad eligibility creates a cliff at the 5-6 minute mark. 4. **No re-engagement beat past 50%.** Long videos that never restate the payoff or change the visual frame lose viewers in the second half. 5. **Tangents that do not serve the main payoff.** Tangents feel natural while recording. They feel irrelevant when watched. 6. **Monotonous pacing.** Uniform sentence length and uniform section length flatten the curve even when the content is good. Pacing variety is worth more attention than vocabulary polish. 7. **Sponsorship reads at the wrong moment.** Mid-roll ad placements between 60-180 seconds often coincide with the steepest cliffs. Move them to after the first payoff lands. 8. **Title overpromises.** If the content does not match the clickbait, viewers leave immediately and remember. 9. **Repetition without escalation.** Saying the same thing three ways pads length without adding value. 10. **Energy drops in delivery.** Monotone or visibly low-energy sections drain viewer attention. The script can fix this with shorter sentences and direct second-person framing. These are script-level problems with script-level fixes. Cut the section, rewrite the hook, plant a re-engagement beat, vary the sentence length. Do those four things and the curve moves. ## How to maintain engagement throughout Getting viewers past the hook is the start. Here is what holds them through the rest: **Open loops.** Introduce questions or stakes that resolve later. "In a minute I will show you the counterintuitive trick that made this work." The unresolved question is the carrier of attention. The [watch time psychology guide](/guides/youtube-watch-time-psychology) covers why these mechanisms work on the brain level. **Change the stimulus every 30-60 seconds.** Tone shift, visual cut, angle change, sentence-length shift. Monotony is what kills the curve, not bad content. The right frequency varies by content type; the [pattern interrupt playbook](/guides/youtube-pattern-interrupts) has the numbers per category, and there are [six ways to do it without B-roll](/blog/pattern-interrupts-no-broll) if you film with one camera. **Plant re-engagement beats.** At roughly the 25 percent and 65 percent marks, restate the payoff or surface a new angle. A single sentence in the right place can renew attention by giving the viewer a fresh reason to keep going. The dip around the quarter mark is the most common [mid-video retention drop](/blog/youtube-mid-video-retention-drop), and it has four siblings worth knowing. **Use micro-hooks.** Throughout the body, add small hooks that promise upcoming value. "But the most useful piece is still ahead." Use sparingly; one per body section is enough. **Cut anything that does not earn its time.** If a section can be removed without breaking the argument, remove it. The [script writing patterns guide](/blog/script-writing-tips) covers the cut test and five other structural habits. ## How to map attention risk before you publish Traditionally, retention data only exists after a video is live. That creates a frustrating loop: publish, wait, analyze, hope you remember the lessons for next time. Script-level analysis breaks the loop. By the time a script is written, most of what determines retention is already locked in. Hook strength, section pacing, length-to-topic fit, re-engagement placement, and sentence variation are all measurable before recording. [Prepublish](/upload) runs that analysis on the draft. Paste a script and see: - Script-hold risk map, second by second - Hook strength score with rewrite suggestions - Section-level pacing flags - Specific copy-paste rewrites for the weakest passages - Title alternatives ranked by curiosity gap and clarity For the section structure that holds the curve once you know where the weaknesses are, see the [Script Structure Guide](/guides/script-structure-guide). ## FAQ Q: What is a good retention rate on YouTube? A: Strong retention varies by video length. Under 5 minutes: 65-75%. 5-10 minutes: 50-60%. 10-15 minutes: 40-50%. 15+ minutes: 35-45%. Shorts: 70-85%. Above the high end of each range is exceptional. Compare against similar videos at similar lengths in your niche, not a global average. Q: How is YouTube audience retention calculated? A: Retention equals total watch time across all views divided by views times video length. A 10-minute video with 1,000 views and 5,000 minutes of total watch time has 50% retention and 5-minute average view duration (AVD). Q: How does retention affect the YouTube algorithm? A: Retention is one of the engagement numbers YouTube Studio reports after you publish, and it is widely described as a major input to recommendation. The model we use on this site is an expanding test: a new video is shown to a small audience, and distribution widens when those viewers keep watching. Treat that as a working model rather than a YouTube document, since the ranking factors themselves are not published. Q: What is the difference between absolute and relative retention? A: Absolute retention shows the percentage of viewers still watching at each moment in your specific video. Relative retention compares your curve to the typical pattern of similar videos at similar lengths. Use absolute for diagnosis (which moments lost viewers), relative for benchmarking (whether that loss is normal). Q: What causes viewers to drop off in YouTube videos? A: The top 10 retention killers, in order: weak first 15 seconds, long setup before value, padded length, no re-engagement beat past 50%, tangents that do not serve the payoff, monotonous pacing, badly-placed sponsorship reads, title overpromises, repetition without escalation, energy drops in delivery. All are script-level problems with script-level fixes. Q: How do I improve YouTube retention? A: Five highest-leverage fixes: strengthen the first 30 seconds with a clear payoff, plant a re-engagement beat at the 25-30% mark, cut anything that does not serve the main payoff, vary sentence and section length, and match script length to topic depth. These fixes remove script-level hold risks; how far the retention graph moves also depends on delivery, editing, and packaging. Q: What is a retention cliff and how do I fix it? A: A retention cliff is a sudden 10+ point drop at a specific timestamp. It usually means a specific moment lost viewers: a tangent, a slow visual, a confusing transition, or a sponsorship break that ran too long. To fix: identify the cliff timestamp in YouTube Studio, watch your video at that point, and either cut the offending section or rewrite the transition. Q: Can I check retention risk in a script before publishing? A: Yes, as a reading of the draft rather than a forecast. Hook strength, section pacing, length-to-topic fit, re-engagement placement, and sentence variation are all visible in the script alone. Tools like Prepublish map script-hold risk, flag sections where pacing sags, and return copy-paste rewrites. Treat the result as directional and compare it with your own published retention graphs. Q: What is the average audience retention rate on YouTube? A: Neither YouTube nor Prepublish publishes a single average across all of YouTube, and any table that claims one is a third-party estimate. The brackets on this page are third-party numbers from 2017 and later, before Shorts existed. The useful version of the question is local: average the percentage viewed across ten of your own videos of similar length and topic, and treat that as your baseline to beat. Q: What is a good audience retention rate for a 10-minute video? A: The third-party bracket for 10 to 15 minute videos sits around 40 to 50 percent, but it is not a YouTube figure. Compare with your own videos of about that length instead: pull the average percentage viewed for the last five, and look at which one held best. Then read the curve, not the average, to see which sections cost you viewers. Q: How do I find my audience retention in YouTube Studio? A: Open YouTube Studio, pick a video, then Analytics and Engagement: the retention graph and average view duration both live there. Read the graph as the percentage of the original audience still watching at each moment, and use the shape (where the line flattens or cliffs) rather than the single average when deciding what to change in the next script. --- # 36 YouTube Hook Examples You Can Copy (and Why Each One Works) URL: https://prepublish.ai/guides/youtube-hook-examples Updated: 2026-10-01 TL;DR: YouTube hooks are the first 5-15 seconds that grab viewer attention. The most effective types are: Curiosity Gap (tease without revealing), Proof (show results upfront), Story (start mid-action), Direct Value (state exactly what viewers learn), and Question hooks. Match your hook style to your content type. ## Why Hooks Matter More Than Ever A YouTube hook is the first 5 to 15 seconds of a video, roughly one to three spoken sentences, and it is the part of the script where the viewer decides to stay or leave. This guide collects 36 copy-paste hooks across 9 patterns (curiosity gap, contrarian, proof, story, direct value, question, preview, demonstration, stakes): one worked example per pattern, three variations to adapt, and the psychology behind each one. This library is Prepublish's own craft guidance, not a summary of YouTube's: we do not cite an official YouTube rule for any of these patterns, and where a number appears below it comes from a linked Prepublish study with its sample size. Opening with a concrete promise gives the viewer a reason to keep watching, which is why the hook is scripted before the body. Prepublish has not measured a retention effect for any individual pattern here, so treat each example as a writing pattern to test on your own videos rather than a guaranteed lift. The hooks below aren't tricks or gimmicks. They're psychological patterns that align viewer curiosity with your content's value. ## Continuous curiosity hooks: keeping the open loop alive past the first line A continuous curiosity hook is a script opening that asks its first question in line one, then re-opens or narrows that same loop roughly every 20 to 40 seconds rather than paying it off at once. The point is to keep one question unanswered at every moment, so the script never hands the viewer a natural place to stop. Most hooks are written as one question with one answer. A continuous curiosity hook is written as a chain: open the loop, pay off part of it, re-open it. The mistake to avoid is answering the first question completely before asking the next one, because an answered question is the natural place to stop watching. Two hooks from the library below, each stretched across three beats. **Worked example 1: the Curiosity Gap hook, three beats** - **Beat 1, open the loop (0 to 15 seconds)**: "There's one mistake every new YouTuber makes that kills their channel. And I made it for two years before I figured it out." - **Beat 2, pay off part of it and hand over the next question (roughly 20 to 40 seconds in)**: "The mistake was writing the opening last. That is the what. The reason it costs the whole video is the part almost nobody explains, and it is why the fix looks wrong at first." - **Beat 3, narrow instead of close**: "So the fix is not a better first line. It is a different order of work, and I am going to show you the order I use now." **Worked example 2: the Proof hook, three beats** - **Beat 1, open the loop with a result (0 to 15 seconds)**: "This script structure took my videos from 5,000 to 500,000 views. I'm going to show you exactly how it works." - **Beat 2, pay off part of it**: "The structure has three parts, and the first two are ordinary. The third one is what changes how long viewers stay, and it is the part most scripts leave out." - **Beat 3, narrow instead of close**: "Before I show you the third part, here is what the first two look like in a real script, because the third one only works on top of them." **How to use it**: script the loops in pairs. Write the payoff first, then write the question that payoff makes the viewer ask next. If a section answers everything and opens nothing, cut it or move it. **What this is built on, and what it is not**: the study data on this site measures the opening, not loop cadence. In the [349-video hook study](/blog/youtube-hook-study), hits engaged the title's promise in 87 percent of openings against 78 percent for flops, and both reached their first concrete reason to keep watching at about word 14 (data in `prepublish-fe/app/blog/blog-data.ts`, slug `youtube-hook-study`). That finding is about the first seconds. The 20 to 40 second cadence above is a craft recommendation from script review, not a measured effect, and no study on this site attaches a retention number to it. ## The Curiosity Gap Hook **Example**: "There's one mistake every new YouTuber makes that kills their channel. And I made it for two years before I figured it out." **Why it works**: Creates an open loop (what's the mistake?) combined with stakes (it kills channels) and credibility (I experienced it). **How to use it**: Identify the key revelation in your video. Tease it without revealing it. Add personal stakes or experience to increase investment. **Variations**: - "Most people get [topic] completely wrong, and it's costing them [consequence]." - "I discovered something about [topic] that changed everything." - "There's a reason [common approach] doesn't work, and it's not what you think." ## The Contrarian Hook **Example**: "Everything you've been told about growing on YouTube is wrong. Here's what actually works." **Why it works**: Challenges existing beliefs, creating cognitive dissonance that viewers want to resolve. Promises insider knowledge. **How to use it**: Identify conventional wisdom in your niche. Position your content as the truth that contradicts it. Deliver on this promise. **Variations**: - "Forget everything you know about [topic]." - "[Common advice] is actually hurting you. Here's why." - "The [topic] industry doesn't want you to know this." ## The Proof Hook **Example**: "This script structure took my videos from 5,000 to 500,000 views. I'm going to show you exactly how it works." **Why it works**: Leads with results, proving the content has value before asking for time investment. Specific numbers create credibility. **How to use it**: Start with measurable results you've achieved. Promise to reveal the method. Use specific numbers over vague claims. **Variations**: - "I tested [method] for 30 days. Here are the results." - "This [strategy] generated [specific result]. Let me break it down." - "After [number] videos, I finally found what works." ## The Story Hook **Example**: "Three months ago, I was ready to quit YouTube. Then I tried something that changed everything." **Why it works**: Humans are wired for stories. A narrative hook creates emotional investment and curiosity about the resolution. **How to use it**: Start in the middle of the action or at a low point. Tease the transformation. Make it personal and relatable. **Variations**: - "I almost gave up on [goal]. Here's what saved it." - "Last week, something happened that I need to tell you about." - "This started as a disaster. It ended up being my biggest success." ## The Direct Value Hook **Example**: "In the next 10 minutes, you're going to learn the exact script structure that holds viewer attention. No fluff, just the method." **Why it works**: Some viewers appreciate directness. This hook promises specific value with a clear time commitment and sets expectations. **How to use it**: State exactly what viewers will learn. Include a time frame. Explicitly promise to avoid common frustrations (fluff, padding). **Variations**: - "Here's exactly how to [achieve result], step by step." - "I'm going to show you [specific thing] in under [time]." - "This is the complete guide to [topic]. Everything you need, nothing you don't." ## The Question Hook **Example**: "What if I told you that your video titles are actually hurting your views? Would you change them?" **Why it works**: Questions engage the viewer's mind directly. Rhetorical questions with surprising implications create engagement. **How to use it**: Ask a question that challenges assumptions or promises revelation. Follow with evidence or explanation. **Variations**: - "Have you ever wondered why [observation]?" - "What's the difference between channels that grow and channels that don't?" - "Why do some videos go viral while others flop?" ## The Preview Hook **Example**: "By the end of this video, you'll know exactly how to write hooks that keep viewers watching. I'll show you the formula, the examples, and the mistakes to avoid." **Why it works**: Clearly outlines the value proposition. Viewers can evaluate whether the content is worth their time. **How to use it**: List 3-4 specific things viewers will learn. Be concrete, not vague. Create a mini table of contents. **Variations**: - "Today we're covering [point 1], [point 2], and [point 3]." - "Here's what you'll learn: [bullet points of value]." - "I'm breaking this down into [number] parts: [list]." ## The Demonstration Hook **Example**: [Shows result immediately] "This is what happens when you apply the technique I'm about to teach you." **Why it works**: Showing is more powerful than telling. Starting with the end result creates desire for the journey. **How to use it**: Begin with visual or audible proof of results. Then promise to explain how. Works especially well for tutorials. **Variations**: - "Watch this. [demonstration] Now let me show you how to do it." - "[Shows before/after] Here's how I did it." - "This is the final result. Here's how we get there." ## The Stakes Hook **Example**: "If you don't fix this one thing in your videos, you'll never grow past 1,000 subscribers. I'm going to show you exactly what it is." **Why it works**: Creates urgency through potential loss. Fear of missing out or making mistakes is a powerful motivator. **How to use it**: Identify a real consequence of not having this information. Be specific about the stakes. Promise the solution. **Variations**: - "This mistake is killing your [metric]. Let's fix it." - "Most creators never learn this, and it shows in their results." - "If you're struggling with [problem], this is probably why." ## How to Choose Your Hook The best hook depends on your content and audience: **Educational content**: Direct Value, Preview, or Proof hooks work well. Viewers want to know what they'll learn. **Entertainment**: Story, Curiosity Gap, or Demonstration hooks create engagement. Emotion matters more than information. **Opinion/Commentary**: Contrarian or Question hooks spark interest. Position yourself against the status quo. **Tutorials**: Demonstration or Preview hooks set expectations. Show the result, then teach the process. **Test and iterate**: Try different hook styles for similar content. Your analytics will reveal what resonates with your specific audience. ## FAQ Q: What is a continuous curiosity hook in a video script? A: A continuous curiosity hook is a script opening that asks its first question in line one, then re-opens or narrows that loop roughly every 20 to 40 seconds instead of paying it off at once. Keep one question unanswered at every moment so the script never hands the viewer a natural place to stop. Q: How long should a YouTube hook be? A: Five to fifteen seconds, roughly one to three sentences. The hard deadline is second 15: if a specific payoff claim has not landed by then, most of the viewers who are going to leave have already left. Shorter is fine; a hook that lands in 5 seconds beats one that takes 20 to warm up. Q: What makes a good YouTube hook? A: A good hook creates immediate interest, sets clear expectations, and makes viewers commit to watching. It should happen in the first 5-15 seconds. The most effective hooks create curiosity without revealing everything, show proof of value, or start with an engaging story. Q: What is a curiosity gap hook? A: A curiosity gap hook teases information without revealing it, creating an open loop viewers want to close. Example: "There's one mistake every new YouTuber makes that kills their channel. And I made it for two years before I figured it out." Q: What hook should I use for tutorials? A: For tutorials, use Direct Value, Preview, or Demonstration hooks. Show the end result first, state exactly what viewers will learn, or demonstrate the outcome they'll achieve. Example: "Here's the finished project. In the next 10 minutes, I'll show you exactly how to build it." Q: What is a hook in YouTube? A: A hook is the opening of the video, usually the first 5 to 15 seconds or one to three spoken sentences, where the viewer decides whether to keep watching. It is a scripting term rather than a YouTube product feature. Everything on this page is Prepublish's own library of hook patterns, not official YouTube guidance. Q: Does YouTube say the hook belongs in the first 15 seconds? A: We do not cite an official YouTube source for a 15-second rule, so we do not claim YouTube said it. The 5 to 15 second window is Prepublish's working guidance for scripted openings, and this page labels it as a craft default. Your own retention graph in YouTube Studio is the record of what your viewers actually did. Q: What are the best YouTube hooks? A: The patterns with the most examples here are curiosity gap, contrarian, proof, story, and direct value, because they cover most topics. There is no measured best pattern: in our own opening studies, hit and flop videos opened almost identically, so pick the pattern that matches your topic and the promise your title already makes, then test it against your own audience. --- # How to Structure a YouTube Script for Maximum Retention URL: https://prepublish.ai/guides/script-structure-guide Updated: 2025-01-15 TL;DR: The best YouTube script structure follows Hook-Body-Payoff. Hook (0-30 seconds) grabs attention and sets expectations. Body uses modular content blocks with mini-hooks, open loops, and varied pacing (change something every 30-60 seconds). Payoff summarizes key insights, delivers the "aha moment," and includes a call to action. ## Why Script Structure Matters Even the best information fails without proper structure. Viewers want value, and they want it delivered in a way that holds their attention. Structure creates momentum. Each section should flow naturally into the next, creating a sense of progression that keeps viewers watching. The structure below works for most YouTube content. Adapt it to your style, but understand the principles before you break the rules. ## The Core Framework: Hook, Body, Payoff Every effective YouTube script follows this basic arc: **Hook (0-30 seconds)**: Grab attention, set expectations, create curiosity. This is covered extensively in our hook guide. **Body (bulk of video)**: Deliver on your promise. Build from simple to complex. Maintain engagement through techniques covered below. **Payoff (final 10%)**: Summarize key points, deliver the ultimate insight, call to action. End strong. This framework is simple but most creators fail at execution. The body section is where retention is won or lost. ## The Body: Modular Content Blocks Break your body into discrete modules, each with its own mini-structure: **Each module should have:** - A mini-hook (why this section matters) - The content itself - A transition to the next section (forward momentum) **Example module structure**: "Now that you understand X, let's talk about Y, and this is where most people get it wrong. [content] Armed with this, you're ready for the advanced technique coming up." This modular approach makes long content digestible and gives viewers constant micro-payoffs. ## Open Loops: The Secret to Retention Open loops are promises of future value that keep viewers watching to see the resolution. **How to use them**: - Early in the video: "I'll show you the counterintuitive trick that ties all this together at the end." - Between sections: "But before we get to the most important part, you need to understand this." - Stacking: Multiple open loops create compounding curiosity. **Close your loops**: Failing to deliver on open loops destroys trust. Make note of every loop you open and ensure you close it. **Don't overuse**: Too many open loops feels manipulative. Use 2-4 per video depending on length. ## Pacing: The Rhythm of Engagement Pacing is the rhythm of your content: how information density and energy vary throughout. **Vary your pacing**: - Dense information → lighter example or story - Serious content → moment of levity - Building → release/payoff **The 30-second rule**: Something should change every 30-60 seconds. This could be a visual change, topic shift, tonal shift, or new information. **Energy management**: Start with high energy for the hook, settle into teaching energy for the body, build energy toward the conclusion. ## Transitions That Maintain Momentum Poor transitions cause retention drops. Viewers should never wonder "why am I hearing about this now?" **Effective transition patterns**: - Cause and effect: "Because of X, we now need to talk about Y." - Building: "Now that you understand X, you're ready for Y." - Contrast: "But there's a problem with X. That's where Y comes in." - Curiosity: "X is important, but Y is what really makes the difference." **Avoid dead-end transitions**: "Okay, so..." or "Moving on..." signal that sections are disconnected. ## The Conclusion: End Strong Many creators fumble the ending. A weak conclusion undermines the entire video. **Strong conclusion elements**: - Recap key insights (brief, not repetitive) - Deliver the ultimate payoff (the "aha moment") - Call to action (subscribe, watch next video, etc.) - Optional: Callback to the hook (creates satisfying closure) **Timing matters**: Your conclusion should feel earned, not rushed. But don't pad it; viewers can sense when you're stalling. **Don't trail off**: Some creators lose energy at the end. The conclusion should have equal or greater energy than the rest. ## Adapting Structure to Content Type **Tutorial/How-To**: - Hook: Show the end result - Body: Step-by-step modules - Payoff: Completed project + what to do next **List Videos**: - Hook: Promise the number and value - Body: Each item is a module, order from least to most impactful - Payoff: Summarize and emphasize the most important **Story/Commentary**: - Hook: Start in the middle of the action - Body: Build chronologically with rising stakes - Payoff: Resolution + your take/lesson **Review**: - Hook: Tease the verdict without spoiling - Body: Systematic evaluation (design, features, value) - Payoff: Clear verdict + who it's for Each of these skeletons exists as a full copy-paste version in the [script templates library](/templates), with the hook, module, and payoff sections already laid out per format. ## FAQ Q: How do you structure a YouTube script? A: Use the Hook-Body-Payoff framework. Hook (0-30 seconds): grab attention and set expectations. Body: deliver on your promise using modular content blocks with mini-hooks, open loops, and transitions. Payoff (final 10%): summarize key points, deliver the ultimate insight, and include a call to action. Q: What are open loops in YouTube videos? A: Open loops are promises of future value that keep viewers watching. Example: "I'll show you the counterintuitive trick that ties all this together at the end." Use 2-4 per video and always close them; failing to deliver destroys trust. Q: How long should a YouTube video introduction be? A: The hook should be 0-30 seconds. More than 15-20 seconds of setup before delivering value is a common retention killer. Jump into value immediately and avoid generic greetings like "Hey guys, welcome back to my channel." --- # The First 30 Seconds of a YouTube Video: A Retention Playbook (2026) URL: https://prepublish.ai/guides/first-30-seconds Updated: 2026-10-01 TL;DR: The first 30 seconds are where a YouTube opening does its work, and the structure below is Prepublish's guidance for that window rather than a YouTube rule: pattern interrupt (0-5s), a specific payoff promise (5-15s), then a commitment hook (15-30s). Where the steepest part of your own curve lands varies by video, so read it in YouTube Studio instead of aiming at a universal number. Hook patterns vary by niche: proof and tutorial for how-to content, contrarian for commentary, story for vlogs. ## Why the first 30 seconds decides the video The first 30 seconds are where a YouTube opening does its work: the viewer is deciding whether the video will deliver on the title's promise. This page covers what we recommend putting in that window: three phases in order (pattern interrupt, payoff promise, commitment hook), hook patterns by niche, and four before/after rewrites. This is Prepublish's guidance for scripting an opening, not a YouTube rule. We do not cite an official YouTube source for a specific second marker, and we do not publish a benchmark for what your retention should be at second 30; the shape of your own curve in YouTube Studio is the number to read. A video is tested on a small audience before it reaches a wide one, and the opening is the stretch a viewer spends deciding whether to stay. Treat the timings below as planning defaults for your script rather than measurements of your viewers. The steepest part of the opening is usually somewhere inside the first 30 seconds, so that is the stretch of the script worth writing most deliberately. Where it lands and how steep it gets vary from video to video, which is why you read your own graph rather than aiming at a universal number. Our [script pattern checklist](/blog/youtube-script-retention-study) treats the payoff claim as a practical planning default: give the viewer something concrete inside the opening, not after it. A draft that lands a concrete value claim inside that window has given the viewer a reason to stay; a draft that does not has spent the window on setup. The practical version: the first 30 seconds must accomplish three things, in order. 1. Confirm the viewer is in the right place (the opening references the title's promise). 2. Promise a specific payoff. 3. Start delivering, or create a concrete information gap that the viewer commits to closing. To test your own opening before you record it, paste its first sentences into the free [Hook Analyzer](/tools/youtube-hook-analyzer?source=first-30-seconds-opener), or the whole draft into the [free Prepublish script check](/upload?source=first-30-seconds-opener). The script check marks the passages most likely to lose attention and rewrites the weakest one. No account and no email address are needed. ## The 3-phase split in seconds: 0 to 5, 5 to 15, 15 to 30 The first 30 seconds of a YouTube video has three phases, defined by second: pattern interrupt from 0 to 5, payoff promise from 5 to 15, and commitment hook from 15 to 30, in that order. Those phase lengths are a planning default for your script, not a measurement of your viewers. | Phase | Seconds | Job | | --- | --- | --- | | Pattern interrupt | 0 to 5 | Break the home-feed scroll with a bold claim, an unexpected visual, on-screen text, or a one-line question | | Payoff promise | 5 to 15 | State the single concrete value the viewer gets by staying | | Commitment hook | 15 to 30 | Give the reason to stay through the body: an information gap, a proof of the result, the opening of a story, or the start of the demonstration | The phases can overlap, which is normal. The functions still have to all happen, in that order, before second 30. Where the steepest part of your own curve lands inside the opening varies by video, so read it in YouTube Studio rather than aiming at a universal number. ## The early drop: timing as a planning default On most retention curves, the steepest part of the opening lands somewhere inside the first 30 seconds. Where it lands and how steep it gets vary from video to video, which is why you read your own graph in YouTube Studio instead of aiming at a universal number. What the opening must resolve: whether the video will deliver on the title's promise. If the hook has already landed the payoff claim, the viewer has a reason to stay. If it has not, the exit is one click away. The planning default used throughout this guide: the payoff claim belongs to the opening, not to the middle of the video. A planning default for script structure (not a measurement): - Seconds 0-5: pattern interrupt or attention capture (a bold visual, a specific claim, an unexpected opening). - Seconds 5-15: deliver the payoff claim. State what the video will give the viewer if they stay. - Seconds 15-30: either start the body or plant the specific information gap the rest of the video resolves. ## The three-phase structure that holds viewers Every working 30-second opening follows roughly the same phase structure. The phases can overlap, but the functions have to all happen. **Phase 1: Pattern interrupt (seconds 0-5).** Break through the home-feed scroll. A bold claim, an unexpected visual, a quick on-screen text statement, or a single-line question. Your first words must be more interesting than whatever video the viewer might skip to. **Phase 2: Payoff promise (seconds 5-15).** State the single concrete value the viewer will get by staying. Specific beats vague. "I will show you the three-line change that lifted retention 17 points" beats "this video covers some retention tips." **Phase 3: Commitment hook (seconds 15-30).** Create the reason the viewer stays through the body. Usually one of: an information gap (curiosity hook), a proof of the result (proof hook), the opening of a story (narrative hook), or the start of the actual demonstration (tutorial hook). By second 30 the viewer should know what they will get, believe it is worth the runtime, and be committed enough to stay through the next beat. ## Hook patterns by niche The three-phase structure is universal. The specific hook pattern that lands it varies by niche. Here is what works in the main categories in 2026: | Niche | Strongest hook patterns | Opening line examples | | --- | --- | --- | | Gaming | Proof, pattern interrupt | "This run broke the speedrun record by 47 seconds. Here is how." | | Tech reviews | Proof, curiosity gap | "This phone is $400 cheaper than its competitor. The trade-off is specific and it might not matter to you." | | Finance | Proof, contrarian | "The index-fund advice you have heard is mostly right. But three specific cases break it." | | Education | Tutorial, question | "In the next 8 minutes I will show you how gradient descent actually works, in plain English, with no formulas." | | Vlogs | Story cold open | "Three hours ago I was not planning to film this. Then something happened." | | Commentary | Contrarian, curiosity gap | "Everyone is missing what actually happened in this story. The part that matters has not been covered yet." | | Shorts | Pattern interrupt (visual) | Opening visual reveal in the first second, speech starts at second 2 | | Tutorials (software) | Proof + tutorial | "Here is the finished build. [shows result] I will walk you through it in under 6 minutes, including the trick that makes it work." | For 36 copy-paste hook examples by type, see our [hook examples guide](/guides/youtube-hook-examples). For the definitional breakdown of each hook type, see [what is a YouTube hook](/blog/what-is-a-youtube-hook). ## Before and after: four rewrites that lift the curve The fastest way to understand the difference is to see the same opening rewritten. Four real patterns from script analysis: **Rewrite 1: The generic tutorial opener** Before (illustrative example: a steep early drop): "Hey everyone, welcome back to the channel. Today I want to talk about something that a lot of people ask me about, which is how to write a YouTube script. Let's get into it." After (illustrative example: the same opening rewritten): "Most YouTube scripts fail at the same three structural points. I will show you the exact fixes, in order, in the next 8 minutes. First one is at the 15-second mark, which is where I am going to demo it now." Difference: payoff claim in the first 10 seconds, a specific number (three), a clear timeline commitment. **Rewrite 2: The commentary opener** Before: "So, a lot of people have been asking me about what I think of [topic]. And I have some thoughts. Let me go through them one by one." After: "The coverage of [topic] so far has missed the one detail that actually explains what happened. I went back through the transcripts and found it. Here it is." Difference: contrarian position stated immediately, evidence promised, specificity. **Rewrite 3: The review opener** Before: "I've been using this product for a few weeks now. Overall, my impressions are pretty mixed. There are some good things and some bad things." After: "This product solves one specific problem extremely well. It fails at the thing most reviewers are praising. I will show you both, and help you decide whether the first one matters more to you than the second." Difference: opinion stated immediately, framework clear, viewer decision posed. **Rewrite 4: The finance explainer** Before: "Today we are going to talk about index funds versus individual stocks. This is a topic that is really important for anyone thinking about investing." After: "Index funds beat individual stock picking for 94 percent of retail investors. You are probably in that 94 percent. I will show you the three cases where you are not, so you can tell which group you fall into." Difference: specific number in the first sentence, personal stakes, framework for what the video actually delivers. The pattern across all four rewrites: specificity replaces generality, the payoff claim moves forward, and the viewer gets a concrete reason to stay inside the opening. ## The 7 openings that kill retention The patterns that consistently fail in the first 30 seconds, ranked by how often they show up in script analysis: 1. **Generic greeting.** "Hey guys, welcome back to the channel." Burns 3-5 seconds on information the viewer already has (they clicked the video; they know whose channel it is). 2. **Logo or channel bumper.** Branded 3-5 second animation before any content. Viewers have no reason yet to commit to the channel's branding. 3. **Meta-commentary.** "In this video we are going to talk about..." passive, vague, and delays the payoff. 4. **Slow context build.** More than 10 seconds of setup before any payoff claim. The viewer leaves during the setup. 5. **Apology or disclaimer.** "Sorry about the audio quality" or "I am not an expert but." Undermines the claim to attention. 6. **Engagement ask before value.** "Like and subscribe" in the first 30 seconds is asking for commitment before earning it. 7. **Clichéd openers.** "Have you ever wondered..." or "Picture this." Readers hear them as noise. Each of these burns attention budget that the hook needs. Removing them gives the hook the attention budget it needs. ## How to test your opening before recording Five tests. Run them on your script before you record. Any one failing is a signal to rewrite. **The payoff-at-15 test (a planning default).** Read only the first 15 seconds of the script. Does a specific value claim land? If not, rewrite until one does. **The stranger test.** Hand the first 30 seconds to someone who has never seen your channel. Ask: what will this video give you if you keep watching? If they cannot answer concretely, rewrite. **The specificity test.** Count the number of specific claims (numbers, names, concrete examples) in the first 30 seconds. Below three is a weak hook. Four or more is strong. **The transcript test.** Read the opening without any visuals. Does it still work? Strong openings work as text alone. Openings that depend on b-roll or music to carry them are brittle. **The alternative test.** Write two alternative openings using different hook types. Compare all three. If your original is not clearly the strongest, use the alternative. To run these tests programmatically, paste the script into [Prepublish](/upload). The analyzer scores hook strength, flags which of the 7 killers are present, and generates alternative openings tuned to the niche. If you only want the opening line checked, the [free hook analyzer](/tools/youtube-hook-analyzer) scores your first sentences and suggests rewrites, no login needed. ## The script-level fixes that move the curve most Five script-level changes to the first 30 seconds that remove the most common first-minute hold risks: 1. **Move the payoff claim forward.** If the payoff is at second 25, move it to second 8-12. 2. **Replace the generic greeting with the payoff claim.** Delete "Hey guys" entirely and start with the strongest sentence in the opening. 3. **Add a single specific number to the first 15 seconds.** Numbers carry more credibility than descriptive language. 4. **Cut the disclaimer.** Apologies and qualifications in the opening remove authority. 5. **Plant the first information gap by second 20.** The unresolved question is what commits the viewer to the body. These five together give the first minute far more room to work. The effect carries through the rest of the video because viewers who stay past the 30-second mark have a much lower drop-off rate through the body. For the structural side of the rest of the video beyond the opening, see our [Script Structure Guide](/guides/script-structure-guide). ## FAQ Q: Why do viewers drop off in the first 30 seconds? A: Because the viewer decides early whether the video will deliver on the title's promise. Openings lose attention fastest when they share the same patterns: a generic greeting, a logo bumper, meta-commentary, or a slow setup that delays the payoff claim past the early decision point. Q: Why are the first 30 seconds so important on YouTube? A: The steepest single drop in audience retention happens in the first 30 seconds of nearly every YouTube video. YouTube tests every new video on a small audience; high early retention triggers wider distribution, low retention stops the test. The 30-second window is the gate that determines whether the rest of the video is seen at scale. Q: What is the 15-second cliff in YouTube retention? A: Treat the 15-second mark as a planning default for a YouTube hook, not a measurement. A script that delays its specific value claim past that point gives the viewer a long stretch with no stated reason to stay, and that is where a stay-or-leave decision usually gets made. Check the shape of your own retention graphs in YouTube Studio to see where your audience makes it. Q: How do I structure the first 30 seconds of a YouTube video? A: Three phases. Seconds 0-5: pattern interrupt (bold claim, unexpected visual, provocative question). Seconds 5-15: payoff promise (specific, concrete value the viewer gets by staying). Seconds 15-30: commitment hook (information gap, proof, story opening, or start of the demonstration). By second 30 the viewer should know what they will get and want to see it delivered. Q: What kills retention in the first 30 seconds? A: Seven patterns consistently fail: generic greeting, logo or channel bumper, meta-commentary, slow context build, apology or disclaimer, engagement ask before value, and clichéd openers. Removing these frees the opening seconds for content that earns the next minute. Q: How do hook patterns differ by niche? A: Gaming and tech use proof and pattern interrupt. Finance uses proof and contrarian. Education uses tutorial and question. Vlogs use story cold open. Commentary uses contrarian and curiosity gap. Shorts use visual pattern interrupt in the first second. Software tutorials combine proof and tutorial (show the finished build, then teach the process). Q: How do I test my first 30 seconds before publishing? A: Five tests. Payoff-at-15: does a specific value claim land by second 15? Stranger: can someone with no context answer "what do I get by watching?" Specificity: are there at least 3 specific claims in the opening? Transcript: does it work as text alone, without visuals? Alternative: compare your opening to two alternatives using different hook types. Q: Does YouTube publish an official rule about the first 30 seconds? A: Not one that this page cites. We do not quote or paraphrase an official YouTube page here, so treat everything above as Prepublish guidance for writing an opening. YouTube's own analytics documentation is about reading audience retention in Studio, not about a fixed second marker where viewers are expected to leave. Q: What is a good audience retention rate in the first 30 seconds? A: We do not publish a benchmark for the 30-second mark, and we recommend against aiming at one. Open your own retention graph in YouTube Studio, compare the opening of your last few videos, and look at the shape of the first minute rather than a single percentage. A curve that flattens quickly after the first drop is doing better than one that keeps sliding. Q: Is there a 15-second rule for YouTube hooks? A: Not as a published rule. Prepublish treats 15 seconds as a working default: land a specific payoff claim by then, because that is the stretch where a viewer is deciding whether the video matches its title. It is a scripting convention on this site, not a YouTube requirement, and your own viewers decide whether it is long enough. --- # What Is YouTube Script Analysis? URL: https://prepublish.ai/guides/what-is-youtube-script-analysis Updated: 2026-10-01 TL;DR: YouTube script analysis is the process of evaluating a video script before recording to map attention risk before recording. Modern AI tools can score your hook, flag pacing issues, map attention risk, and generate copy-paste improvements, letting creators fix problems before they spend hours filming and editing. ## What YouTube Script Analysis Actually Is (And What It Isn't) YouTube script analysis is the practice of evaluating a video script before you record it, to map where the draft carries attention risk and fix that while it is still text. This page is the definition and the method: what the practice measures, what a tool can and cannot see from a script alone, and how it differs from a grammar checker or an SEO suite. Nothing here forecasts your retention numbers; those come from YouTube Studio after publishing. At its simplest, script analysis asks one question of every section: does this part give the viewer a reason to keep watching? Traditional script analysis meant reading your script out loud, getting feedback from a friend, or paying a consultant $200/hour. These approaches are slow, subjective, and expensive. Modern AI-powered script analysis tools can evaluate your script in seconds, providing specific, data-driven feedback on what works, what doesn't, and exactly how to fix it. This page defines the practice. If you are choosing between products rather than learning the concept, the [script analyzer comparison](/guides/best-youtube-script-analyzer) is the page to read instead: it compares every tool that audits a finished draft, including ours, with current prices. Here's what a typical AI script analysis evaluates: **Hook strength.** The first 15-30 seconds of any YouTube video determine whether a viewer stays or clicks away. Script analysis scores your opening and tells you whether it creates enough curiosity, urgency, or value to hold attention. It goes beyond "your hook is weak" and tells you why. Maybe your hook relies on a generic question ("Have you ever wondered...?") when a specific claim would work better. Maybe you're spending 22 seconds of context-setting before the actual hook lands. The score isolates the problem. For more on crafting effective openings, see our [hook examples guide](/guides/youtube-hook-examples). **Attention-risk map.** From the structure and wording of the draft alone, AI tools generate a script-hold risk map: a graph of how well each section holds attention on the page, relative to the rest of the same draft. It is not a measurement of published retention. This is the single most valuable output. You can see a risk cliff at the 3-minute mark of your 10-minute video and trace it back to the exact paragraph in your script that produced it. That paragraph is where your pacing stalls, where you repeat a point you already made, or where you transition with "Also..." instead of "But here's the problem..." Learn more about what retention means in our [retention guide](/guides/youtube-retention-guide). **Pacing and structure.** A great script starts strong and then maintains momentum. Analysis identifies sections where energy drops, where the script becomes too dense, or where transitions feel abrupt. Specifically, it measures information density per paragraph. If your script has a 400-word section with six distinct concepts and no breathing room, that's a pacing flag. If you have three consecutive paragraphs that all make variations of the same argument, that's a different pacing flag: repetition disguised as development. Our [script structure guide](/guides/script-structure-guide) covers how to build momentum throughout your video. **Copy-paste improvements.** The most practical output of script analysis is rewritten sections. Not vague advice like "make your hook more engaging" but actual alternative lines you can drop directly into your script. Here's the difference: Generic feedback: "Your transition between the second and third sections is weak." Script analysis output: "Replace 'Moving on to the next tip...' with 'But this only works if you avoid the mistake I'm about to show you, and almost everyone makes it.'" The second version is something you can paste directly into your script and keep writing. That's the difference between advice and a tool. **Title and thumbnail alignment.** Your title makes a promise. Your script needs to deliver on that promise quickly. Analysis checks whether the script fulfills the expectations set by the title. If your title is "The Camera Setting That Changed My Videos" but your script doesn't mention a camera setting until minute three, you have a title-script mismatch that will cause early drop-offs. Viewers clicked expecting an immediate payoff. The script needs to deliver. What YouTube script analysis is NOT: It's not grammar checking. Conversational scripts that break grammar rules intentionally ("And look. This matters. A lot.") often score higher than grammatically perfect ones because they mirror natural speech patterns. It's not SEO keyword stuffing. Script analysis doesn't care whether you mention your target keyword twelve times. It cares whether your script holds attention. It's not general writing feedback. An English professor would hate most high-retention YouTube scripts. They're fragmented, conversational, and repetitive by design. Script analysis evaluates for retention, not literary merit. It's not a creativity replacement. Analysis can't generate your ideas, your expertise, or your perspective. It optimizes the structure that delivers those things to viewers. ## The Economics of Why This Matters Let's do the math that most creators never do. A typical YouTube video takes 10-40 hours to produce. Let's use 20 hours as a midpoint: 3 hours scripting, 4 hours filming, 8 hours editing, 2 hours on thumbnail and metadata, 3 hours on revisions and upload. At even a modest $25/hour opportunity cost, that's $500 of your time per video. Now imagine two scenarios: **Scenario A (illustrative):** You publish the video. It earns a normal number of impressions, but weak average retention. The algorithm reads that as "viewers aren't interested" and stops pushing it. Final view count: 8,000. You earned maybe $16-40 in ad revenue. **Scenario B (illustrative):** Before recording, you spend 10 minutes analyzing the script. You discover your hook doesn't land until second 25 (too late), your third section runs far longer than it needs to, and your transitions are all additive ("Another tip...") instead of adversative ("But here's the problem..."). You fix these issues; it takes 30 minutes. You record the same video from the stronger draft. The impressions are the same; what changes is what happens after the click. Both scenarios are hypothetical, and no tool can promise the second one: delivery, editing, topic, packaging, and distribution all sit outside the script. What the 40 minutes buys is the chance to fix a structural problem while it is still cheap, instead of discovering it in Studio three days after publishing. The YouTube algorithm has evolved far beyond simple view counts. Today, **audience retention is the primary signal** the algorithm uses to decide which videos to recommend. This isn't speculation: YouTube's own Creator Academy materials confirm it, and every creator who's tested it empirically sees the same pattern. Between two videos with similar reach, the one that holds its audience is the one the recommendation system has a reason to keep showing. This creates a brutal reality: **you can't outspend a retention problem.** Promoting a low-retention video through ads or social media just means more people click away quickly, which actually trains the algorithm to suppress your content further. You're paying to make the algorithm think your content is bad. Script analysis addresses this at the root. The script is the structural foundation. Everything else (filming, editing, thumbnails) is decoration on top of that foundation. If the foundation has cracks (weak hook, poor pacing, no re-engagement moments), no amount of decoration saves it. [Try Prepublish](/upload) to see how script analysis works in practice. ## How AI Script Analysis Works Under the Hood Modern AI script analysis combines natural language processing, pattern recognition from high-performing videos, and retention modeling. Here's what actually happens when you paste a script into an analyzer: **Step 1: Script segmentation.** The system parses your text into functional segments: hook (first 15 seconds of spoken word), introduction, body sections, transitions between sections, and conclusion/CTA. It identifies these not by word count but by semantic markers: shifts in topic, tone changes, transitional language. Your "hook" isn't the first 50 words; it's the first complete thought unit that either grabs or loses a viewer. **Step 2: Hook analysis.** The hook gets the deepest analysis because it's the highest-leverage section. The system evaluates several specific properties: - *Specificity score:* "In this video, I'll show you how to grow on YouTube" scores low. "I've posted 400 videos and only 3 of them got over 100K views. They all had this one thing in common" scores high. Specific claims with numbers, personal stakes, or unexpected juxtapositions trigger curiosity more reliably than broad promises. - *Time-to-value:* How many seconds of spoken word before the viewer receives either a useful fact, a surprising claim, or a clear reason to keep watching? Under 10 seconds is excellent. 10-15 is good. 15-25 is acceptable. Over 25 is a problem. The system measures this by identifying the first sentence that contains substantive content versus setup/greeting/context. For more on optimizing this window, check out our guide on [the first 30 seconds](/guides/first-30-seconds). - *Curiosity gap:* Does the hook create an open question in the viewer's mind that can only be answered by continuing to watch? The best hooks create specific curiosity ("What was the one thing those 3 videos had in common?") rather than vague curiosity ("Want to grow your channel?"). See our [hook examples guide](/guides/youtube-hook-examples) for patterns that work. **Step 3: Structural analysis.** The AI evaluates your script's architecture against patterns from high-retention videos in your content category. It checks for: - *Re-engagement distribution:* Are there moments throughout the script that re-hook the viewer? The best scripts have these at roughly 25%, 50%, and 75% through the content. The system identifies them by looking for stakes escalation ("But this is where it gets dangerous"), open loops ("I'll explain why in a moment"), or perspective shifts ("Now let's look at this from the viewer's side"). - *Information density curve:* The system measures how many new concepts per paragraph appear throughout the script. High-retention scripts typically front-load moderately (not too dense, not too sparse), then alternate between dense information sections and breathing room. Low-retention scripts are either uniformly dense (lecture-style) or uniformly sparse (nothing-happens-for-two-minutes style). - *Payoff delivery:* Does the script deliver on the promise made in the hook? The system checks for semantic alignment between what the hook promises and what the body delivers. If the hook creates curiosity about "the one thing," the system verifies that "the one thing" is explicitly addressed and that it appears early enough to satisfy the curiosity before the viewer gives up. **Step 4: Pacing evaluation.** Using linguistic analysis, the system measures three pacing factors: - *Sentence rhythm:* The variance in sentence length across sections. High-retention scripts have high variance (mixing 5-word punches with 25-word explanations). Low-retention scripts have low variance (all sentences are roughly the same length, creating a monotonous cadence when spoken). - *Transition energy:* The words used at section boundaries. "But," "However," and "The problem is" maintain or increase energy. "Also," "Additionally," and "Another thing" decrease energy. The system flags every transition and rates its energy contribution. - *Paragraph momentum:* Whether each paragraph ends on a forward-leaning note (creating anticipation for the next paragraph) or a flat note (allowing the viewer a natural exit point). The sentence "That's how exposure compensation works." is a flat ending. "That's how exposure compensation works, but most people set it wrong without realizing it." is forward-leaning. **Step 5: Attention-risk mapping.** Based on all the above signals, plus patterns learned from reading the structure, pacing, and wording of the draft, the AI generates a script-hold risk map. This curve is a relative index of how well each section holds attention on the page, not a measurement of how many viewers will still be watching at each point in the video. The curve is not a guarantee. Delivery quality, visual production, topic relevance, and thumbnail click-through rate all affect actual retention in ways a script analysis can't predict. But the curve reliably identifies the structural weak points: the places where your script is working against you. Fixing those weak points removes script-level hold risk; published retention still depends on delivery, editing, and packaging, even when other factors vary. **Step 6: Improvement generation and scoring.** For every flagged issue, the system generates a concrete alternative. Not "improve this section" but an actual rewritten version you can copy and paste. It also assigns an overall score and component scores (hook, structure, pacing, engagement) so you can benchmark yourself and track improvement across videos. ## What Script Analysis Can and Cannot Do: Specific Boundaries **What it can do with high reliability:** - Identify hooks that take too long to deliver value (time-to-value measurement is very accurate) - Detect missing re-engagement moments in the middle sections of a script - Flag pacing drops caused by information overload, repetition, or monotonous sentence structure - Generate alternative transitions that maintain forward momentum - Map relative hold risk across the draft (where attention-risk peaks occur, even if the exact percentages vary) - Score your script's structure against category-specific benchmarks - Identify title-script misalignment before it costs you viewers **What it can do with moderate reliability:** - Estimate a relative script-hold index (not a viewer percentage) - Evaluate humor, sarcasm, or personality-driven content (these are harder to model because delivery matters enormously) - Assess the quality of individual arguments or explanations (it can tell if a section is too dense, but not whether your explanation of a concept is actually correct or compelling) **What it cannot do:** - Evaluate your on-camera delivery, energy, or charisma - Account for b-roll, graphics, text overlays, or visual pacing (these can save a weak script section or ruin a strong one) - Predict viral potential or trending topic relevance - Replace genuine expertise on your topic - Make a boring topic interesting (it can optimize how you present a topic, but if nobody cares about the topic, structure won't save it) - Predict audience-specific preferences (a script that works for a tech audience may not work for a gaming audience, and vice versa, though category-specific models are improving this) The best mental model: script analysis is like a structural engineer reviewing building blueprints. The engineer can tell you if the foundation is solid, if load-bearing walls are in the right places, and if the structure will hold. The engineer can't tell you if the interior design is attractive or if people will want to live there. Both matter, but structural problems are more catastrophic and harder to fix after construction starts. ## Who Benefits Most (With Specific Examples) **New creators (0-1K subscribers)** get the fastest learning acceleration. Here's a concrete example: A new tech review channel posts their first 10 videos. Without script analysis, they might discover after video 8 that their hooks consistently run 35-45 seconds before delivering value, which is too long. That's 8 videos (probably 160+ hours of work) before they identify a pattern they could have caught on video 1. With script analysis, video 1's hook gets flagged immediately. They fix it. Videos 2-10 all have stronger hooks. By video 10, they've built a habit that would have taken 50 videos to develop through trial and error alone. **Growing channels (1K-100K)** benefit from consistency enforcement. At this stage you can write a good script; the danger is that you don't write one every time. Maybe video #47 is brilliant, but video #48 was rushed because you were traveling, and your hook is lazy and your pacing drifts. Analysis catches the #48s: the videos where your standards slipped. An underperforming video loses views on that video and also reduces your channel's average retention, which affects how the algorithm treats all your videos. **Established creators (100K+)** see the biggest absolute gains from small percentage improvements. A retention gain is more than extra watch time; it changes how much reason the recommendation system has to keep showing the video, which is why small structural improvements can compound into your Suggested video placement. At this scale, small differences in retention are amplified by the size of the audience the recommendation system can reach. A 10-minute script analysis that catches one pacing issue in your third section is potentially worth thousands of dollars in ad revenue. **Content teams and agencies** use analysis as a quality gate. When a team of 3-5 writers produces scripts for a single channel, voice and quality consistency becomes the biggest challenge. Analysis provides an objective baseline: every script must score above 70 overall, above 75 on hook, before it goes to production. This replaces the bottleneck of having the lead creator review every script personally. No matter what stage you're at, you can [try Prepublish](/upload) to see your first script analysis in under 30 seconds. ## The Effective Workflow (Step by Step) Here's the exact workflow that produces the best results, based on patterns from creators who use script analysis consistently: **1. Write your full first draft without analyzing.** Get your ideas down in your natural voice. Don't think about scores, hooks, or pacing. Just write. Trying to optimize while writing produces stilted, unnatural content that scores well structurally but sounds robotic when performed. **2. Analyze the complete draft.** Paste the full script. Read the overall score, but don't fixate on it. Go straight to the script-hold risk map. Find the dips. Each dip corresponds to a section of your script flagged as highest risk. **3. Fix the hook first.** If your hook score is below 70, fix it before touching anything else. Read the suggested alternative hook. You don't have to use it verbatim; often it's better to take the structural idea (e.g., "lead with a specific claim instead of a question") and rewrite it in your own voice using that structure. Our [hook examples guide](/guides/youtube-hook-examples) has patterns you can adapt. **4. Address the two deepest retention dips.** Don't try to fix everything. Find the two highest-risk passages on the attention-risk map and trace them to the corresponding paragraphs. Common fixes: - If the dip is at a transition, replace an additive transition with an adversative one - If the dip is in the middle of a section, the section is probably too dense: split it or add a breathing moment - If the dip is after a section that ends on a flat note, add a forward-leaning sentence that creates anticipation for what's next **5. Re-analyze.** Paste the revised script. Confirm the dips are shallower. Check that your fixes didn't create new problems (e.g., a new hook that doesn't connect to the introduction). **6. Read aloud once.** This catches things analysis can't: awkward phrasing, tongue-twisters, unnatural rhythm. If you stumble while reading, your audience will stumble while watching. **7. Record.** Your script is now structurally optimized and naturally voiced. The combination of analysis-driven structure and voice-driven rewriting produces the best results. Total time added to your workflow: 20-40 minutes. Time saved by not re-filming or re-editing a video with structural problems: 5-15 hours. Time saved by not publishing a video that underperforms and needs a follow-up or replacement: 20+ hours. ## The Future of Script Analysis Script analysis is evolving fast. Here's what's coming and why it matters: **Multi-modal analysis.** Current tools analyze text. Next-generation tools will analyze your vocal delivery (via audio upload), your visual plan (via storyboard or shot list), and your thumbnail-title-script alignment simultaneously. This matters because a script section that reads flat on paper might work brilliantly when delivered with high energy and dynamic visuals, or vice versa. Multi-modal analysis will reduce false positives (flagging sections that actually work due to delivery) and false negatives (missing sections that read fine but will fail when performed monotonously). **Audience-specific models.** A gaming audience has fundamentally different retention patterns than a finance audience. Gaming viewers tolerate longer hooks if they're entertaining; finance viewers want information density immediately. Current tools use broad patterns across categories. Future tools will learn what works for your specific audience by incorporating your channel's historical retention data. **Real-time writing assistance.** Rather than write-then-analyze, future tools will provide suggestions as you write, similar to how GitHub Copilot works for code. You'll type a transition sentence and see a real-time indicator of whether that transition is likely to hold or lose viewers, with an alternative suggested inline. **A/B script testing.** Tools will let you input two versions of the same section and compare script-hold index values between versions. This enables data-driven creative decisions at the sentence level: instead of asking "is this section good?" you can ask "which of these two good versions is better?" The direction is clear: script analysis is becoming an essential part of the professional YouTube workflow, as fundamental as editing software and thumbnail design tools. The creators who adopt it now will compound their advantage. [Try Prepublish](/upload) to start analyzing your scripts today. ## FAQ Q: What is YouTube script analysis? A: YouTube script analysis is the process of evaluating a video script before recording to map attention risk and identify problems. AI-powered tools score your hook, flag pacing issues, generate a script-hold risk map, and provide copy-paste improvements so you can fix issues when they're still words on a page, before you've invested hours in filming and editing. Q: How accurate is AI script analysis? A: AI script analysis reliably identifies structural patterns that correlate with retention: weak hooks, pacing drops, missing re-engagement moments, poor transitions. It maps relative hold risk (where attention-risk peaks occur). Treat the shape as directional, not a viewer forecast. Exact retention percentages are less precise because delivery quality, visuals, and topic relevance also play major roles. Think of it as catching the structural problems that are visible on the page. Q: Do I need to fully script my videos for analysis to work? A: Script analysis works best with fully scripted content (tutorials, essays, reviews, educational videos, storytelling). If you work from bullet points or outlines, analysis can still evaluate your hook and planned segments, but can't predict improvised sections. The more detailed your script, the more useful the analysis. Q: Is script analysis only for big channels? A: No. It's arguably more valuable for small channels. A channel with 500 videos has enough retention data to identify patterns intuitively. A channel with 10 videos doesn't. Analysis provides the pattern recognition that would otherwise take years of publishing to develop. Q: How is this different from having someone review my script? A: Human reviewers bring creative instincts and voice-matching that AI can't replicate. AI brings speed (seconds vs. hours), consistency (it doesn't have off days), data-driven pattern recognition across thousands of videos, and concrete rewritten text rather than abstract feedback. The ideal workflow: AI analysis for structural optimization, then human review for creative and voice alignment. Q: How long does script analysis add to my workflow? A: The full analyze-fix-reanalyze workflow takes 20-40 minutes. This is offset by 5-15 hours saved per video by not re-filming or dealing with structural problems that were baked into the script. After doing it 5-10 times, the analysis phase drops to 10-15 minutes because you start internalizing the patterns. Q: What is a YouTube script analyzer? A: A script analyzer is the tool that performs script analysis: it reads a draft you have already written and reports where the risk sits, usually in the opening, the pacing, the structure, and the match between the title and the payoff, then rewrites the weakest passage. This page explains the practice; the comparison of available tools lives on its own page. Q: Does script analysis predict my retention? A: No. It reads the draft, not the audience, so it can point at passages where the writing gives a viewer no reason to continue. Delivery, editing, packaging, and topic demand all sit outside a text check, which is why the output is described as a risk read on the script rather than a forecast of published retention. Q: Can I check my own script without a tool? A: Yes, with a short checklist: read the opening aloud and ask what a stranger gets by staying, estimate the runtime from your own measured pace, mark every place the script actually delivers value, compare the title with the final payoff, and cut any paragraph the core argument does not need. A tool helps because it applies the same rubric every time and points at specific lines, but the checklist is what improves with practice. --- # YouTube Pre-Publish Checklist (2026) URL: https://prepublish.ai/guides/youtube-pre-publish-checklist Updated: 2026-09-21 TL;DR: A 27-step checklist covering script validation through upload optimization, organized by production phase. The steps and their pass conditions start immediately below, with the script phase first. The step most creators skip is checking the script for structural problems before recording. Where a step carries a threshold, the threshold is measured and cited, or it is left out. ## The 27 steps at a glance Twenty-seven numbered steps, plus one check before you start. Each row states what passing looks like. Where a threshold is measured, the source is linked; where no published threshold exists, the row states the check instead of inventing a number. | # | Step | Pass condition | | --- | --- | --- | | 0 | Check the topic against your comments | Viewers are asking for this topic, or you can name the gap it fills | | 1 | Run a script analysis | The overall score sits in the strong band and the hook is not the weakest section (bands: 80+ strong, 60-79 good, 40-59 needs work, below 40 weak; `prepublish-fe/lib/score-bands.ts`) | | 2 | Validate the hook | The first sentence carries the claim: no greeting, no channel business, no preamble | | 3 | Check title-script alignment | The script starts delivering the title's promise inside the opening, before any credentials or setup | | 4 | Audit transitions | Most section joins move forward rather than announcing another item | | 5 | Place re-engagement beats | Every long stretch of the body has a fresh reason to keep watching near its midpoint | | 6 | Verify the payoff | The ending answers the hook and adds one thing the viewer could not predict | | 7 | Time the script | The draft lands inside the buffer the published planning table uses (15 percent) | | 8 | Record the hook first | You would keep watching your own opening with no context | | 9 | Check audio before the full take | Speech is clean through earbuds: no room echo, no hum, no plosives | | 10 | Plan energy and break points | The last section is delivered with at least the energy of the first | | 11 | Film pattern interrupts | You have footage for a visual change in every stretch of the finished video | | 12 | Watch the raw footage at normal speed | You can name the moments your own attention drifted | | 13 | Tighten the opening in the edit | No filler words, no dead air, no restatement of the hook | | 14 | Audit visual variety | No single visual runs long enough to stop registering as a shot | | 15 | Check audio consistency | Volume matches across sections and music sits under the voice | | 16 | Build the end screen window | The last 5 to 20 seconds are clear for end screen elements ([YouTube Help](https://support.google.com/youtube/answer/6388789)) | | 17 | Write the title last | A stranger would click it, and the finished video delivers it | | 18 | Check thumbnail-title complementarity | Each makes sense alone; together they say more than either one does | | 19 | Front-load the description | The lines viewers see give a reason to watch, not a table of contents | | 20 | Tag the video | Every tag is a phrase someone would search for | | 21 | Set category and language | Both match the video's content and its spoken language | | 22 | Schedule ahead of the audience window | The video is processed and available before your audience's peak, not during it | | 23 | Prime with a community post | The post earns replies before the video goes live | | 24 | Pin a first comment | The question is answerable in a few words | | 25 | Place cards and end screen elements | Cards sit away from the opening and away from your strongest sections | | 26 | Check captions | Auto-captions are corrected for names and terms | | 27 | Run the phone test | The opening holds up on a phone screen in a lit room | Each phase below explains how to run its steps and what to listen or look for. ## Phase 1: Script (Before You Record) This is the highest-leverage phase. A problem caught here costs minutes to fix. The same problem caught after filming costs a reshoot, or ships in a video that underperforms. **Step 0: Check the topic against your comments.** Before you check how the script is written, check whether anyone asked for it. The [Comment Miner](/tools/youtube-comment-miner) groups your public comments into the requests and questions viewers keep raising. A well-written script on a topic nobody asked about is the most expensive kind of mistake to catch late. **Step 1: Run a script analysis.** Paste the complete draft into a script analyzer such as [Prepublish](/upload). Read the overall score first, then check whether the hook is your strongest section rather than your weakest. The bands are published in the product: 80 and above is strong, 60 to 79 is good, 40 to 59 needs work, and below 40 is weak (`prepublish-fe/lib/score-bands.ts`). Then read the script-hold map for sections that stand out against the rest of the same draft. Treat that map as a comparison between drafts of one script, not as a claim about published viewers. If the draft sits in the needs-work band, rewrite before you film. This step has a deeper version. The [check your YouTube script before recording](/guides/check-youtube-script-before-recording) guide runs the same check as five separate tests with the evidence behind each. Use that guide when one draft needs diagnosis. Use this checklist when you want the pass that covers the whole production. **Step 2: Validate the hook.** Read your opening aloud. The check is not a stopwatch, it is a question: does the first sentence carry the claim? Our [349-video hook study](/blog/youtube-hook-study) found the timing of the first concrete reason to keep watching was nearly identical between hits and flops (median word 14 against word 15), so early delivery on its own separates nothing. What did separate them was whether the opening engaged the title's promise: 87 percent of overperformer openings against 78 percent of flops. Fail indicators: - Your first sentence is a greeting ("Hey guys, welcome back to the channel") - The opening is context-setting ("So I have been thinking a lot about this topic lately and I wanted to share my thoughts") - The opening explains what the video is about instead of why it matters ("In this video, I am going to walk you through five tips for...") Pass indicators: - You open with a specific, unexpected claim ("I have posted 400 videos. Only 3 broke 100K views. They all had one thing in common.") - You open with a result or transformation ("This one camera setting took my videos from 200 views to 20,000.") - You open by demonstrating the problem the video solves ("Watch this clip. See how the viewer drops off at exactly 47 seconds? That is not random. There is a specific reason.") For more hook patterns and examples, see our [hook examples guide](/guides/youtube-hook-examples) and [first 30 seconds guide](/guides/first-30-seconds). **Step 3: Check title-script alignment.** Read your title. Then read your opening. Does the script begin delivering the title's promise before any credentials, context or setup? If your title is "5 Camera Settings Most Beginners Get Wrong," your first setting must appear straight away, not after a preamble about why camera settings matter. If your title is "I Tried X for 30 Days: Here's What Happened," the results, or at least the first surprising result, must appear in the opening. The 30-day story setup comes after. The benchmark: **a viewer who clicked because of your title should still be confident the video will deliver by the end of the opening.** If the viewer would be wondering "when does this actually start?", the script fails this step. The [349-video hook study](/blog/youtube-hook-study) measured this signal inside the first 45 seconds of the opening, which is the window to check. **Step 4: Audit your transitions.** Read through every point where your script moves from one section to the next. For each transition, check: does it create forward momentum (adversative) or signal more of the same (additive)? Forward momentum transitions (use these): - "But here's where it gets interesting..." - "The problem is, most people do this wrong..." - "Now, you might think [X], but actually..." - "This works great, until you try it with [Y]..." Flat or backward transitions (replace these): - "Moving on to the next point..." - "Another thing you should know..." - "Also..." - "On top of that..." - "The next tip is..." Benchmark: **most of your transitions should be adversative or forward-leaning.** A run of additive transitions makes the middle feel like a list instead of an argument. Our [script structure guide](/guides/script-structure-guide) goes deeper on transitions and pacing. **Step 5: Check re-engagement placement.** Mark the middle of each long stretch of your script. Each one should contain a deliberate re-engagement moment: a sentence or short paragraph that re-hooks the viewer. Three types work: - *Stakes escalation:* "But this next part is the one that actually costs people money." (Raises the stakes of what's coming) - *Open loop:* "I'll show you the exact settings in a minute, but first you need to understand why they work." (Creates a question the viewer needs to stay to answer) - *Unexpected pivot:* "Now, everything I just said? It's wrong for one specific situation." (Subverts expectations and re-engages curiosity) Benchmark: **no long stretch of the body should pass without one of these.** A section that runs on without a fresh reason to keep watching is where the middle of the video loses people. **Step 6: Verify the payoff.** Read your script's closing section. Does it: - Actually deliver the conclusion or answer promised by the hook? (Not a summary of what was covered, but the actual payoff) - Include one unexpected piece of value (a bonus tip, a reframe, a "one more thing") that rewards viewers who stayed to the end? - End on a forward-leaning note that makes the viewer want to watch another video? Benchmark: **the closing section should contain at least one piece of information that is not predictable from the rest of the video.** If a viewer could stop early and have everything, the ending is too weak. **Step 7: Time your script.** Read your full script aloud at your natural speaking pace and time it. Across 349 measured videos, the middle half of creators spoke between 160 and 201 words per minute, with a median of 181 (`prepublish-fe/lib/seo/wpm-data.ts`, and the same figures appear on [words to minutes](/tools/words-to-minutes)). Where a number comes from a study it is linked, and the rest is a working convention. For what finished videos hold, the corpus median for a 12-minute video is 2,208 words, with the middle half between 1,920 and 2,436 ([word count targets](/blog/youtube-script-length-word-count), [the statistics page](/research/youtube-script-statistics)). Compare the estimate to your target. If the draft runs well over, cut now instead of planning to "edit it tight." If it runs well under, a section is missing or thin. Benchmark: **the script's estimated spoken length should land inside the 15 percent buffer the planning table uses.** Outside that range, restructure before recording. ## Phase 2: Filming **Step 8: Record your hook first and play it back.** Film your opening. Stop. Play it back on your phone, not your camera's viewfinder, because your phone simulates how viewers will actually watch. Ask yourself: "If I saw this in my feed with no context, would I keep watching?" If the answer is not an immediate, honest yes, film it again. The opening deserves more takes than anything else in the video. Benchmark: **your hook take should make you want to keep watching even though you already know what the video contains.** If you are bored by your own opening, your audience will be gone. **Step 9: Check audio before full recording (the earbuds test).** Record a short take of yourself speaking in your filming setup. Play it back through wired earbuds, not speakers, because earbuds reveal problems speakers hide. Listen for: - Room echo or reverb (sounds hollow or distant) - Background noise (AC hum, traffic, computer fans) - Mic pops on P and B sounds - Volume: your voice should be clearly audible at a normal listening level - Sibilance: harsh S sounds that cut through Benchmark: **your audio should sound clean enough that a viewer could listen to the video as a podcast without being distracted by audio quality.** If it does not pass that test, fix your recording setup before proceeding. **Step 10: Plan your energy management.** If your recording session will be a long one, plan specific break points. Energy falls during sustained recording. Viewers can feel low energy even when the script words are perfect; it shows up as flat delivery, slower pace, and less vocal variety. Mark break points in your script where you will stop, stand up, walk around, then resume. These should align with major section transitions. Benchmark: **the energy level in your final section should be at least as high as your opening.** If your endings consistently feel flat, energy management during filming is the fix. **Step 11: Film pattern interrupts.** If your script calls for demonstrations, screen recordings, location changes, or physical props, make a shot list and check each one off during filming. It is extremely easy to default to talking head for the entire video when you are in the flow. Visual variety is not optional for retention. Viewers need a visual change often enough that the edit has something to cut to. Our [pattern interrupt cadence model](/guides/youtube-pattern-interrupts) puts the sweet spot at one interrupt every 60 to 75 seconds, tightening through the first minute. Benchmark: **for every stretch of finished video, you should have at least one alternative shot or visual element available.** If you only have talking head footage, your editing options are limited to jump cuts and zooms, which work for some formats but get monotonous quickly. ## Phase 3: Editing **Step 12: Watch at normal speed (the drift test).** Before making a single edit, watch your raw footage at normal speed from start to finish. Not faster. Not skipping around. Every moment where your attention drifts (where you reach for your phone, where you think about something else, where you want to skip ahead), mark that timestamp. Those drift points are where your audience will leave. They are the most important data points in your entire editing process. Benchmark: **if your own attention drifts repeatedly through the raw footage, you have structural problems that editing alone cannot fix.** You may need to restructure sections or cut entire segments. **Step 13: Tighten the opening with aggressive editing.** Your opening should be the most aggressively edited section of your entire video. Cut every unnecessary word, pause, breath, filler, and hesitation. Remove: - "So, basically..." - "Um" and "uh" - Throat clearing - Any sentence that restates the hook in a weaker way - Any context that the viewer does not need yet The pacing of your opening sets the viewer's expectation for the rest of the video. If the opening feels fast and tight, viewers will be patient during slightly slower sections later. If the opening feels slow, viewers will assume the whole video is slow. Benchmark: **your opening should contain no dead air and no filler words.** Use jump cuts aggressively here even if you use them sparingly elsewhere. For a deep dive on optimizing your opening, see our [first 30 seconds guide](/guides/first-30-seconds). **Step 14: Visual variety audit (the timeline scrub).** Scrub through your editing timeline and look at the visual track, not the audio. Note the stretch between distinct visual changes (different shot, b-roll, text overlay, zoom, screen recording, and so on). Benchmark: **no single visual should persist long enough to stop registering as a shot.** Even a subtle zoom on the same talking head shot counts as a change; it is enough to re-engage the viewer's visual attention. The cadence numbers we publish live in the [pattern interrupt guide](/guides/youtube-pattern-interrupts), where the sweet spot is one interrupt every 60 to 75 seconds. **Step 15: Audio consistency check.** Play through the full video and listen specifically for: - Volume jumps between sections, especially if you recorded on different days or in different locations - Background noise changes (fans, outdoor sounds appearing and disappearing between cuts) - Music volume relative to voice (music should sit under the voice, never over it) - Overall loudness consistency from the first section to the last Benchmark: **a viewer should not need to adjust their volume at any point during your video.** If they do, your audio is inconsistent. **Step 16: End screen window.** YouTube places end screens in the last 5 to 20 seconds of a video, and the video has to be at least 25 seconds long to have one ([YouTube Help](https://support.google.com/youtube/answer/6388789)). Verify: - Your video has a clean outro section that accommodates end screen elements - No important visuals or text appear in the areas where end screen cards will overlay (the right side and center of the frame) - Your verbal CTA ("check out this video next") aligns with when the end screen appears - The end screen elements run for most of the window rather than a few seconds of it Benchmark: **end screen elements should appear while you are still delivering value or your verbal CTA, not during silence or a static outro card.** An end screen over dead air gives the viewer nothing to click. ## Phase 4: Metadata and SEO **Step 17: Write your title last (the strongest-angle test).** Your title should reflect the actual video you made, not the video you planned to make. These often diverge during production. The angle that felt strongest during scripting may not be the angle that came alive during filming. Watch your finished video and identify: what is the single most compelling moment or insight? That should be your title's focus. Title formula checklist: - Short enough to survive truncation in search results and the mobile feed - Contains your primary keyword early in the title - Uses a number if applicable (a specific number is easier to click than a vague plural) - Creates a specific curiosity gap or promises specific value - Does NOT over-promise what the video delivers (clickbait hurts retention, which hurts the algorithm) - You would click on this title from a creator you do not follow Benchmark: **read your title and imagine seeing it from a stranger's channel. Would you click? Would you feel the title delivered after watching?** Both answers must be yes. **Step 18: Thumbnail-title complementarity.** Your thumbnail and title work as a single unit. They should complement each other, not repeat each other. Bad pair: Title "5 Biggest YouTube Mistakes" + Thumbnail text "5 MISTAKES" Good pair: Title "5 Biggest YouTube Mistakes" + Thumbnail showing a creator's shocked face with an analytics graph going down The thumbnail adds emotion, visual context, or curiosity that the title cannot convey in text. The title adds specificity that the thumbnail cannot convey visually. Benchmark: **cover your title and look at just the thumbnail. Then cover the thumbnail and read just the title. Each should make sense independently but neither should give the full picture alone.** Together, they should be more compelling than either one separately. **Step 19: In the description, front-load the lines viewers see.** Only the opening lines of your description appear in search results and above the fold on the watch page. These lines must: - Contain your primary keyword naturally - Give a compelling reason to watch (not just describe the video) - NOT start with "In this video, I..." (this wastes the most valuable real estate in your description) The rest of the description should include: - Timestamps for each major section (these also appear as chapters in the player) - Links to related videos mentioned in the content - Your primary keyword plus a few close variations woven naturally into the prose - A call-to-action Benchmark: **your first description line should be strong enough to work as a post that makes people want to watch.** If it reads like a table of contents, rewrite it. **Step 20: Tag the video.** Tags influence YouTube's initial content classification. Use: - Your exact primary keyword as the first tag - Close variations of your primary keyword - Broader category tags - Your channel name Benchmark: **every tag should be a phrase someone would actually search for.** If you would not type it into YouTube's search bar, it is not a useful tag. **Step 21: Category and language settings.** Select the YouTube category that most closely matches your content. This affects which audiences YouTube initially tests your video with. Common mapping: - Tech reviews -> Science & Technology - Gaming -> Gaming - Tutorial/educational -> Education or Howto & Style - Commentary/essay -> Entertainment or People & Blogs - Finance -> Education Also verify your language setting matches your video's spoken language. Incorrect language settings can cause your video to be served to audiences who cannot understand it, which hurts retention. ## Phase 5: Upload and Publish **Step 22: Schedule ahead of the audience window.** In YouTube Studio, open Analytics and then the Audience tab to see when your subscribers are most often on YouTube. Schedule your upload ahead of that window, with enough time for the video to finish processing and for YouTube to start distributing it to your subscribers as they come online. If you do not have enough data for audience insights, pick a time you can be present to answer comments during the first hours after publishing, and keep it consistent. Benchmark: **your video should be fully processed and available before your audience's peak activity window, not during it.** Uploading during the peak means your early viewers meet a processing or low-quality version. **Step 23: Community post (the pre-launch prime).** Write a community tab post to publish shortly before your video. This primes your subscriber base. Include: - A still from the video (not the thumbnail; a different, curiosity-generating frame) - A question related to the video's topic that invites comments - Do NOT include the video link yet; just generate anticipation Then, when the video publishes, add a second community post with the link and a brief "it is live" message. Benchmark: **your pre-launch post should earn replies before the video goes live.** If it does not, the question was not specific enough to answer. **Step 24: First comment (the engagement seed).** Before publishing, or immediately after, post a pinned comment that gives viewers an easy, low-friction reason to engage. The best pinned comments are specific questions with constrained answers: Weak: "What did you think? Let me know in the comments!" Strong: "Which of these 5 mistakes have you made? I am guilty of number 3." Stronger: "I am curious: what is your current average view duration? Drop it below and I will reply with one tip specific to your number." Comments in the first hours signal engagement to the algorithm. Your pinned comment can seed responses from viewers who otherwise would not have commented. Benchmark: **your pinned comment should be answerable in a few words.** Long-answer prompts get fewer responses because they feel like work. **Step 25: Cards and end screen (strategic placement).** Add info cards at moments when a viewer might want to go deeper on a topic you have mentioned but are not fully covering. The ideal card placement is: - When you reference another video or resource - When you mention a concept that has its own dedicated video - NOT during your hook; cards here cause early exits - NOT during your strongest content sections; do not give viewers a reason to leave during your best moments End screen: use most of the window YouTube allows rather than a few seconds of it, and feature your best-performing related video (not your newest video; your best-performing one in a related topic). **Step 26: Captions and subtitles.** Verify that YouTube's auto-generated captions are accurate. Fix any errors in YouTube Studio's caption editor. This matters because: - Captions improve search discoverability (YouTube indexes caption text) - Incorrect auto-captions create a poor experience and can misrepresent what you said - Some viewers watch with captions on by default If you have viewers in other countries (Analytics, then Audience, then Geography), consider adding translated subtitles for the languages that show up there. **Step 27: Final playback (the phone test).** Before clicking publish, play the opening of your video on your phone. Not your editing monitor. Your phone. This is how most viewers will actually meet the video. Check: - Is text on screen readable at phone size? - Is the thumbnail clear and compelling at phone-thumbnail size? - Does the audio sound good through phone speakers? - Does the hook grab you even on a small screen with potential distractions? Benchmark: **if the opening does not hold your attention on a phone screen in a well-lit room (the hardest viewing condition for contrast and detail), it will not hold your audience's attention either.** ## Why You Need a Pre-Publish Checklist Every professional field uses checklists. Surgeons use them before operations, aviation crews use them before takeoff, and software teams use them before a release. Not because the steps are unknown, but because a routine can be executed correctly for years and still miss one step on the day it matters. YouTube is no different. A single missing step (a poorly written title, a forgotten end screen, an unoptimized thumbnail, an opening that does not land) can sink a video that took a full day to produce. And unlike surgery or aviation, there is no co-pilot catching your mistakes. You are solo. The problem with mental checklists is that they fail exactly when you need them most: when you are tired after a long edit session, when you are rushing to meet your upload schedule, when you are excited about a video you think is great. Excitement creates the biggest blind spots, because that is the moment you skip the checklist with "this one is different, this one is clearly good." Two things separate this checklist from generic advice. First, **every step states what passing looks like**, so there is no ambiguity to rationalize your way past. Second, where a step carries a threshold, the threshold is either measured and cited or left out entirely. The checklist is organized in production order: script, filming, editing, metadata, and upload. Each phase catches different categories of problems, and skipping any phase means accepting the risk that those problems ship. ## The Step That Changes Everything Of the 27 steps, step 1 (script analysis) delivers the most return on time invested. Here is why: Steps 2-27 fix execution problems: filming quality, editing tightness, metadata, publish timing. These matter, but they are optimizing the packaging. Step 1 fixes the product itself: the content structure that decides whether viewers stay or leave. Read more about this in our [script analysis guide](/guides/what-is-youtube-script-analysis). A concrete example. Imagine a creator who follows steps 8-27 perfectly. Their audio is pristine. Their editing is tight. Their thumbnail is optimized. Their title is compelling. But their script spends its opening on setup, has no re-engagement moment in the middle of the body, and runs on additive transitions throughout (each section feels like "here is another thing" rather than building momentum). That video will underperform despite flawless execution on everything else. Now reverse it: a creator whose production quality is merely adequate but whose script carries the claim from the first sentence, places deliberate re-engagement moments where the body would otherwise sag, builds momentum through adversative transitions, and ends with a "one more thing" that rewards viewers who stayed. That video will outperform the first one, both in the data the audience produces and in how long the video keeps finding new viewers. Learn how to build scripts with that structure in our [script structure guide](/guides/script-structure-guide). The script is the foundation. Everything else is decoration, and you cannot decorate your way out of a structural problem. Start with step 1. [Try Prepublish](/upload) and run your next script through analysis before you record. The shorter version of this same check, with five tests and the evidence behind each, is [check your YouTube script before recording](/guides/check-youtube-script-before-recording). ## FAQ Q: How long does the full checklist take? A: The first written pass takes an afternoon. After you have run it a few times, most of the checks live in your head and the deliberate pass is the script phase and the metadata phase. Filming and editing checks sit inside those processes rather than running as separate sessions. Treat any timing here as planning, not a measurement. Q: Should I follow every step for every video? A: Steps 1-7 (script) and 17-21 (metadata): every video, no exceptions. Steps 8-16 (filming and editing): can be abbreviated for formats you have dialed in through repetition. Steps 22-27 (upload): every video. Never skip the script phase; even experienced creators have blind spots on individual videos. Q: What's the most common pre-publish mistake? A: Writing the title before the video is finished. Your title should reflect the actual video's strongest angle, which almost always shifts during production. The second most common: an opening that spends its first stretch on setup instead of delivering the claim. The third: flat transitions that signal "more of the same" instead of building momentum. Q: Does this checklist work for YouTube Shorts? A: Steps 1-3 (script analysis, hook validation, title alignment), step 17 (title), and step 27 (phone test) apply directly. The filming and editing phases matter less, since Shorts are shorter and simpler to produce. For Shorts the opening carries even more of the load: the first sentence is the whole hook, so there is no second chance to establish the claim. Q: When should I start using this checklist? A: Now. New creators benefit the most, because they have the least intuition about what works. The checklist substitutes for experience you have not built yet and shortens the trial-and-error period that costs most creators their first year of uploads. --- # How to Write a YouTube Script Step by Step URL: https://prepublish.ai/guides/how-to-write-a-youtube-script Updated: 2026-09-21 TL;DR: The four mechanisms that decide whether a script holds attention: the Hook Trident (a spike, a proof and a stake in the opening), the SPEC outline (Setup, Points, Evidence, Conclusion), the 300-word section rule, and the adversative transition. The generic write-a-script walkthrough is compressed into one summary at the end. Where a number here is measured, the source is linked; where it is a working convention, the text says so. ## The four mechanisms this guide is built on Most YouTube scripts do not fail because of bad writing. They fail because of bad planning. The creator opens a document and starts typing, and the result is a transcription of a thought process, which is exactly as meandering as thought processes tend to be. That draft starts slow because the creator was warming up, loses momentum in the middle because nothing structural gives the viewer a reason to stay, and ends abruptly because there was nothing left to say. The fix is not "be a better writer." The fix is engineering, and four mechanisms do most of the work: 1. **The Hook Trident.** A three-part opening: the spike (a specific claim or result), the proof (one piece of evidence), and the stakes (why it matters to this viewer). 2. **The SPEC outline.** A four-part plan, Setup, Points, Evidence and Conclusion, that fixes scope and order before you draft a word. 3. **The 300-word section rule.** A drafting constraint: no section runs past 300 words without a structural break. It is a working convention, not a measured threshold, and it is the easiest of the four to enforce on a draft. 4. **The adversative transition.** A rule for the joins between sections: they move the argument forward rather than announcing the next item on a list. They are presented in the order they touch a draft. The hook is planned first, the outline is built around what the hook promises, the draft runs under the section-length rule, and the transitions are where the structure becomes audible to a listener. Where a number in this guide is measured, the source is linked. Where a number is a working convention, the text says so. The generic write-a-script process, the part every competitor publishes, is compressed into [one summary at the end](#section-5), so you can see where the four mechanisms sit inside a normal workflow. ## Step 1: The Hook Trident (plan the hook before you draft) The order is counterintuitive: plan the hook before you draft, then write the actual hook text after the body is finished. If you write the hook first, you make promises before you know what the video delivers, and you end up claiming "5 game-changing tips" when only three survived drafting. If you plan it first and write it last, the hook can promise exactly what the video delivers: the strongest moment, the most surprising finding, the most useful tip. **The three prongs.** Prong 1: **The Spike.** A specific, unexpected claim or result. - "I spent $3,000 testing every lighting setup on Amazon." - "There is a YouTube setting that is off by default that doubles your suggested impressions." - "I have been making videos for 4 years and just discovered I was doing [fundamental thing] wrong." Prong 2: **The Proof.** One piece of evidence that makes the spike credible. - "Here is the data." / "Let me show you the side-by-side." / "My analytics before and after." - This does not need to be comprehensive. It needs to signal that the video has substance, not just claims. Prong 3: **The Stakes.** Why this matters to the viewer specifically. - "If you are filming in a home studio, this changes your entire setup." - "This is the difference between a video that gets 500 views and one that gets 50,000." - "Most creators do not know about this because [reason], and it is costing them [specific thing]." Template: "[Spike: specific claim with number or result]. [Proof: one piece of evidence]. [Stakes: why this matters to you]." **What the measurement says about timing.** The three prongs run about a sentence each, so the planned opening is roughly three sentences long. Our [349-video hook study](/blog/youtube-hook-study) found that hits and flops delivered their first concrete reason to keep watching at almost the same point (median word 14 for overperformers against word 15 for flops), so an early payoff on its own separates nothing. What separated the groups was whether the opening engaged the title's promise: 87 percent of overperformer openings against 78 percent of flops. **How to use it.** Write three hook options. Run each through [script analysis](/upload) and keep the one with the highest hook score that still sounds natural in your voice. The published bands put a strong score at 80 and above (`prepublish-fe/lib/score-bands.ts`), so treat anything below that as a draft opening rather than a finished one. For more hook patterns, see our [hook examples guide](/guides/youtube-hook-examples) and [first 30 seconds guide](/guides/first-30-seconds). ## Step 2: The SPEC outline Before drafting, build a structural outline on the SPEC framework. The proportions below are planning shares, not measurements. **S: Setup.** The context the viewer needs: the problem you are solving or the question you are answering. This is not the hook. It is the short orientation that follows the hook. **P: Points.** The main arguments, tips, steps or sections, in order. For each one, write a single sentence describing the value it delivers. Critical rule: **every point must pass the "so what?" test.** Ask why it matters to the viewer. If you cannot answer immediately and specifically, the point is too obvious, too vague, or belongs in a different video. **E: Evidence.** For each point, note what supports it: a statistic from a source you can cite, a personal experience, a demonstration, an example, or a comparison. Points without evidence read as opinions. Points with evidence read as expertise. **C: Conclusion.** The takeaway, what the viewer should understand or do afterwards, and the "one more thing" that rewards viewers who stayed. **Three planning rules.** - **Keep the point count small.** Past seven points, numbered formats tend to lose the consistency that makes them satisfying. That is a formatting convention, not a measured threshold. If you have more than seven, cut the weakest or split the video. - **Order the points for momentum, not logic.** Logical order is chronological or simple to complex. The order that holds attention starts strong, carries momentum through the middle, and saves the most impactful point for the second-to-last position. The reasoning behind that placement is the peak-end finding covered in the [watch time psychology guide](/guides/youtube-watch-time-psychology). - **Allocate words per section.** A word budget shows you which section will run long before you write it, and it is the fastest way to keep the 300-word rule from step 3. **Three copy-paste outlines.** These are the starting structures we use. The word figures are starting allocations to adjust, not targets to hit. They were published as a standalone template page, which is now folded in here so one URL owns script structure. *Outline 1: the standard video.* Commentary, analysis, opinion, and most educational content. The word figures are starting allocations for a mid-length video, to be scaled to your target. ``` HOOK (100 words): [Specific claim or result]: "I tested/discovered/found [specific thing]" [One piece of evidence]: "Here is the data/proof/comparison" [Why this matters to YOU]: "If you are [viewer situation], this changes [specific outcome]" SECTION 1 (250 words): [Mini-hook]: why this section matters, in one sentence [Core content]: the main point with evidence or example [Transition]: "But this only works if..." / "The problem is..." SECTION 2 (250 words): [Mini-hook] / [core content] / [transition] RE-ENGAGEMENT BEAT (50 words): [Stakes escalation]: "This next part is where it gets interesting" SECTION 3 (250 words): [Mini-hook] / [core content] / [transition that sets up your strongest point] SECTION 4 (250 words): [Your strongest point: save it for here, not section 1] [Best evidence, most compelling argument] CONCLUSION (150 words): [Key insight: not a summary, a new perspective on everything above] [One more thing]: the bonus the viewer did not expect [CTA]: "If you want to [outcome], [action]" ``` The re-engagement beat sits at the halfway mark because that is where a body section list tends to sag, and your strongest point sits second to last. A section that grows past 250 words is a signal to split it, which is what the 300-word rule in step 3 is for. *Outline 2: the list or numbered video.* Use it for "X mistakes," "X tips," "X things you need to know." Ordering carries most of the weight here. ``` HOOK (80 words): [State the number]: "There are [X] [mistakes/tips/things]..." [Stakes]: "...and number [X-1] is the one most people get wrong" [Tease]: one sentence previewing the most surprising item ITEM 1 (200 words): strong item, builds credibility early ITEM 2 (200 words): second strong item, confirms the viewer is in the right place ITEM 3 (150 words): medium item, carried by the momentum of items 1 and 2 ITEM 4 (250 words): your strongest item, the peak moment, more evidence and detail ITEM 5 (180 words): medium-strong close, with a bonus tip attached CONCLUSION (100 words): [The principle connecting all items, not a recap] [CTA] ``` *Outline 3: the tutorial.* Show the result before you teach the process, and put a milestone after each group of steps. ``` HOOK (50 words): [Show the finished result immediately: the completed project, the final outcome] "Here is what we are building today" STEP 1 (200 words): start instruction immediately, no context preamble MILESTONE (40 words): "If you have done this right, you should see [specific result]" STEP 2 (200 words): vary the teaching mode from step 1 STEP 3 (200 words): include one "why" explanation here MILESTONE (50 words): show the intermediate result and compare it to the hook STEP 4 (200 words): include one common-mistake warning STEP 5 (180 words): reach the result shown in the hook LEVEL UP (100 words): one advanced tip beyond the tutorial's stated scope, plus a CTA ``` Milestones exist because tutorial viewers leave at confusion points rather than boredom points: a checkpoint that matches what they see on their own screen is what keeps them going. If you would rather not outline from a blank page, the [script templates](/templates) are pre-built SPEC-style skeletons for the common formats: tutorials, reviews, storytimes, top-10s. Take the structure, keep your voice. ## Step 3: The 300-word section rule This one is our drafting rule rather than a measured threshold, and it is the most enforceable rule in this guide. **The ceiling.** No single section should run past 300 words without a structural break. A section that keeps going without changing subtopic, inserting a transition, or giving the viewer a breath is the section where the middle of a video loses people. When you reach the ceiling, split the section. What counts as a structural break: - A transition sentence (adversative, not additive) - A question directed at the viewer - A very short sentence that resets pacing ("Here is the thing." / "Let me be specific." / "Watch this.") - A shift from explanation to example, or the reverse **The "you" cadence.** Address the viewer rather than describing creators in the third person. Write "you need to try this," not "one might consider." Write "you have probably noticed," not "creators often find." Second person is what makes a script read like one person talking to one viewer instead of a lecture to a room. This site holds its own guides to the same rule. **Evidence density.** Each section should carry at least one specific piece of evidence: a number you can source, an example, a comparison, a demonstration, or a personal experience. A stretch of opinion without evidence is what triggers the viewer's "is this actually useful?" check. **Do not edit while writing.** Write the full draft without going back to fix anything. Editing while writing kills momentum and produces over-polished prose that sounds wrong when spoken. The revision pass is where the fixes happen, and it is covered in [the process summary](#section-5) and in detail in the [pre-publish checklist](/guides/youtube-pre-publish-checklist). ## Step 4: The adversative transition The joins between sections are where a script either builds momentum or goes flat. Read every transition and ask which of the two jobs it does. Forward momentum (adversative): - "But here is where it gets interesting..." - "The problem is, most people do this wrong..." - "Now, you might think [X], but actually..." - "This works great, until you try it with [Y]..." Flat or backward (additive): - "Moving on to the next point..." - "Another thing you should know..." - "Also..." - "On top of that..." - "The next tip is..." Write the transition the moment you finish a section rather than saving it for the revision pass; a transition written later tends to become a label rather than a turn. Examples by section type: - Between a "what" section and a "how" section: "But knowing what to do is useless if you do not know how to implement it." - Between a tip and a common mistake: "Most people try this and fail. Here is the mistake they make." - Between a concept and an example: "This sounds abstract. Let me show you exactly what I mean." The deeper structural work behind these joins, including how to sequence sections so the turns land where attention needs them, is in the [script structure guide](/guides/script-structure-guide). ## The whole writing process in five stages The four mechanisms sit inside a normal writing process. This is the same process every scripting guide describes, kept short here on purpose, with the mechanisms marked. **1. Research and pick an angle.** Search your topic on YouTube and watch the top results long enough to see what they cover and what they skip, then check your own comments for questions viewers already asked (the [Comment Miner](/tools/youtube-comment-miner) groups them). Complete this sentence: "Most videos about [topic] tell you [common advice], but they miss [my insight]." If you cannot complete it, you do not have an angle yet. Draft a working title from the angle. The final title comes after the video is finished. **2. Plan the hook, then outline.** Plan the hook with [the Hook Trident](#section-1), then build the [SPEC outline](#section-2) around what the hook promises. **3. Draft.** Write the whole script without editing, under the 300-word rule from [step 3](#section-3), writing the transitions as you go ([step 4](#section-4)). **4. Write the hook text.** With the body finished, you know what the video actually delivers. Write three hook versions (lead with your strongest result, lead with the viewer's problem, lead with a demonstration) and keep the one that scores highest while still sounding like you. **5. Revise.** Three passes. A red flag scan, marking sections over the ceiling, additive transitions, stretches without evidence, stretches without a direct address to the viewer, and the midpoints of long sections. A read-aloud pass, marking every sentence you stumble on and every place your energy drops. Then an analysis pass with a [script analyzer](/upload), comparing the flagged passages against your first draft. The bands are published in the product, with 80 and above strong and 60 to 79 good (`prepublish-fe/lib/score-bands.ts`). Once the draft clears those passes it is ready to record, and the [pre-publish checklist](/guides/youtube-pre-publish-checklist) carries it from there through filming, editing, metadata and upload. If you have less time than this process needs, the [90-minute workflow](/blog/script-to-success-workflow) compresses the same stages around a voice-memo draft, and the [tutorial script guide](/guides/youtube-tutorial-scripts) adapts the stages to instructional pacing. ## FAQ Q: How long should it take to write a YouTube script? A: Plan an afternoon for a 10 to 12 minute video: research and angle selection first, an outline second, the full draft third, the hook fourth, and the revision pass last. The draft is the longest stage because it runs under the 300-word rule. Those are planning estimates from our own workflow rather than measurements, and the split shifts with practice. Q: Should I script word-for-word or use bullet points? A: Full scripts, bullet points, and freestyle each trade control against spontaneity, and the right answer depends on your delivery. If the mid-video structure matters to you, full scripting is worth the time investment, because a plan is what keeps the middle from sagging. The exception: if your format relies heavily on spontaneity and personality (reaction videos, casual vlogs), bullet points may produce more natural delivery. Q: I'm not a good writer. Can I still write effective YouTube scripts? A: Script writing is not the same as essay writing or creative writing. It is structural engineering. If you can follow the SPEC outline, apply the 300-word rule, and plan the opening with the Hook Trident, you can write scripts that hold attention better than most creators manage, because most creators do not follow any structure at all. The bar is lower than you think. Q: How do I know when a script is "done"? A: When the draft sits in the strong band on the overall score with the hook not dragging it down, and you can read the whole thing aloud without stumbling, and the flagged passages in the script-hold reading are shallower than they were in the previous draft. The bands are published in the product: 80 and above strong, 60 to 79 good (prepublish-fe/lib/score-bands.ts). When those hold, the script is ready to record. Q: Should I write differently for YouTube Shorts? A: Shorts follow the same principles under compression. The opening has to carry the whole promise, because there is no room to establish the claim later. One idea, one payoff, no side excursions. The long-form re-engagement structures are unnecessary, because there is no middle section to keep alive. --- # YouTube Storytelling: The Narrative Structures That Actually Retain Viewers URL: https://prepublish.ai/guides/youtube-storytelling-narrative-structures Updated: 2026-03-05 TL;DR: Six specific narrative structures used by high-retention YouTube videos, broken down beat by beat with timing guidelines and retention data. Includes the Curiosity Loop, the Transformation Arc, the Problem Stack, the Expert Contrast, the Ticking Clock, and the Reveal Ladder. Each structure works for different video types and can be templated. ## Why "Just Tell a Story" Is Useless Advice Every YouTube advice channel says some version of "tell a story: stories are how humans connect." This is true and completely unhelpful. It's like telling a basketball player "just score points." The advice is vacuous, not wrong. The question isn't whether to use storytelling. The question is which story structure to use, for which content type, with what specific beats, at what timing. A product review uses different narrative mechanics than a tutorial, which uses different mechanics than a commentary essay. Using the wrong structure for your content type is often worse than using no structure at all; it creates viewer expectation mismatches that accelerate drop-offs. This guide covers six specific narrative structures. For each one: what it is, when to use it, beat-by-beat breakdown with timing, an example, and what the [retention curve](/guides/youtube-retention-guide) typically looks like. ## Structure 1: The Curiosity Loop **What it is:** You open by presenting a mystery, question, or unexplained phenomenon. The rest of the video gradually reveals the answer, with each section adding a piece while creating new questions. **When to use it:** Investigation videos, "why does X happen" videos, deep dives, documentary-style content, anything where the answer is more complex or surprising than the viewer expects. **Beat-by-beat breakdown:** Beat 1: The Mystery (0-15 seconds, ~100 words). Present the unexplained phenomenon or question. Be specific. "Why do some YouTube videos with terrible thumbnails still get millions of views?" is better than "How does the YouTube algorithm work?" The mystery must be narrow enough that the viewer believes it will be answered in this video. Your [hook](/guides/youtube-hook-examples) is the mystery itself. Beat 2: First False Answer (15%-25% mark, ~200-250 words). Present the obvious explanation and then undermine it. "Most people think it's because of the title. And titles do matter, but I tested this with 30 videos that had identical title structures and completely different thumbnails. The results were weird." This beat serves two purposes: it shows the viewer that you've done the work, and it deepens the mystery by ruling out the easy answer. Beat 3: The Complication (25%-45% mark, ~300-400 words). Introduce additional evidence that makes the answer more complex. This is where you go deeper: data, examples, expert opinions, your own testing. Each new piece of evidence should partially answer the mystery while raising a new question. "So it's not the title. But when I looked at the retention data on these viral ugly-thumbnail videos, I noticed something strange: they all had retention curves that looked nothing like normal videos." Beat 4: The Turn (45%-65% mark, ~250-350 words). Present the insight that reframes the entire mystery. This is your "aha" moment. "Ugly thumbnails don't succeed despite being ugly. These specific thumbnails trigger a curiosity pattern that polished thumbnails can't. The ugliness IS the hook." The turn should feel like the ground shifting: the viewer's understanding of the question fundamentally changes. Beat 5: The Resolution (65%-85% mark, ~300-400 words). Now deliver the complete answer with practical implications. What does this mean for the viewer? How can they use this? This is where the story becomes actionable. Beat 6: The Implication (85%-100%, ~150-200 words). Zoom out. What does this answer mean for the bigger picture? What else might it explain? This beat provides the "one more thing" feeling and often contains the insight that makes viewers share the video. **Retention profile:** The Curiosity Loop tends to produce flat retention curves. The mystery creates consistent forward pull, and each beat adds enough new information to justify continued watching. The critical risk point is Beat 2 (the false answer): if the viewer finds the false answer satisfying enough, they'll leave. The false answer must clearly be incomplete or wrong. ## Structure 2: The Transformation Arc **What it is:** You show a before state, a process of change, and an after state. The viewer watches a transformation unfold and learns from the process. **When to use it:** Before/after videos, challenge videos, "I tried X for 30 days," skill-building tutorials, makeover/improvement videos of any kind. **Beat-by-beat breakdown:** Beat 1: The Before (0-20 seconds, ~120 words). Show the current (bad) state. Be painfully specific. Don't say "my videos weren't performing well." Say "my last 10 videos averaged 847 views and 32% retention. My subscriber growth was negative." Specific numbers create credibility and emotional weight. The viewer needs to feel the gap between where you are and where you want to be. Beat 2: The Stakes (20 sec - 1 min, ~150 words). Why does this transformation matter? What's at risk? "I was posting twice a week, spending 15 hours per video, and losing subscribers. At this rate, I'd burn out within 3 months." Stakes create investment. The viewer needs a reason to care whether the transformation succeeds. Beat 3: The Discovery (10-25% mark, ~200 words). What changed? What catalyst initiated the transformation? "Then I came across a study about [retention patterns](/guides/youtube-retention-guide), and I realized I'd been writing my scripts completely wrong. Every single video started the same way, and it was the worst way to start." The discovery should feel earned but accessible: the viewer should think "I could have found this too." Beat 4: The Process (25-65% mark, ~600-800 words). This is the bulk of the video. Show the step-by-step change. What specifically did you do differently? This section must balance detail (the viewer needs to learn enough to replicate the transformation) with momentum (don't get bogged down in minutiae). Break it into 3-5 distinct steps or phases, each under 200 words. Each step should show a mini result: evidence that the change is working. See our [script writing guide](/guides/how-to-write-a-youtube-script) for frameworks on structuring this section. Beat 5: The Setback (65-75% mark, ~200 words). Optional but extremely powerful. Show a moment where the transformation stalled or reversed. "After 2 weeks, my retention actually dropped. I almost went back to my old approach." Setbacks create tension and make the eventual success more satisfying. They also increase credibility; pure success stories feel unrealistic. Beat 6: The After (75-90% mark, ~250 words). Show the results. Specific numbers again. "Video 1 with the new approach: 3,200 views, 48% retention. Video 5: 12,000 views, 52% retention. My subscriber growth rate went from -12/day to +47/day." Side-by-side comparisons are incredibly powerful here. Beat 7: The Lesson (90-100%, ~150 words). What's the takeaway? Go beyond "this method works": what principle or insight drives the transformation? What can the viewer apply beyond the specific technique you showed? **Retention profile:** Transformation Arc videos have above-average retention but with a specific pattern: a dip at the start of Beat 4 (the process section). Viewers who are only interested in the "what" (what changed?) disengage when the video shifts to the "how" (how to do it). To minimize this dip, start Beat 4 with a stakes re-escalation: "Here's the exact process, and the first step is counterintuitive." Transformation Arc videos tend to get shared. People share transformations because they signal that change is possible: "If they did it, I can too." ## Structure 3: The Problem Stack **What it is:** You present a problem, solve it, then reveal that the solution creates a new problem, which you solve, which reveals another problem. Each layer goes deeper. **When to use it:** Technical deep dives, troubleshooting guides, "why is this harder than it looks" videos, expert-level content where surface-level answers are insufficient. **Beat-by-beat breakdown:** Beat 1: Surface Problem (0-20 seconds, ~120 words). Present the problem the viewer came to solve. "Your YouTube thumbnails aren't getting clicks. Your CTR is under 3% and you don't know why." Start with a strong [hook](/guides/youtube-hook-examples) that makes the problem feel urgent and relatable. Beat 2: Surface Solution (5-20% mark, ~200 words). Give the obvious answer. Fully. Don't hold back. "The fix is simple: higher contrast, larger text, expressive face, 3-color maximum." Deliver this genuinely; the viewer should feel like they've gotten a complete answer. Beat 3: The Deeper Problem (20-25% mark, ~100 words). Reveal why the surface solution isn't enough. "But here's what happens when you follow that advice: your CTR goes up, but your retention goes down. Why? Because high-CTR thumbnails set expectations your video doesn't meet." This is the moment that separates your video from the dozens of others on the same topic. Beat 4: Deeper Solution (25-45% mark, ~300-350 words). Address the deeper problem with more nuanced advice. This section establishes your expertise; you're going beyond what other creators have covered. Beat 5: The Deepest Problem (45-55% mark, ~150 words). Reveal a third layer. "Even when you match your thumbnail to your content, there's another issue: your thumbnail might be optimized for the wrong audience. You're attracting clickers, not watchers." Beat 6: The Real Solution (55-80% mark, ~400-500 words). This is your most valuable section: the insight that only comes from deep expertise. You've peeled back three layers and now you're at the root cause. The solution here should feel like an "aha" moment. Beat 7: The Synthesis (80-100%, ~200 words). Tie all layers together. Show how the surface, deeper, and deepest problems are connected. Give a unified framework the viewer can use going forward. **Retention profile:** Problem Stack videos have a distinctive "staircase" retention curve: small dips at each problem-to-solution transition but strong holds during the deepening sections. The critical moment is Beat 3 (revealing the deeper problem). If this beat isn't compelling, viewers who got the surface solution in Beat 2 will leave satisfied. Beat 3 must genuinely surprise them; make them feel like the surface solution would have been a mistake. ## Structure 4: The Expert Contrast **What it is:** You show the difference between how a beginner approaches something and how an expert approaches the same thing. The contrast reveals insights that pure instruction wouldn't. **When to use it:** "What I'd do differently," comparison content, skill demonstration, craft-focused content in any niche. **Beat-by-beat breakdown:** Beat 1: The Common Approach (0-20% mark, ~300 words). Show the typical way a beginner or intermediate creator handles the task. Be fair; don't create a strawman. Show the approach that most reasonable people would use. "Here's how most creators write a YouTube script: they open a document, write stream-of-consciousness, read it back, tweak a few lines, and start filming." Beat 2: The Expert Approach (20-60% mark, ~600-700 words). Show what an expert does differently. Be specific about the differences. Don't write "they plan more carefully." Write "they spend 30 minutes building a structural outline before writing a single sentence. Each section has a word count target. Every transition is adversative." The contrast should be concrete and observable, not abstract. For a detailed breakdown of the expert scripting process, see our [script writing guide](/guides/how-to-write-a-youtube-script). Beat 3: Why the Difference Matters (60-80% mark, ~300 words). Show the results. What does the expert approach produce that the common approach doesn't? Include specific metrics, examples, or demonstrations. "The stream-of-consciousness script scores 41 in [attention-risk analysis](/upload). The structured script scores 74. Here's what the script-hold risk maps look like side by side." Beat 4: The Bridge (80-100%, ~250 words). Show the viewer how to go from the common approach to the expert approach. Give specific, actionable first steps. This is the section that makes the video useful rather than just impressive. **Retention profile:** Expert Contrast videos retain well when the common approach is genuinely recognizable ("I do that!") and the expert approach is genuinely different ("I've never thought of doing it that way"). They underperform when the expert approach is just "more of the same but better." The contrast must be qualitative; a purely quantitative difference isn't enough. ## Structure 5: The Ticking Clock **What it is:** You impose a time or resource constraint that creates urgency. The viewer watches to see if you succeed within the constraint. **When to use it:** Challenge videos, speed-run formats, "can I do X in Y time," limited-budget projects, any content with natural tension. **Beat-by-beat breakdown:** Beat 1: The Constraint (0-10 seconds, ~80 words). State the constraint immediately. "I have 24 hours to grow a YouTube channel from 0 to 1,000 subscribers." "I have $100 to build a complete home studio." The constraint must be specific and feel genuinely challenging but possible. This is your [hook](/guides/youtube-hook-examples); the constraint itself creates curiosity. Beat 2: The Plan (10 sec - 10% mark, ~150 words). Show your strategy. The viewer needs to understand what you're attempting and why you think it will work. This creates a framework for evaluating your progress throughout the video. Beat 3: Early Progress (10-30%, ~250 words). Things go well. You make progress. The viewer feels optimistic. This establishes investment in your success. Beat 4: The Obstacle (30-50%, ~300 words). Something goes wrong. A plan fails, an unexpected problem arises, the constraint becomes harder than expected. This is the retention anchor: viewers who might have left because "I already see where this is going" now stay because the outcome is uncertain. Beat 5: Adaptation (50-75%, ~350 words). You adjust your approach. The viewer sees problem-solving in real time. This is often the most valuable section educationally, even though it's framed as narrative. Beat 6: The Result (75-90%, ~200 words). Did you succeed? Show the final number, product, or outcome. Be honest about whether you met the constraint. Beat 7: The Lessons (90-100%, ~150 words). What did you learn? What would you do differently? What should the viewer take away? This is where the entertainment value converts into educational value. **Retention profile:** Ticking Clock videos tend to hold the opening well because the constraint immediately establishes stakes. The risk is in the middle section (Beat 4-5): if the obstacle isn't genuinely threatening, the tension deflates and retention drops. The obstacle must feel real, not manufactured. ## Structure 6: The Reveal Ladder **What it is:** You make a promise in the hook and then deliver the answer through a series of escalating reveals, each one more valuable than the last. **When to use it:** List videos, ranking videos, "best/worst of" content, tier lists, any format where items can be ordered by value or impact. **Beat-by-beat breakdown:** Beat 1: The Promise (0-15 seconds, ~100 words). State what you're ranking or revealing and why it matters. "I'm going to show you the 5 best free tools for YouTube creators, from good to life-changing." Beat 2: The Foundation (5-15%, ~150 words). Give brief context or criteria. How did you evaluate? Why should the viewer trust your ranking? "I've used every free YouTube tool available for 2 years. I judged them on three criteria: how much time they save, how much they improve performance, and how reliable they are." Beats 3-7: The Ladder (15-85%, ~800-1000 words total). Present each item in ascending order of value. Each item gets progressively more detail, enthusiasm, and evidence. The escalation is critical: if item 3 doesn't feel more exciting than item 2, viewers disengage because the pattern breaks. Use transitions that build anticipation: "This next one is good... but the one after it changed how I make videos." Beat 8: The Crown (85-95%, ~200 words). Your top pick gets the most detailed treatment. This is the moment the viewer has been waiting for. It must justify the wait. Include specific evidence, personal results, or a demonstration that makes the choice feel undeniable. Beat 9: The Surprise (95-100%, ~100 words). After crowning the winner, add an unexpected bonus: an honorable mention, a dishonorable mention, a contrarian take, or a prediction. "And here's one that's not free yet but will be soon. When it launches, it will probably replace everything on this list." **Retention profile:** Reveal Ladder videos tend to hold their ending: a viewer who reached item 3 of 5 has a clear reason to stay for items 4 and 5. The vulnerability is in the early items: if items 1-2 aren't interesting enough, viewers leave before reaching the best content. Solution: even your "weakest" items should be genuinely useful or surprising. If they're not, cut them and start your ladder higher. ## Choosing the Right Structure for Your Video Structure matching is more important than structure quality. A perfectly executed Curiosity Loop on a tutorial topic will underperform a solid Problem Stack on the same topic, because tutorials are answer-seeking content and Curiosity Loops delay the answer. Here's a guide for matching structures to video types: **Tutorial/How-to:** Problem Stack or Expert Contrast. Viewers want depth and progressive complexity. **Product review:** Reveal Ladder. Viewers want a verdict; escalation maintains interest. **Commentary/Essay:** Curiosity Loop. Viewers want to understand; mystery creates pull. **Challenge/Experiment:** Ticking Clock. Natural tension from constraint. **Before/After:** Transformation Arc. Change narrative matches content. **Listicle:** Reveal Ladder. Escalation structure maps to format. **Deep dive:** Curiosity Loop or Problem Stack. Complexity rewards narrative framing. **Comparison:** Expert Contrast. Contrast reveals insights instruction alone can't. **Storytime:** Transformation Arc. Personal narratives are change narratives. **Skill demonstration:** Expert Contrast. Showing difference teaches better than telling. You can combine structures. A tutorial might use Problem Stack for the overall arc but embed a Transformation Arc mini-story as evidence in one section. A commentary essay might use a Curiosity Loop overall but deploy the Expert Contrast within one beat to illustrate a point. The key is having one primary structure that drives the video's overall shape. For more on structuring the building blocks of your script, see our [script structure guide](/guides/script-structure-guide) and [how to write a YouTube script](/guides/how-to-write-a-youtube-script). ## The Anti-Patterns: Structures That Kill Retention Three common "structures" that feel organized but actually accelerate viewer drop-off: **The Lecture.** Beat 1: "Today I'll cover X." Beat 2: "Point 1 is..." Beat 3: "Point 2 is..." No rising action, no tension, no mystery. This is the structure of a college lecture, and YouTube viewers have the same response to it that college students do: zone out by minute 3. **The Disclaimer Spiral.** "Before I get started, I want to say that this is just my opinion and your experience may vary and I'm not an expert and this is not professional advice and..." Every disclaimer is an exit ramp. If you need caveats, embed them briefly within the relevant section, not as a preamble. For more on what to avoid in your opening, see our [first 30 seconds guide](/guides/first-30-seconds). **The Chronological Trap.** Telling a story in exact chronological order when the most interesting part happens in the middle or end. Start with the most compelling moment, then loop back to explain how you got there. Chronological is the default structure, and defaults are almost never optimal. If you recognize any of these patterns in your current scripts, restructure using one of the six frameworks above. [Try Prepublish](/upload) to analyze your script's structure and get specific improvement suggestions before you record. ## FAQ Q: Can I use storytelling in tutorials and educational content? A: Yes, and you should. The Problem Stack and Expert Contrast structures are specifically designed for educational content. They don't add fluff; they organize information in a way that creates forward pull. A Problem Stack tutorial ("here's the surface fix -> but it creates a deeper issue -> here's the real solution") teaches the same material as a flat tutorial but retains 15-20% more viewers. Q: What if my content doesn't have a natural story? A: Every piece of content has a potential narrative frame. The key is finding the tension. For a product review, the tension is "which product wins?" (Reveal Ladder). For a tutorial, it's "how do you solve this problem that's harder than it looks?" (Problem Stack). For a deep dive, it's "what's really going on here?" (Curiosity Loop). If you can't find the tension, your content might lack a compelling angle. Q: How do I practice storytelling without losing my current audience? A: Start by applying structure to your existing format rather than changing formats entirely. If you make list videos, apply the Reveal Ladder to your next one (ascending order with escalating excitement). If you make tutorials, try the Problem Stack on one video. Your audience won't notice you "switched to storytelling"; they'll just notice the video holds their attention better. Q: Do these structures work for YouTube Shorts? A: Shorts use compressed versions of two structures. The Curiosity Loop compressed: mystery -> one false answer -> real answer (all in 30-60 seconds). The Transformation Arc compressed: before -> one change -> after (with no process section). The other structures are too complex for the Shorts format. --- # Pattern Interrupts for YouTube: The Complete Playbook URL: https://prepublish.ai/guides/youtube-pattern-interrupts Updated: 2026-09-21 TL;DR: Pattern interrupts are deliberate changes in pace, tone, format, or visual presentation that reset the viewer's attention. This guide covers 14 specific techniques that go beyond "change the camera angle": exact timing formulas, which types work for which content categories, the diminishing returns curve, and 4 pattern interrupts that actually hurt retention. ## What Pattern Interrupts Actually Are (And Why Timing Matters More Than Type) A pattern interrupt is any deliberate change that breaks the viewer out of passive watching and resets their active attention. When you've been watching someone talk to a camera for 45 seconds, your brain starts to habituate: the visual and auditory input becomes predictable, and your attention drifts toward your phone, your second monitor, or the "Up Next" video in the sidebar. A pattern interrupt breaks that habituation. It can be visual (a different shot), auditory (a sound effect, a change in vocal tone), structural (a shift in topic direction), or informational (a surprising fact that contradicts expectations). But here's what most advice about [pattern interrupts](/guides/youtube-pattern-interrupts) gets wrong: **the type of interrupt matters less than the timing.** A practical interval between pattern interrupts is 45-90 seconds. Below 45 seconds, interrupts start to feel chaotic and the viewer can't settle into the content. Above 90 seconds, habituation sets in and the viewer's attention begins to drift. The sweet spot: **one interrupt every 60-75 seconds, with variation in the type of interrupt used.** Using the same type of interrupt repeatedly (e.g., a zoom cut every 60 seconds) creates a new pattern that the viewer habituates to, defeating the purpose. The interrupts themselves need variety. ## The 14 Techniques, Categorized by Type **Visual Interrupts (4 techniques):** **1. The Angle Cut.** Switch camera angles; even a slight shift (10-20 degrees) counts. This works because the human visual system is wired to notice spatial changes. A different angle on the same person in the same room creates enough novelty to reset attention. Timing: Use every 60-90 seconds as a baseline rhythm. This is the most "invisible" interrupt: viewers barely notice it consciously but it keeps them engaged. When it backfires: If every angle cut is identical (same two angles alternating), viewers habituate to the pattern within 3-4 minutes. Use at least 3 distinct angles. **2. The B-Roll Bridge.** Cut to relevant footage, a screen recording, a product shot, or a visual example for 3-8 seconds while continuing your voiceover. This provides both visual variety and evidence simultaneously. Timing: Every 2-3 minutes. More frequent than that and b-roll starts to feel like a crutch. Best practices: B-roll should illustrate what you're saying, not just decorate the video. "Here's what the [retention curve](/guides/youtube-retention-guide) looks like" + show the curve > "This is really important" + generic stock footage of a person at a computer. **3. The Text Overlay.** Put key words, numbers, or short phrases on screen as you say them. This engages both the auditory and visual processing systems simultaneously, increasing information retention and attention. Timing: 1-2 per minute for emphasis. Overuse makes the video feel like a PowerPoint presentation. What to overlay: Numbers ("47%"), key terms ("retention valley"), brief quotes, or counterintuitive claims. Don't overlay sentences; that's subtitles, not emphasis. **4. The Zoom Punch.** A sudden 15-30% zoom in or out, timed to a key word or claim. This creates emphasis and urgency. "And the most important thing..." [zoom in slightly] "...is your [first fifteen seconds](/guides/first-30-seconds)." Timing: 2-4 per video, reserved for your most important points. Overuse dilutes impact. **Auditory Interrupts (3 techniques):** **5. The Tone Shift.** Deliberately changing your vocal energy, speed, or pitch. Drop from high energy to quiet intensity for a serious point. Speed up during exciting sections. Slow down and lower your voice for emphasis. Timing: Every 90-120 seconds. This is the most natural pattern interrupt and should happen organically if you're performing your script with genuine emotion. If it's not happening naturally, your delivery is too monotone; practice with more vocal variety. **6. The Sound Cue.** A brief sound effect (whoosh, pop, click, record scratch) that marks a transition or emphasizes a point. Subtle is better than dramatic: the sound should punctuate, not distract. Timing: 3-6 per video, aligned with transitions or key reveals. More than that and the video sounds like a morning radio show. What works: transition swooshes between sections, subtle "pop" sounds on text overlays, brief music stings for reveals. What doesn't: laugh tracks, applause sounds, or any sound effect that makes the viewer conscious of the editing. **7. The Music Shift.** Changing background music energy, mood, or dropping/adding music entirely. Removing background music for a serious moment creates sudden intimacy. Adding upbeat music after a serious section creates relief and energy. Timing: Aligned with section transitions. Music shifts are structural interrupts, not moment-to-moment ones. **Structural Interrupts (4 techniques):** **8. The Micro-Story.** A 20-40 second anecdote or example embedded within a longer section. "Let me give you an example. Last month, I was editing a client's video and noticed their retention cliff at exactly 2:15. When I looked at the script..." Micro-stories are attention magnets because narrative processing is the brain's default mode: we're wired to follow stories. Timing: One per major section (every 2-4 minutes). More than that and the video becomes story-heavy at the expense of actionable content. **9. The Direct Address.** Breaking the fourth wall to speak directly to the viewer about the video itself. "Okay, I know that sounds complicated. It's not. Let me break it down." This creates intimacy and reassurance. It acknowledges the viewer's experience and adjusts to it. Timing: 2-4 times per video, at moments when the content is complex or the viewer might be confused. The direct address serves as a "you're still with me, right?" checkpoint. **10. The Contradiction.** Presenting information that contradicts what you just said. "Everything I just told you about thumbnails? There's one situation where all of it is wrong." This creates a cognitive disruption that demands resolution: the viewer's brain can't comfortably hold the contradiction and must keep watching to resolve it. Timing: 1-3 per video, at major section transitions. This is a high-impact interrupt that becomes manipulative if overused. **11. The Preview Tease.** Briefly referencing something you'll cover later in the video. "I'll show you the exact settings in a minute, but first, you need to understand why they work." This creates an open loop that the viewer must stay to close. Timing: 1-2 per video. More than that and the viewer feels strung along. **Information Interrupts (3 techniques):** **12. The Stat Drop.** An unexpected statistic delivered with no preamble. "78% of viewers who reach 80% of your video will watch until the end." The specificity of a number demands cognitive processing that resets attention. Timing: Every 2-3 minutes, or whenever a section is becoming too abstract. Stats ground abstract concepts in concrete reality. **13. The Comparison Frame.** Reframing your point by comparing it to something unexpected. "Your [YouTube hook](/guides/youtube-hook-examples) is like a job interview. You have about 15 seconds to make a first impression before the person decides whether to keep listening." Comparisons activate analogical reasoning, which is a deeper form of processing than passive listening. Timing: 1-2 per video, for your most important or complex points. **14. The Viewer Challenge.** Posing a specific question or challenge to the viewer. "Before I show you the answer, pause the video and guess what percentage of viewers drop off in the first 30 seconds. I'll wait." This converts passive watching into active participation. Timing: 1-2 per video maximum. More than that and it feels like a quiz show. The question must be genuinely interesting: "what do you think happens when...?" rather than "did you know that...?" ## The Interrupt Sequence: Building a Rhythm Individual interrupts are less important than the sequence. Here's how to build a rhythm that sustains attention without feeling chaotic: **First 60 seconds:** 2-3 interrupts (aggressive). Establish a fast pace that communicates "this video will hold your attention." Use visual interrupts (angle cuts, text overlays) and one structural interrupt (a micro-story or contradiction). **Minutes 1-3:** 1 interrupt per 60-75 seconds. Settle into a rhythm. Alternate between visual and structural interrupts. Don't use the same type twice in a row. **Minutes 3-6:** 1 interrupt per 75-90 seconds. Slightly relax the pace. By now, the viewer is engaged with the content itself and needs fewer artificial attention resets. Use auditory and information interrupts more here; they feel less forced than visual cuts. **Minutes 6+:** 1 interrupt per 60-90 seconds, with a burst of 2-3 interrupts at each major section transition. Section transitions are the highest-risk moments for viewer exits. Stack interrupts at these points: a music shift + an angle cut + a contradiction or tease. **The diminishing returns curve:** Interrupts lose their effect once they stop being interruptions, which happens quickly past the 4th in any 5-minute window. After 4, each additional interrupt adds less attention-reset value and starts to feel hyperactive. If you find yourself needing more than 4 interrupts in 5 minutes to hold attention, the problem is insufficient content, not insufficient interrupts. Consider revisiting your [script structure](/guides/script-structure-guide) instead. **The first minute is the exception to every category pace.** Whatever frequency your category runs at later, the opening 60 seconds carries 2-3 interrupts, in this shape: - **0-5 seconds:** the hook itself, delivered as a verbal interrupt. - **5-15 seconds:** a text overlay repeating the hook's key claim or number. - **15-30 seconds:** an angle change or B-roll cut while you set context. - **30-45 seconds:** back to the primary angle with a second overlay on a number or claim. - **45-60 seconds:** a tone or music shift that marks the move from hook into body. The opening is not a trailer for the video's pacing. It is the video's pacing at its most compressed, and it is the one stretch where the interrupt count does not follow the category guide. After 60 seconds, settle back into the rhythm above. **The self-audit: reading the timing off a video you already published.** Open your last published video in your editor and run five passes: 1. **Drop markers.** Play through and mark every visual or auditory change: angle cut, B-roll, text overlay, zoom, music shift, sound cue. 2. **Measure the gaps.** Flag every gap longer than 90 seconds. Past 90 seconds the current visual stops being new, and those gaps are the first places to add an interrupt. 3. **Count each five-minute window.** Fewer than 3 interrupts in a window reads as static. Four is the working rhythm for most categories, which is one every 75 seconds. Past 4, each addition buys less, so higher counts belong to the fastest categories only, and 9 or more reads as chaos. 4. **Count the first minute.** Fewer than 2 interrupts means the opening is under-produced. More than 5 is overwhelming; scale back to 3. 5. **Check the section transitions.** Every major section change should carry two interrupts within 2-3 seconds of each other: a music shift with an angle cut, a text overlay with a tone change. A 10-minute video usually has 3-5 sections, so expect 2-4 of these pairs. Run the audit on three recent videos and your own numbers show the habit: the same section running long, or an opening that is strong while the conclusion is visually flat. ## The 4 Pattern Interrupts That Actually Hurt Retention Not all commonly recommended interrupts work. Four popular techniques tend to work against [retention](/guides/youtube-retention-drop-diagnosis): **1. The Random Jump Cut.** Jump cuts within a sentence (cutting mid-thought for pacing) are different from angle cuts between thoughts. Mid-sentence jump cuts at high frequency (every 5-10 seconds, "TikTok style") correlated with lower retention on videos over 5 minutes. Why: they create a frenetic energy that's exhausting to watch at longer formats. Viewers disengage not because they're bored but because they're overwhelmed. **2. The Unearned Meme/Sound Effect.** Adding memes, reaction clips, or exaggerated sound effects that don't serve the content. "I added a vine boom after every point." These interrupt attention but don't redirect it back to the content; they redirect it to the meme itself. If the meme is funnier than your content, the viewer remembers the meme and forgets your point. **3. The "Subscribe" Interrupt.** Pausing your content to ask viewers to subscribe and hit the bell. This is the most common mid-video interrupt and it interrupts the content flow. Why: it breaks the content flow with a commercial message. The viewer is in learning mode and you've switched to selling mode. The cognitive dissonance causes disengagement. If you must do a mid-video subscribe ask, embed it within valuable content: "If you want to see the results of this test, subscribe; I'm posting them next Tuesday." **4. The Energy Spike.** Suddenly and dramatically increasing your energy level ("AND THE NEXT TIP IS ABSOLUTELY INCREDIBLE!!!"). Artificial enthusiasm triggers the viewer's BS detector. If the energy level of the interrupt doesn't match the value of the content that follows, the viewer loses trust. Low-trust viewers leave. ## Category-Specific Interrupt Strategies Different content categories need different interrupt profiles: | Category | Optimal frequency | What counts as an interrupt | | --- | --- | --- | | Tutorial / How-To | Every 60 seconds | Screen recordings of each step, numbered step overlays, diagram transitions, before/after comparisons, zooms on a specific UI element | | Product review | Every 45-60 seconds | Product close-ups, spec overlays, comparison split-screens, screen recordings of the product in use, price text punches | | Commentary / Essay | Every 75-90 seconds | Angle changes, text overlays on key claims, relevant image inserts, tone shifts, jump-cut tightening | | Gaming / Reaction | Every 30-45 seconds | Camera angle changes, zooms, sound effects, meme inserts, text overlays, replay cuts, facecam resize | | Storytime / Vlog | Every 90-120 seconds | Slow Ken Burns zooms, subtle color shifts, ambient music changes, soft B-roll that matches the story's mood | **Tutorials:** Heavy on visual interrupts (screen recordings, demonstrations, text overlays). Light on structural interrupts (the content itself provides structure). [Tutorial viewers](/guides/youtube-tutorial-scripts) are in learning mode; they need visual variety to stay engaged but don't need narrative tricks. **Commentary/Essay:** Heavy on structural interrupts (contradictions, micro-stories, comparison frames). Light on visual interrupts (most essay channels are talking-head). Essay viewers are in thinking mode; structural interrupts match their cognitive state. **Product Review:** Heavy on b-roll bridges (showing the product) and information interrupts (stats, comparisons). Review viewers are in evaluation mode; they need constant new information to maintain interest. **Gaming:** Heavy on visual interrupts (gameplay cuts, highlights) and auditory interrupts (tone shifts, sound cues). Gaming footage is already visually busy, so the script has to work harder to stay distinct from it. **Storytime/Vlog:** Heavy on structural interrupts (micro-stories within the main story, tone shifts) and minimal visual interrupts. Story viewers are in narrative mode; too many visual interrupts break immersion. The table above is the lookup; the paragraphs are the reasoning behind it. Frequencies inside a category still flex with the section: a slow explanation can hold a longer gap than a fast montage in the same video. And if you film with one camera and no B-roll, [six of these techniques still work](/blog/pattern-interrupts-no-broll) with nothing but a crop tool and free software. ## FAQ Q: How many pattern interrupts should I use per video? A: For a 10-minute video: 8-12 total, with 2-3 concentrated in the first minute and the rest distributed at 60-90 second intervals. More than 15 in a 10-minute video risks feeling hyperactive. Fewer than 6 risks monotony. Q: Do I need to plan pattern interrupts during scripting? A: Plan the structural interrupts (contradictions, micro-stories, tease previews) during scripting. Visual and auditory interrupts are better added during editing when you can see the natural rhythm of the footage. In your script, mark sections over 200 words with a [VISUAL BREAK] note to remind yourself during editing. Q: My content is talking head with no b-roll opportunity. How do I add visual variety? A: Three options: (1) zoom punches, a 15-30% zoom in/out at key moments; (2) text overlays, putting key numbers and terms on screen; (3) multiple camera angles, where even a webcam as a second angle provides visual change. You don't need cinematic b-roll; you need visual change. Q: Can pattern interrupts compensate for weak content? A: No. Pattern interrupts maintain attention for strong content. They cannot create interest in weak content. If your video isn't delivering value, interrupts will just make it feel like a flashy but empty video. Fix the content first, then add interrupts. --- # How to Diagnose and Fix a YouTube Retention Drop URL: https://prepublish.ai/guides/youtube-retention-drop-diagnosis Updated: 2026-03-05 TL;DR: YouTube retention drops follow 8 identifiable patterns, each with a specific cause and a specific fix. This guide shows you how to read your retention graph like a diagnostic tool, trace each drop to the exact script-level problem that caused it, and fix the underlying issue in your future videos. ## Your Retention Graph Is a Diagnostic Tool Most creators look at their [retention graph](/guides/youtube-retention-guide), see it going down, and think "my video isn't holding viewers." That's like looking at an X-ray and concluding "the bone is in there." True, but useless. Your retention graph is more than a performance metric: it's a diagnostic instrument that tells you exactly what's wrong and where. Every shape, dip, spike, and cliff corresponds to a specific problem (or success) in your video. Once you learn to read the shapes, you can trace every retention drop to its root cause and fix it in future videos. This matters because most retention advice is generic: "make better hooks," "add [pattern interrupts](/guides/youtube-pattern-interrupts)," "keep your energy up." These are guesses, not diagnoses. You wouldn't take medication without knowing what's wrong with you. You shouldn't change your video strategy without knowing what's wrong with your retention. ## How to Access and Read Your Retention Data In YouTube Studio, go to Analytics → Content → click on any video → Engagement tab → Audience Retention. You'll see two things: **1. Average percentage viewed.** This is your headline number. Category benchmarks: - 50%+: Excellent (top 10% for most categories) - 40-50%: Good (above average) - 30-40%: Below average - Under 30%: Problem **2. The retention curve.** This is where the real information lives. The x-axis is your video timeline. The y-axis is the percentage of viewers still watching at that point. The curve always starts at 100% (everyone who clicked play) and trends downward. YouTube also shows you two additional views: - **Relative audience retention:** How your video compares to YouTube's average for videos of similar length. Sections above the line are outperforming; sections below are underperforming. - **Key moments for audience retention:** YouTube highlights specific moments: "intro" (where new viewers start watching), "top moments" (spikes from rewatches or shares), and "dips" (where viewers leave). For diagnostic purposes, you want the absolute retention curve + the key moments overlay. ## The 8 Retention Curve Patterns **Pattern 1: The Cliff and Slide (34% of underperforming videos)** Shape: A steep drop (15-30% of viewers) within the [first 30 seconds](/guides/first-30-seconds), followed by a gradual, steady decline. Cause: Weak hook. The video doesn't deliver value, create curiosity, or establish stakes quickly enough. Viewers click, see it's not immediately interesting, and leave. Diagnostic question: "Does my script deliver its first piece of substantive value within 15 seconds?" Fix: Rewrite your [hook](/guides/youtube-hook-examples) using the Hook Trident (Spike → Proof → Stakes). Cut all preamble: no greetings, no "in this video I'll," no context-setting before the hook. Start with your most compelling claim or result. Benchmark: If your first 30 seconds retains less than 70% of viewers, your hook is the problem. A strong hook retains 80-90% through the first 30 seconds. **Pattern 2: The Early Plateau (12% of underperforming videos)** Shape: Steep initial drop in the first 10-15 seconds, then the curve flattens out and holds relatively steady for the rest of the video. Cause: Title/thumbnail mismatch. Your title and thumbnail attracted viewers who aren't your target audience. They click, realize the content isn't for them, and leave immediately. But the viewers who stay are well-matched and engaged. Diagnostic question: "Did viewers who clicked expect the same content I delivered?" Fix: This is a packaging problem, not a content problem. Your video is fine for the right audience. Either adjust your title/thumbnail to accurately represent your content, or accept that a portion of clicks will always come from mismatched viewers. Do NOT change your content to match a misleading title; that makes the problem worse. **Pattern 3: The Valley (18% of underperforming videos)** Shape: Moderate initial drop, then a significant dip between 25-40% of video length, then partial recovery. Cause: Missing re-engagement moment. Your hook's momentum carried viewers into the video, but between 25-40% of the way through, there's no new reason to keep watching. Viewers drift away during this "dead zone." Diagnostic question: "Is there a deliberate re-engagement moment (stakes escalation, open loop, perspective shift) at approximately 25-30% of my script?" Fix: Add a re-engagement moment at the 25% mark. One sentence is enough: "But here's where this gets really interesting..." / "Everything I just told you has a major caveat..." / "Now forget the theory. Here's what actually happened when I tested this." **Pattern 4: The Step-Down (15% of underperforming videos)** Shape: Discrete drops at regular intervals (like stair steps), with flat or slow-decline sections between them. Cause: Weak transitions between sections. Each step-down occurs at a topic change or section boundary. The transitions are additive ("Next...," "Also...," "Moving on...") rather than adversative, giving viewers an exit ramp. Diagnostic question: "Are my transitions creating forward momentum, or are they announcing section changes?" Fix: Replace every additive transition with an adversative one. Transform "The next tip is..." into "But this only works if you also..." and "Moving on to..." into "Now, here's where most people make a critical mistake..." Every section boundary should pull the viewer forward, not release them. See our [script structure guide](/guides/script-structure-guide) for more on effective transitions. **Pattern 5: The Slow Bleed (8% of underperforming videos)** Shape: No sharp drops, but a steady, consistent decline that results in very low final retention (under 20%). Cause: Low information density. The video isn't actively bad at any point, but it's not delivering enough value per minute to justify continued watching. The viewer slowly loses the feeling that staying is worth their time. Diagnostic question: "Does every 100-word section of my script introduce 1-2 new concepts, or am I repeating and restating?" Fix: Increase information density. Cut redundant examples, remove restated conclusions, and eliminate filler transitions. Each minute should deliver at least one new insight, example, or actionable tip. The viewer should never feel "I'm not learning anything new." **Pattern 6: The Mid-Video Cliff (5% of underperforming videos)** Shape: Decent retention through the first half, then a sudden, sharp drop (10-20%) at a specific point. Cause: A specific content problem at that timestamp. Common culprits: an off-topic tangent, a controversial opinion that alienates part of the audience, a sudden shift in tone or topic that feels jarring, or a section that's dramatically less interesting than what preceded it. Diagnostic question: "What happens at the exact timestamp where the cliff occurs? Is there a topic shift, tone change, or quality drop?" Fix: Watch your video at the cliff timestamp. The problem is usually obvious once you look. Either cut the offending section, smooth the transition, or restructure so the jarring element is prepared for and expected by the viewer. **Pattern 7: The Rewatch Spike (an opportunity, not a problem)** Shape: A spike in the curve where retention temporarily goes above the trend line (or even above 100% if viewers are rewatching that section). Cause: A moment that's highly valuable, surprising, entertaining, or complex enough that viewers watch it multiple times. These are your best moments. Diagnostic question: "What made this moment so compelling that viewers replayed it?" Action: Study your spikes. They tell you what your audience values most. Do more of whatever caused the spike. If the spike is on a demonstration, do more demonstrations. If it's on a specific type of humor, lean into that. Spikes are your audience telling you what they want. **Pattern 8: The End Drop (common, often fixable)** Shape: Reasonable retention throughout, then a sharp drop in the final 10-15% of the video. Cause: Weak ending. The video's conclusion is either a summary of what was already said (viewer already has this information, so there's no reason to stay), a drawn-out outro, or an abrupt stop. Diagnostic question: "Does my final section deliver new value, or just summarize?" Fix: Add a "one more thing": a genuine bonus insight, tip, or perspective that the viewer wouldn't predict from the rest of the video. Make them feel rewarded for staying to the end. And keep your outro tight: 20 seconds maximum. ## The Diagnostic Workflow Here's the exact process for diagnosing and fixing retention problems across your videos: **Step 1: Collect your data.** Pull up the retention curves for your last 10 videos. For each one, identify: - Average percentage viewed - The shape pattern (which of the 8 patterns does it most resemble?) - The timestamp of each significant drop (more than 5% within 30 seconds) - Any rewatch spikes **Step 2: Find your recurring pattern.** Most creators have one or two patterns that repeat across most of their videos. Maybe 7 out of 10 videos show Pattern 1 (Cliff and Slide); that means your hook strategy needs an overhaul, not just one-off fixes. Maybe 6 out of 10 show Pattern 4 (Step-Down); that means your transitions are a systematic weakness. **Step 3: Fix the systemic issue first.** Don't try to fix everything at once. Identify the single pattern that appears most frequently and address its root cause in your next 3-5 videos. Measure whether the pattern improves. **Step 4: Re-evaluate after 5 videos.** Pull the retention data again. Has your most common pattern improved? If yes, move to the next most frequent pattern. If no, the fix isn't working; dig deeper into the specific cause. **Step 5: For each new video, do a pre-publish check.** Run your script through analysis before recording. Look specifically for the conditions that cause your recurring pattern. If you typically show Pattern 3 (Valley), check that your script has a re-engagement moment at 25%. If you show Pattern 1 (Cliff and Slide), verify that your hook delivers value within 15 seconds. This prevents the pattern from reappearing before you've invested production time. [Try Prepublish](/upload) to catch these issues before recording. ## When Retention Problems Aren't Script Problems Not all retention issues come from the script. Here's how to tell: **Production-caused drops:** If the retention drop corresponds to a sudden audio quality change, a visual glitch, an awkwardly long pause, or a section where your energy clearly drops, the script may be fine, but the execution isn't. These drops are usually isolated to specific videos rather than repeating across your catalog. **Topic-caused drops:** If your retention is consistently higher or lower on certain topics regardless of script quality, the issue is topic selection, not scripting. Some topics inherently attract more committed viewers. Check whether your low-retention videos cluster around specific topics. **External-caused drops:** If a normally high-retention video shows an unusual pattern, check if it was featured on Reddit, Twitter, or another platform. External traffic often brings less-targeted viewers who click away faster, creating artificial retention dips that don't reflect your content quality. The rule of thumb: if a retention pattern appears in 3+ videos, it's structural (script or process). If it appears in only 1-2 videos, it's likely execution or situational. ## FAQ Q: What's a "good" retention percentage? A: It depends on your content category and video length. For most categories, 40-50% average retention is good and 50%+ is excellent. Longer videos naturally have lower absolute retention percentages but can still outperform shorter videos in total watch time. Compare your retention to YouTube's "relative audience retention" metric, which benchmarks against similar-length videos. Q: My retention is fine but my views are low. Is retention still the problem? A: Possibly not. If your retention is above 40% but views are low, the issue is likely discoverability (SEO, titles, thumbnails, topic selection) rather than content quality. Retention is the primary algorithmic signal, but the algorithm can only promote videos that get initial impressions, and initial impressions come from search, browse, and click-through rate. Q: Should I delete videos with bad retention? A: Almost never. Old low-retention videos have minimal impact on your channel's current algorithmic performance; YouTube evaluates each video independently. The only exception: if a video is actively misleading, outdated with harmful information, or you've pivoted your channel and old content attracts the wrong audience. Q: How quickly should I expect retention to improve after making changes? A: You should see measurable improvement within 3-5 videos if you've correctly identified the pattern and applied the right fix. If your average retention doesn't improve at all after 5 videos of deliberate effort, either the diagnosis was wrong or the fix isn't addressing the root cause. --- # The Psychology of YouTube Watch Time: Why Viewers Stay or Leave URL: https://prepublish.ai/guides/youtube-watch-time-psychology Updated: 2026-09-21 TL;DR: Viewer retention is driven by specific cognitive mechanisms. This guide covers 10 of them (curiosity gaps, cognitive load theory, sunk cost escalation, the Zeigarnik effect, information gap theory, social proof signaling, self-relevance bias, the peak-end rule, hedonic adaptation, and the paradox of choice), names the primary source behind each one, and ends every section with the script check it implies. Mechanisms without a source are described qualitatively rather than given a multiplier. ## Attention Is a Decision, Not a Resource Most YouTube advice treats attention as a depletable resource: viewers have a limited amount and your job is to use it before it runs out. This model is wrong and leads to bad strategy. Attention is not a resource. It is a continuous decision. Every second, the viewer's brain is running a subconscious cost-benefit analysis: "Is staying more rewarding than the alternatives?" The alternatives are their phone, another video, closing the tab, or doing literally anything else. Your video does not "run out" of viewer attention. It loses the cost-benefit comparison. Every second the viewer stays, the threshold for what counts as "rewarding enough" increases slightly, because the alternatives become more tempting over time. Your script's job is to keep the reward value above that rising threshold. This reframe matters because it changes your strategy. You are not trying to "hold" attention (passive, defensive). You are trying to continuously win the next second (active, dynamic). Different approaches, different scripts. Here are 10 psychological mechanisms that influence this ongoing decision. Understanding them lets you write scripts that consistently win the comparison. Each principle below names its primary source and links it where one exists, and each one ends with the script check it implies. Where no primary source supports a number, the number is not on this page. ## Principle 1: The Curiosity Gap **The mechanism:** When the brain notices a gap in what it knows, it enters a state of deprivation that motivates the search for the missing piece. Loewenstein described curiosity as a "cognitively induced deprivation that arises from the perception of a gap in knowledge or understanding," and that is the mechanism a curiosity gap uses ([Loewenstein, "The psychology of curiosity: A review and reinterpretation," Psychological Bulletin, 1994](https://doi.org/10.1037/0033-2909.116.1.75)). While the question is open, the viewer has a reason to keep watching. **How it applies to YouTube scripts:** Creating a curiosity gap takes more than asking a question. It requires a specific knowledge asymmetry where the viewer knows enough to be curious but not enough to be satisfied. Too little information and they are not curious. Too much and the gap closes, because they can guess the answer themselves. Three levels of curiosity gap: *Surface gap:* "What happens next?" (the weakest) *Predictive gap:* "I think I know the answer, but I am not sure" (moderate) *Explanatory gap:* "I know the what, but I do not understand the why" (the strongest) The explanatory gap carries the most, because closing it requires understanding rather than information. The viewer cannot close it by guessing. **Script application:** Your [hook](/guides/youtube-hook-examples) should create an explanatory gap rather than a surface gap. Compare: Surface gap: "I discovered something surprising about YouTube thumbnails." (The viewer may not care enough to wait.) Predictive gap: "The highest click-through thumbnails I tested all had one element in common, and it is not what you would expect." (The viewer forms a prediction and wants to verify it.) Explanatory gap: "I removed every best practice from my thumbnails. No face, no text, no bright colors. Here is the cognitive science behind why that worked." (The viewer knows the result but needs the mechanism.) **Script check:** Does your opening name a result the viewer cannot explain, and does the script deliver the explanation later? If the opening only asks a question, rewrite it as a claim. Paste the opening into the [hook analyzer](/tools/youtube-hook-analyzer) and read whether the gap it reports is specific or vague. ## Principle 2: Cognitive Load Theory **The mechanism:** Working memory is limited. It can hold and process only a few novel elements at once, and material that exceeds that limit leaves the viewer unable to build the mental model that would make it stick. That limit is the foundation of cognitive load theory ([Sweller, "Cognitive load during problem solving: Effects on learning," Cognitive Science, 1988](https://doi.org/10.1207/s15516709cog1202_4); [Sweller, van Merriënboer and Paas, "Cognitive architecture and instructional design: 20 years later," Educational Psychology Review, 2019](https://doi.org/10.1007/s10648-019-09465-5)). **How it applies to YouTube scripts:** Every new concept, term, example or instruction in your script adds to the viewer's load. The load resets partially when you move to a distinct topic, because the viewer can file the previous section away. Inside a section, each additional concept stacks on the last. That gives three broad states: *A comfortable section:* the viewer follows without effort and feels competent. Sustained for too long, the content starts to feel thin. *A working section:* the viewer is keeping up, but the effort is visible. This is where most educational content does its best work. *An overloaded section:* the viewer falls behind and stops trying. The failure is easy to misread, because the viewer often concludes the content was too advanced when the real problem was density. **Script application:** Density is easier to see in a count than in a read. Take one section and count the ideas a viewer meets for the first time. If you need two hands, split the section or cut the least essential idea. Cognitive load management techniques in scripts: - **Breathing sentences:** "Let that sink in." / "This is important." These add no information but give the brain processing time. - **Repetition through reframing:** Saying the same concept a second time with a different analogy or example. This reinforces existing processing without adding load. - **Sequential revelation:** Instead of presenting several concepts at once, present them one at a time with a beat between each. - **Summary anchors:** "So we have three things so far: [brief recap]." This organizes working memory and reduces the feeling of overload. **Script check:** Read one section aloud and mark every idea the viewer meets for the first time. If the marks land in a cluster, the section needs a split. The full-draft version of this pass, including how flagged sections are reported, is in [check your YouTube script before recording](/guides/check-youtube-script-before-recording). ## Principle 3: Sunk Cost Escalation **The mechanism:** The more time a viewer has already invested in your video, the less willing they are to abandon it, even though the time already spent is gone either way. The behavior is not rational and it is very consistent. Psychologists call it the sunk cost fallacy. For a script, it is a resource. **How it applies to YouTube scripts:** Investment accumulates. Early in a video the viewer has spent nothing, so leaving costs nothing. Once they have watched a stretch of the video and followed a thread of argument, leaving means writing off the attention they already paid. That is why the opening is the hardest part of the video to survive and why later sections can carry more weight. You can make the investment visible with progress markers. "We have covered three of the five factors; the next one is the most important" tells the viewer that a structure exists and that they are partway through it. Numbered formats do this automatically: "we are on step 3 of 7" gives the viewer a position on a path, and abandoning a path in progress feels worse than never starting one. **Script check:** Does the middle of your script tell the viewer where they are in the sequence and what remains? If a viewer cannot answer "how far in am I?", they have nothing invested to lose. The structural fixes for the middle of a video are covered in the [increase watch time guide](/guides/increase-youtube-watch-time). ## Principle 4: The Zeigarnik Effect **The mechanism:** Interrupted tasks stay in memory better than completed ones. In Zeigarnik's experiments, participants who were interrupted partway through a series of tasks recalled the unfinished ones roughly twice as often as the finished ones, and the recall advantage held across the individual, group and child samples she tested ([Zeigarnik, "On finished and unfinished tasks," Psychologische Forschung, 1927, English translation](https://gwern.net/doc/psychology/willpower/1927-zeigarnik.pdf)). An unresolved question behaves like an unfinished task. It stays active until it is closed. **How it applies to YouTube scripts:** The Zeigarnik effect is the mechanism behind open loops and preview teases. When you say "I will explain why this works in a moment," you have created an incomplete task. The viewer holds it until it resolves. **Script application:** Plan open loops at three points: *The hook loop:* opened in the opening and resolved before the conclusion. "I discovered something that changed my entire approach to YouTube. I will show you exactly what it was." *The mid-video loop:* opened as the body starts and resolved across the middle. "The reason this works is counterintuitive, and I will show you the data in a minute." *The end loop:* opened late in the body and resolved in the final section. "But there is one more thing I have not mentioned, and honestly, it might matter more than everything else combined." **Critical rule:** Every loop has to be resolved. An unresolved loop is worse than no loop at all, because the viewer leaves holding a question the video never answered, and that is the note they remember. Keep the number of concurrent loops small. A couple of open questions at once give the viewer two threads to follow. Several at once turn attention into confusion, which is the same overload failure described in Principle 2. **Script check:** List every question your script opens and the place each one closes. Any question without a closing line is a defect. The [pattern interrupt guide](/guides/youtube-pattern-interrupts) covers where the mid-video loop does its best structural work. ## Principle 5: Information Gap Theory (Loewenstein) **The mechanism:** Curiosity peaks when the viewer knows enough about a topic to notice that something is missing, and not enough to fill the gap themselves. Below that threshold there is no framework for the question to attach to, so there is no curiosity. Above it, the answer is inferable and curiosity dissipates. This is the information gap account of curiosity ([Loewenstein, Psychological Bulletin, 1994](https://doi.org/10.1037/0033-2909.116.1.75)). **How it applies to YouTube scripts:** This is why your opening needs to supply some information rather than only asking for it. "Do you know the best time to post on YouTube?" gives the viewer nothing to be curious with. "Most creators post at the same time of day, and the schedule is working against them" supplies a framework and then puts a hole in it, which is what curiosity attaches to. **Script application:** For each major point in your script, follow the Loewenstein sequence: 1. Establish what the viewer likely already knows (the framework) 2. Reveal that something inside that framework is wrong, missing or incomplete (the gap) 3. Fill the gap with your insight (the resolution) This is subtly different from simply presenting information. You activate what the viewer already believes, disrupt it, then repair it. The disruption is where the curiosity lives. Example: Framework: "You have probably heard that thumbnails should use bright colors and large text." Gap: "The strongest thumbnails in our breakdowns rarely do either. Several of the highest performers use no text at all and a muted palette." Resolution: "Thumbnail strategy has shifted from standing out in a grid to standing out against one specific competing thumbnail, and that changes which colors help." **Script check:** Mark where each section establishes a framework, where it breaks it, and where it repairs it. A section that only adds information has no gap to hold the viewer. To see whether an opening gives the viewer enough to be curious about, run it through the [hook analyzer](/tools/youtube-hook-analyzer). ## Principle 6: Self-Relevance Bias **The mechanism:** Information about the viewer is processed more deeply than information about other people, which makes it easier to act on and easier to remember afterwards. That asymmetry is why the same advice lands harder when it is framed around the viewer's own situation than when it is framed in general terms. **How it applies to YouTube scripts:** Every time your script connects the content to the viewer's situation, it stops being a general claim and becomes a claim about them. "This technique works well" is general. "If you are a creator with a small channel, this changes your next five videos" is about the person watching. The second version gives them a reason to keep listening that has nothing to do with the topic. **Script application:** Three self-relevance techniques: *Situation mirroring:* Describe the viewer's current situation accurately. "You have been posting for six months. The videos get a few hundred views. The content is good, and the algorithm does not seem to care." If this matches their reality, every sentence after it carries more weight. *Outcome projection:* Show the viewer what changes for them. "After you apply this, your next opening will carry the claim in the first line, and you will be able to see the difference in your own retention report for the sections that follow." Describe what they will notice, not a number you cannot know. *Identity framing:* Connect the content to who the viewer wants to be. "Professional creators do not wing their scripts. They plan them." This makes the content a step toward the identity the viewer is already reaching for. Place the applications where the script changes direction: the start of a section, the sentence after a claim, the move into an example. A script written throughout in second person does this without needing a quota. **Script check:** Read the draft and mark every paragraph that is about the viewer rather than about the subject. A long unmarked stretch is a stretch where the viewer has no personal stake. The drafting side of this, including where second person pays off most, is covered in the [increase watch time guide](/guides/increase-youtube-watch-time). ## Principle 7: The Peak-End Rule **The mechanism:** People judge an experience by a small number of its moments rather than by its total length. In the experiments that established duration neglect, evaluations of pleasant and unpleasant episodes depended on the peak and the ending, while duration contributed little, and the effect grew when the judgement was made from memory ([Fredrickson and Kahneman, "Duration neglect in retrospective evaluations of affective episodes," Journal of Personality and Social Psychology, 1993](https://pubmed.ncbi.nlm.nih.gov/8355141/)). **How it applies to YouTube scripts:** Viewers judge your video by its most compelling moment and by how it ends. A video with one genuinely strong insight and a well-built ending will be remembered and shared more than a video that is uniformly competent but has no peak and trails off. **Script application:** Design for the peak and the ending: *The peak:* identify the single most valuable, surprising or emotionally resonant moment in the script, then give it more attention than the rest: more evidence, a stronger setup, a pause before the reveal. Place it late in the body rather than in the final seconds, because the final seconds are where the ending evaluation happens, not the peak. *The ending:* the "one more thing" close does double duty here. It rewards the viewer who stayed and it leaves the end evaluation at its strongest point. A video that finishes with "anyway, that is all for today" leaves the end evaluation at its weakest. The practical implication: the middle of your script does not have to be as strong as the peak and the ending. It still should not be bad, but the creative energy belongs at the peak and at the close. **Script check:** Name the peak of your script out loud. If you cannot name it, the draft does not have one and the ending is carrying the whole evaluation. The check that reads the structure around the peak and the close is in [check your YouTube script before recording](/guides/check-youtube-script-before-recording). ## Principle 8: Hedonic Adaptation **The mechanism:** The brain adapts to consistent input. What registers as exciting at the start becomes the new normal, and then becomes background, not because anything changed but because expectations were recalibrated. Hedonic adaptation is the reason "just be engaging" fails as a sustained strategy: the viewer adapts to whatever the video is doing and stops registering it. **How it applies to YouTube scripts:** If a video holds the same energy, pace, tone and format for a long stretch, the viewer adapts and engagement drops, regardless of how good the content is. A uniformly high-energy video becomes fatiguing. A uniformly calm and measured video becomes background noise. **Script application:** Vary deliberately across three dimensions: *Energy variation:* Alternate between high-energy sections (excited delivery, fast pacing, bold claims) and lower-energy sections (measured analysis, careful explanation, quiet emphasis). Each shift resets the baseline the viewer adapted to. *Format variation:* Alternate between delivery modes: direct instruction, storytelling, data presentation, viewer questions, demonstrations. Each mode change asks the viewer to process something new. *Emotional variation:* A script that is uniformly positive ("this is great, and this is also great, and here is another great thing") becomes predictable. Introduce contrast: moments of challenge, failure, uncertainty or self-criticism make the positive moments land harder. The [pattern interrupt](/guides/youtube-pattern-interrupts) model is the applied version of this principle. Our published cadence puts the sweet spot at one interrupt every 60 to 75 seconds, which is the rhythm the model uses to reset adaptation. **Script check:** Read the section list of your draft and mark the energy, format and emotional tone of each one. A run of consecutive marks that are identical is where adaptation sets in. The cadence fixes for that run are in the [pattern interrupt guide](/guides/youtube-pattern-interrupts). ## Principles 9 & 10: Social Proof and Paradox of Choice **Principle 9 (Social Proof Signaling):** People use other people's behavior as a shortcut when deciding whether something is worth their time. When a script reports what happened with real people, "when I shared this with my audience, the most common response was," it tells the viewer that others found the material worth their attention. Script application: use social proof you can actually point at. Audience replies, the themes that keep appearing in your comments, a technique your own viewers have reported back on. Name the source of the proof so it can be checked. If you have no proof to point at, say nothing and let the material speak. **Principle 10 (Paradox of Choice):** When a viewer is offered too many directions at once, the decision of what to attend to becomes work, and disengagement is the cheap way out. Videos that promise "everything you need to know" tend to fail for this reason: the scope itself is the problem. Script application: narrow aggressively. "Five ways to improve retention" outperforms "the complete guide to YouTube retention," because a bounded set can be held at once. Even inside a large topic, frame the video as a curated selection rather than an exhaustive survey. **Script check:** Write your video's scope as a single sentence with a visible boundary: what the viewer will and will not get. If the sentence needs the word "everything," cut until it does not. The structural version of the scope check is in [check your YouTube script before recording](/guides/check-youtube-script-before-recording). ## Putting It All Together: The Attention Architecture The ten principles combine into one architecture. Read it as the shape of a body, not a schedule: **The opening:** create an explanatory curiosity gap (Principle 1) and establish self-relevance (Principle 6). The viewer should think "I need to understand this because it affects me." **The first stretch after the opening:** hold the curiosity gap open while keeping the cognitive load at a level the viewer can carry (Principle 2). Open one secondary loop with the Zeigarnik effect (Principle 4) and start the information gap sequence for the first point (Principle 5). **Early body:** investment starts working for you (Principle 3). This is the window for depth: raise the density now that the viewer has something to lose by leaving. **Middle sections:** fight hedonic adaptation (Principle 8) with deliberate variation in energy, format and emotion. Use social proof where you have real evidence for it (Principle 9). Keep self-relevance active (Principle 6) so the material stays about the viewer. **Later body:** build toward the peak moment (Principle 7) and resolve the primary curiosity gap. By this point the viewer has enough invested that dense material will carry. **The close:** deliver the peak, then the "one more thing" ending, so the end evaluation lands high (Principle 7). Resolve every open loop (Principle 4). Keep the scope narrow to the final line (Principle 10). This is a framework, not a formula. The implementation depends on your topic, your style and your audience. [Try Prepublish](/upload) to see how a draft aligns with these principles before you record. ## FAQ Q: Do I need to understand psychology to make good YouTube videos? A: No. Many creators apply these patterns intuitively. What the mechanisms give you is a way to diagnose. If a dip in the middle of a video is an overloaded section, the fix is a split or a cut. If it is a closed loop, the fix is to open one earlier. Without the mechanism, the fixes are guesses. Q: These principles seem manipulative. Is that ethical? A: These principles describe how attention works. Using them to deliver real value is effective communication. A teacher who says "we will come back to this surprising result once we understand the foundation" is using the Zeigarnik effect to teach. Manipulation is using the same techniques to hold people inside content that wastes their time. Q: Which principle has the biggest impact? A: The curiosity gap, because it operates from the first line and everything else depends on the viewer still being present. Cognitive load management is the next most useful, because overload is the most common failure in a middle section and the easiest one to see when you count the new ideas in a section. --- # YouTube Tutorial Scripts: Why Most Tutorials Lose Viewers (And How to Fix It) URL: https://prepublish.ai/guides/youtube-tutorial-scripts Updated: 2026-03-05 TL;DR: Tutorials are YouTube's largest content category by volume, with a unique retention challenge: viewers come with a specific goal (learn X) and leave the moment they believe they've achieved it or concluded they won't. This guide covers the 6 structural mistakes that cause tutorial viewers to leave, with the specific script-level fix for each, including the Context Trap, the Wall of Steps, the Missing Milestone, and 3 others. ## Tutorial Viewers Are Different Tutorial viewers are fundamentally different from viewers of any other YouTube content category. They have a specific goal. They didn't click because they were browsing and your thumbnail looked interesting. They clicked because they need to know how to do something, and they believe your video will teach them. This creates a unique [retention](/guides/youtube-retention-guide) dynamic with both advantages and challenges: **The advantage:** Tutorial viewers are motivated. They won't leave because they're "bored"; they'll stay as long as they believe the video is progressing toward their goal. You don't need entertainment tricks to hold their attention. You need clear progress. **The challenge:** Tutorial viewers are impatient. They have a low tolerance for anything that isn't directly advancing them toward their goal. Context-setting, background information, creator introductions, and tangential explanations are all perceived as delays. They'll tolerate them briefly, but not for long. **The critical dynamic:** Tutorial viewers evaluate your video on a single criterion: "Am I learning what I came to learn, at an acceptable pace?" Every second, they're assessing whether the rate of useful instruction justifies their continued time investment. The moment the rate drops below their threshold, they leave, either to try another tutorial or to attempt the task without guidance. This means the standard retention toolkit (curiosity gaps, storytelling, cliffhangers) is less effective for tutorials than for other formats. Tutorial viewers don't need to be intrigued. They need to be taught, efficiently and clearly. ## Mistake 1: The Context Trap **The problem:** Starting the tutorial with background context, history, or explanation of why the viewer should care about the topic. Example: A tutorial titled "How to Set Up a Three-Point Lighting Setup" that spends the first 2 minutes explaining the history of three-point lighting, why good lighting matters, and what the three points are conceptually, before showing the viewer a single setup step. **Why it kills retention:** The viewer already cares; that's why they clicked. They don't need to be convinced that lighting matters. They need to be shown how to set it up. Every second of context is a second they're not learning what they came to learn. **The data:** 44% of tutorial viewers who leave do so during the context/background section. The median exit point for these viewers is 73 seconds: just over a minute of watching without receiving actionable instruction. **The fix: Lead with the first step.** Open your tutorial by immediately demonstrating or explaining the first step. "Step one: position your key light at a 45-degree angle from your subject, about 3 feet away and slightly above eye level." The viewer is now learning. They're engaged because the instruction has started. Context can come later, after you've established that this tutorial delivers. Embed context within instruction: "Position the key light at 45 degrees; this angle creates the shadows that give your face dimension on camera" provides the same context but within an actionable instruction rather than as a preamble. **The rule:** First actionable instruction must appear within 60 seconds. Within 30 seconds is better. Within 15 seconds is ideal. For more on nailing your opening, see our guide on [the first 30 seconds](/guides/first-30-seconds). ## Mistake 2: The Wall of Steps **The problem:** Presenting a long sequence of steps (7+) without any intermediate results or validation points. The viewer works through steps 1-4 and has no idea if they're on track. **Why it kills retention:** Tutorial viewers need confidence that they're progressing correctly. Without intermediate results, uncertainty accumulates. By step 5 of 10, the viewer is thinking "Did I do step 2 right? I'm not sure. What if I've been doing this wrong the whole time and I'll have to start over?" This uncertainty creates anxiety, and anxious viewers leave. **The data:** Tutorials that show intermediate results after every 2-3 steps retain 27% better than tutorials that show results only at the end. The improvement is specifically in the middle third of the video: the section where uncertainty-driven exits are highest. **The fix: Add milestone check-ins every 2-3 steps.** After every 2-3 steps, show what the viewer should have at this point: "If you've done steps 1-3 correctly, your screen should look like this." Or: "At this point, your lighting should look roughly like this. Don't worry if it's not perfect, we'll refine in the next step." Milestone check-ins serve three purposes: 1. They validate the viewer's progress (reducing anxiety) 2. They provide natural breathing points (reducing cognitive load) 3. They create micro-completions (triggering sunk cost commitment) ## Mistake 3: The Assumed Knowledge Gap **The problem:** Using terms, tools, or concepts without checking whether the viewer knows them. The viewer hits a term they don't understand, feels lost, and leaves. **Why it kills retention:** Tutorial viewers come from a wide range of skill levels. A tutorial titled "How to Color Grade Your YouTube Videos" might attract complete beginners who've never opened color grading software and intermediate editors who just want a specific technique. If you assume intermediate knowledge, you lose the beginners. If you explain everything from scratch, you bore the intermediates. **The fix: The bracket technique.** When you use a term that might not be universal, add a brief clarification in a parenthetical: just enough context for a beginner without boring an intermediate. Examples: "Adjust your white balance (the setting that controls whether your image looks warm/orange or cool/blue)..." "Open the LUT folder (LUTs are preset color adjustments; think of them as Instagram filters for video)..." Each bracket adds 5-10 seconds. But those 5-10 seconds prevent a percentage of viewers from feeling lost and leaving. The intermediate viewers don't mind the brief clarification; they mentally skip it. You do not have to guess which terms need a bracket. The people who got lost usually said so underneath the video. Run your channel through the [Comment Miner](/tools/youtube-comment-miner) and read the groups labeled as questions: those are the exact steps where your last tutorial assumed too much. For longer explanations that a beginner might need, say: "If you're new to this tool, I have a complete setup guide linked in the description. For now, you just need to know that..." This acknowledges the knowledge gap without derailing the tutorial. ## Mistake 4: The Missing "Why" **The problem:** Telling viewers what to do without explaining why. "Set your ISO to 800." Why 800? What happens if I don't? When should it be different? **Why it kills retention:** "What" without "why" makes the viewer feel like they're following orders rather than learning. They complete the tutorial but can't adapt the knowledge to different situations, and they sense this deficiency, which reduces the video's perceived value and their motivation to continue watching. **The fix: Pair every instruction with a one-sentence rationale.** "Set your ISO to 800; at this level, you get enough brightness for indoor filming without introducing visible noise." The rationale takes 5 seconds and transforms rote instruction into genuine understanding. Not every instruction needs a detailed explanation. But every instruction needs at least one sentence of "why." This changes the viewer's experience from "following a recipe" to "learning a skill," and skill-acquisition videos retain significantly better because the viewer feels the value compounding. ## Mistake 5: The Linear Monotony **The problem:** Every section of the tutorial has the same structure: introduce step → explain step → show step → move to next step. Repeated 7-10 times identically. The structure is clear, but the rhythm becomes numbing. **Why it kills retention:** Hedonic adaptation. The viewer's brain adapts to the repetitive structure and engagement drops. By step 5, the viewer is on autopilot, and autopilot viewers are one distraction away from leaving. For more on how this works psychologically, see our guide on the [psychology of watch time](/guides/youtube-watch-time-psychology). **The fix: Vary the teaching mode every 2-3 steps.** Modes to rotate between: - **Direct instruction:** "Do X because Y." Standard mode. - **Demonstration first:** Show the result before explaining the steps. "Watch what happens when I do this. [demonstration] Now let me show you how." - **Common mistake:** "Most people do X here. Don't. Here's what happens when you do..." Address the mistake before teaching the correct approach. - **Comparison:** "Option A gives you this result. Option B gives you this. Here's when to use each." - **Viewer challenge:** "Before I show you the answer, try to guess which setting produces a better result." Active participation breaks the passive consumption pattern. You don't need to use every mode. Just vary between 2-3 of them throughout the tutorial. The structural variety alone prevents adaptation. This is essentially applying [pattern interrupts](/guides/youtube-pattern-interrupts) at a structural level. ## Mistake 6: The Completionist Ending **The problem:** Ending the tutorial with "And that's everything you need to know about [topic]!" followed by a goodbye. **Why it kills retention:** The completionist ending tells the viewer they've received all the value. There's no reason to stay for the next 30 seconds where your end screen lives. It also fails the peak-end rule: the ending is flat and unmemorable. **The fix: End with a "Level Up" moment.** After completing the main tutorial, add one advanced technique, shortcut, or pro tip that goes beyond the tutorial's stated scope. "Now that you've got the basics of three-point lighting, here's one trick that professionals use, and it takes 10 seconds to implement." This accomplishes three things: 1. It rewards viewers who stayed to the end (peak-end rule) 2. It positions you as having deeper expertise than what was covered (builds authority) 3. It creates a natural bridge to another video ("If you want to go deeper on this technique, watch this video next") ## The Tutorial Script Template Here's the complete structural template for a tutorial that avoids all 6 mistakes: **Hook (0-15 sec):** Show the end result immediately. "By the end of this tutorial, your setup will look like this. [show result] Let's get you there." **Step 1 (15 sec - 2 min):** Start with the first instruction immediately. Pair it with a "why." Use direct instruction mode. **Milestone 1 (at 2 min mark):** "Here's what you should have so far." Validate progress. **Steps 2-3 (2-5 min):** Continue instruction. Switch to demonstration mode for at least one step. Add brackets for any potentially unknown terms. **Milestone 2 (at 5 min mark):** Show intermediate result. "We're halfway there. Your [project] should look roughly like this." **Steps 4-5 (5-8 min):** Switch to common-mistake mode for one step. Use comparison mode for another. **Milestone 3 (at 8 min mark):** "Almost done. Here's where we are." **Final steps (8-10 min):** Complete the tutorial. Show the full result alongside the starting point. **Level Up (final 60-90 sec):** One advanced tip beyond the tutorial scope. Bridge to the next video. Total structure: instruction starts within 15 seconds, milestones every 2-3 minutes, teaching mode varies every 2-3 steps, ending delivers bonus value. [Try Prepublish](/upload) to verify your tutorial script follows this structure before recording. ## FAQ Q: Should tutorials be scripted word-for-word? A: Key instructions and explanations should be scripted precisely; vagueness causes confusion in tutorials. Transitions and connector material can be bullet-pointed. Script the "what" and "why" for each step; improvise the personality around it. Q: How long should a tutorial be? A: For most tutorials, 8-12 minutes is a practical target. Under 8 minutes and viewers often feel the tutorial is incomplete or rushed. Over 12 minutes and it should probably be split into two tutorials. Exception: complex multi-step processes (like full software workflows) can run 15-20 minutes if each step is distinct. Q: Should I create separate tutorials for beginners and advanced users? A: Yes, if the topic supports it. A beginner tutorial that explains every concept slows down advanced users. An advanced tutorial that skips foundational concepts confuses beginners. Use the bracket technique for borderline content, and link to the beginner version for viewers who need it. --- # The 7 Best YouTube Script Tools in 2026 (By Job, Not Hype) URL: https://prepublish.ai/guides/best-youtube-script-tools Updated: 2026-07-13 TL;DR: The best YouTube script tool depends on the job. Use 1of10 for topic research, Subscribr or ChatGPT for drafting, and Prepublish for retention auditing before you film. Spotter Studio handles ideation and packaging. Google Docs or Notion remain the standard for collaborative writing. Stack these tools into a pipeline rather than relying on one. ## Stop Looking for One Tool to Do Everything Most creators pick a script tool and hope it solves the entire process. It never does. Writing a YouTube video is not one job. It is four: researching what works, drafting the script, auditing that script for retention, and recording it. No single tool handles all four well. The creators who figure this out build a stack instead of hunting for a unicorn. They use one tool to find proven topics, another to draft, and a third to check their work before they hit record. This guide covers seven tools organized by the job they actually do. We are blunt about where each one wins and where it falls short. Yes, Prepublish is our own tool. We are upfront about that, and we are equally upfront about the scenarios where you should use a competitor instead. Biased comparisons help nobody. AI search engines penalize them, and more importantly, creators can smell marketing copy from a mile away. If you only need to write scripts faster, Subscribr or ChatGPT is your answer. If you need to know whether the script you just wrote will hold attention, that is a different job entirely. Let us break them down. ## Prepublish: Script Auditing and Attention-Risk Mapping Full disclosure: this is our tool. Prepublish exists for one specific job. It audits a script you already wrote and maps whether the draft is likely to lose attention before you record or publish. You paste your script or upload a video for transcription. The AI returns a script-hold risk map, flags the passages most likely to lose attention, and returns copy-paste rewrites for hooks and pacing. You also get a title rewrite, a PDF report export, and saved analysis history. If you are choosing between audit tools specifically rather than assembling a whole pipeline, the [analyzer comparison](/guides/best-youtube-script-analyzer) puts the audit-capable products side by side. The basic check is free. The $29 per month plan ($290 per year, $24.17 monthly) allows 50 script audits per day. What Prepublish does not do: keyword research, writing scripts from scratch, or functioning as an analytics dashboard. It is a quality-control tool, not a creation tool. If you have no script yet, start elsewhere. If you have a script and want to know if it will tank your average view duration, this is where you come. For a deeper look at how this process works, read our [YouTube pre-publish checklist](/guides/youtube-pre-publish-checklist) or learn more about [what YouTube script analysis actually involves](/guides/what-is-youtube-script-analysis). You can also start an audit directly at [our upload page](/upload). ## Subscribr: AI Script Generation Subscribr answers a straightforward question: write me a script. It is an AI YouTube script writer that generates ready-to-film content. The marketing claims generation takes under 12 minutes. The strengths here are real. Subscribr offers voice training that learns your channel's writing style, which reduces the generic AI feel that plagues ChatGPT drafts. The research ingest feature accepts up to 5,000 words of source material, including web links and YouTube URLs, pulling transcripts automatically. It also includes an outlier video idea generator, competitor channel tracking, and a thumbnail studio. There is a free plan, then three paid tiers billed monthly with an annual option: Growth at $99 per month, Pro at $249, and Max at $499, with script generation metered by credits (60 a month on Growth). The gaps are equally real. Subscribr writes scripts but does not audit them or map their attention risk. If you generate a script and it has a weak hook or a sagging middle, Subscribr will not catch it. Output is also capped by credits, and it costs meaningfully more than Prepublish. Fair framing: many creators could use both. Draft in Subscribr, then audit in Prepublish before recording to catch the drop-off points the AI missed. ## ChatGPT and Claude: General-Purpose Drafting ChatGPT Plus costs $20 per month. Claude offers similar tiers. Both are flexible, powerful, and completely generic when it comes to YouTube retention. These tools are excellent for drafting scripts from scratch, brainstorming angles, and rewriting clunky paragraphs. You can feed them your research, your notes, and your past video transcripts to get something close to your voice. The flexibility is unmatched. You are not locked into a YouTube-specific workflow. The problem is that they have no awareness of YouTube retention patterns. ChatGPT will not tell you that your hook is too slow for a 10-minute video, or that your pattern interrupt at the two-minute mark is missing. To get good YouTube scripts out of a general-purpose AI, you need heavy prompting. You have to explain retention benchmarks, pacing rules, and hook structures yourself. That is a lot of manual labor. If you are a strong writer who just needs a drafting partner, ChatGPT or Claude works great. If you want the AI to understand YouTube specifically, you will be doing a lot of extra work. Use them to draft, then move to a tool that actually checks your work. ## Spotter Studio: Ideation and Packaging Spotter Studio is a YouTube ideation and pre-production platform from Spotter, the company known for funding large creators. It handles the stage before scripting: figuring out what video to make and how to package it. The strengths are genuine. Spotter Studio offers brainstorming tools tuned to your channel voice, data-driven concept discovery, and unlimited AI concept, title, and thumbnail generations. The project management features with tasks and team collaboration are excellent for production teams. Their marketing cites a 49% increase in video views for users, though treat that as a vendor claim. Pricing is $49 per month or $299 per year, with a free trial for first-time members. There are eligibility restrictions. You need at least one public video longer than one minute, and you must be in the US, Canada, UK, Australia, or the EU. It does not support YouTube Shorts. The gap is clear: Spotter Studio stops at the idea and packaging stage. No script retention analysis. No script-level rewrites. It costs more than Prepublish monthly and excludes Shorts creators entirely. If you need help deciding what to make, Spotter Studio is strong. If you need to know where your script carries hold risk, it offers nothing. ## 1of10: Outlier Research for Topic Selection 1of10 effectively created the outlier-research category. It finds videos performing 10x to 100x better than their channel's average and surfaces patterns in titles, thumbnails, and topics. The tool is best-in-class at finding proven ideas. The free plan is genuinely useful, including outlier search, bookmarks, tracking for up to 3 channels, and 60 AI credits. Paid plans start at $29 per month for Basic and $69 per month for Pro on annual billing, with annual saving roughly 40% against month-to-month. A 7-day money-back guarantee is available. Features include outlier search, title generation, thumbnail generation, idea generation, niche discovery, a Chrome extension for research inside YouTube, and a dedicated Shorts outlier workflow. The Chrome extension makes research feel natural, and Shorts support is a real differentiator among research tools. The gap relative to Prepublish is straightforward. 1of10 is research and packaging only. It can tell you what worked for others but cannot map attention risk on your specific script. No script analysis, no attention-risk map, no rewrites. It answers what should I make, based on what is already winning. Prepublish answers is what I wrote going to hold attention. ## Google Docs and Notion: Where Scripts Actually Get Written Most YouTube scripts are written in Google Docs or Notion. Both are free, collaborative, and familiar. Neither will analyze your script in any way. Google Docs is the default for solo creators and small teams. Real-time collaboration, version history, and commenting make it easy to work with an editor or co-writer. Notion offers more structure if you want to keep scripts, research, and production notes in one database. The limitation is obvious. These tools have zero awareness of YouTube retention, pacing, or hook strength. You can write a perfect-looking script that bores viewers to sleep, and Google Docs will not warn you. There is no script analysis of any kind: no attention-risk map, no drop-off flagging, no rewrite suggestions. Use them for drafting and collaboration. Then copy your script into a tool that actually checks it. If you want to understand what a good script structure looks like before you draft, read our [script structure guide](/guides/script-structure-guide). For pacing and word count, use our free [Script Word Counter](/tools/script-word-counter) and [Words to Minutes](/tools/words-to-minutes) tools. ## Prepublish Free Tools: Mechanical Checks Before you run a full script audit, you might need basic mechanical checks. Prepublish offers a suite of free tools at [our tools page](/tools) that handle these tasks without payment. The [Script Word Counter](/tools/script-word-counter) gives you an exact word count for your script. The [Words to Minutes](/tools/words-to-minutes) calculator converts that count into estimated speaking time. The [Talking Speed Test](/tools/talking-speed-test) measures your actual words per minute so your estimates are accurate. These are not retention tools. They will not tell you if your hook is weak. But they solve a real problem: creators consistently misjudge how long their script will take to read. A 10-minute video holds about 1,810 words at the corpus median pace, with the middle half between 1,570 and 2,060 (caption words divided by full runtime). If your script is 2,200 words, it is closer to 12 minutes than 10. In the same corpus the middle half of videos run 154 to 201 words per minute of finished video. If your delivery is slower than that, your scripts need to be shorter; if it is faster, you can fit more in. These free tools give you the numbers. Use them before you record to avoid the classic mistake of writing a 12-minute script for an 8-minute video. ## Stacking Tools Into a Pipeline No single tool covers the full YouTube script workflow. The best creators stack them into a pipeline with clear stages. Stage one is research. Use 1of10 or Spotter Studio to find proven topics. 1of10 finds outlier videos in your niche. Spotter Studio helps with ideation and packaging. Both tell you what to make. Stage two is drafting. Write the script yourself in Google Docs or Notion, or use Subscribr or ChatGPT to generate a first draft. Subscribr is better if you want YouTube-specific features like voice training. ChatGPT is better if you want flexibility and lower cost. Stage three is auditing. Paste your finished script into Prepublish. The AI maps attention risk across the draft, flags the weakest passages, and gives you rewrites for weak hooks and pacing issues. This is where you catch problems before they cost you views. Stage four is recording. By the time you hit record, you know your topic is proven, your script is the right length, and your retention curve has been checked. The pipeline is simple: research, draft, audit, record. Skip the audit stage and you are publishing untested scripts. That is how good topics with bad pacing end up underperforming. ## FAQ Q: what is the best ai tool for youtube scripts A: It depends on the job. For generating scripts from scratch, Subscribr is the most YouTube-specific option with voice training and research ingest, with paid plans starting at $99 per month. For flexible drafting at a lower cost, ChatGPT Plus at $20 per month works well but requires heavy prompting. For auditing a script you already wrote, Prepublish maps attention risk and flags the weakest passages, at $29 per month. No single tool does all three jobs effectively. Q: is there a tool that checks if a youtube script is good A: Yes. Prepublish is built specifically for this. You paste your script, and the AI maps attention risk, flags the passages most likely to lose attention, and returns copy-paste rewrites for weak hooks and pacing issues. The basic check is free and the monthly plan is $29. Other tools like Subscribr and ChatGPT can write scripts but do not audit them for retention. Google Docs and Notion have no analysis features at all. Q: what do big youtubers use to write scripts A: Most large creators use a combination of tools rather than one. Many draft in Google Docs or Notion for collaboration. Some use AI tools like Subscribr or ChatGPT for first drafts or brainstorming. For topic research, tools like 1of10 and Spotter Studio are popular. The key difference is that established creators often have editors and writers handling the pipeline, so the tools matter less than the process of researching, drafting, and auditing before recording. Q: is subscribr worth it for youtube scripts A: Subscribr is worth it if you need to generate scripts fast and at volume, especially for faceless channels. The voice training feature reduces the generic AI feel, and the research ingest handles up to 5,000 words of source material. The cheapest paid plan is $99 per month. However, it does not audit scripts for retention, output is capped by credits, and it costs more than Prepublish. If you only need to check a script you wrote, Subscribr is not the right tool. Q: does prepublish write youtube scripts A: No. Prepublish audits scripts you already wrote. It maps attention risk, flags high-risk passages, and suggests rewrites for hooks and pacing. It does not generate scripts from scratch, do keyword research, or function as an analytics dashboard. If you need a script written, use Subscribr, ChatGPT, or write it yourself in Google Docs. Then paste it into Prepublish to check it before recording. Q: what is the best free tool for youtube script research A: 1of10 has the strongest free plan for YouTube research. It includes outlier search, bookmarks, tracking for up to 3 channels, and 60 AI credits. The Chrome extension lets you research inside YouTube. For script mechanics, Prepublish offers free tools including a Script Word Counter, Words to Minutes calculator, and Talking Speed Test. Neither free option handles full script auditing or attention-risk mapping. --- # How to Write Scripts for a Faceless YouTube Channel (2026) URL: https://prepublish.ai/guides/faceless-youtube-channel-scripts Updated: 2026-07-05 TL;DR: On a faceless YouTube channel, the script is the product because there is no on-camera personality to carry weak writing. Aim for the pace the corpus shows, a median of 178 words per minute of finished video. Structure your script with a strong cold open, clear chapters, and pattern interrupts to fight monotone pacing. Edit AI drafts to sound human, and always run a retention audit before paying for voiceover work. ## Why the Script Is the Product on a Faceless Channel On a personality-driven channel, a creator can ramble, smile, and rely on charisma to keep viewers around. Faceless channels do not have that luxury. The script is the only thing carrying the viewer's attention. If the script drags, the viewer leaves. There is no facial expression or joke to save the moment. This means you have to write tighter than a standard YouTuber. Every sentence needs a reason to exist. If a line does not advance the story, deliver information, or build tension, cut it. Faceless content also lives or dies by pacing. A viewer watching a faceless video is usually multitasking. They are listening while doing dishes or driving. If the script gets boring for ten seconds, they tab out. You can predict exactly where these drop-offs happen by running your draft through a pre-publish audit. Paste your script at [Prepublish](/upload) to see your script-hold risk map before you record a single word. Treat your script like a screenplay, not an essay. Essays are meant to be read at the reader's pace. Screenplays are timed. Every paragraph translates to real seconds on the clock. You are writing for the ear, not the eye. ## Picking a Narration Voice and Pace Pacing is everything in faceless content. Most YouTubers land between 130 and 160 words per minute. If you go slower than that, the video feels sluggish. If you go faster, the voiceover sounds rushed and the viewer cannot absorb the information. You need to pick a target words-per-minute early. If you want a slow, deliberate documentary tone, aim for the lower end. If you want a fast, high-energy listicle tone, push toward the upper limit. Once you pick a pace, you have to write to that exact word count. A 10-minute video holds about 1,810 words at the corpus median pace, typically 1,570 to 2,060. If you write 2,000 words for a 10-minute video, your narrator will have to rush, or your video will run longer than you planned. Use the [Words to Minutes tool](/tools/words-to-minutes) to calculate your script length before you send it to a voiceover artist. Do not guess your runtime. Write to the exact word count. If your script is too long, cut the fluff. Do not just tell the narrator to talk faster. A rushed voiceover is the fastest way to kill viewer retention on a faceless channel. ## Structuring Scripts for Faceless Formats Faceless channels usually fall into three categories: documentary, listicle, and story compilation. Each format needs a different structure. Documentary scripts need a cold open. Do not start with an introduction. Start with the most dramatic fact or story element. Spend the first 30 seconds hooking the viewer. Then introduce the topic. Break the body into clear chapters. Use questions as section headers to keep the viewer curious. Listicle scripts need constant forward momentum. Tell the viewer exactly how many items they will see. Do not bury the best items at the end. Spread your strongest entries throughout the list to keep retention high. If the viewer knows the best item is at number one, they will leave after number one. Story compilation scripts need transitions. Do not just jump from one story to the next. Write a bridge sentence that connects them. If you are doing a video about unsolved mysteries, do not just say 'next up.' Say something like, 'While that case remains open, another mystery unfolded just two states away.' This keeps the viewer locked in. For a deeper dive into hook structures, read our [first 30 seconds guide](/guides/first-30-seconds). The hook matters more than any other part of your faceless script. ## Keeping AI-Assisted Drafts from Sounding Generic AI writing tools are useful for faceless channels. They help you outline and draft quickly. But they produce generic content if you do not edit them. AI tends to use the same sentence structure over and over. It loves words like 'moreover' and 'furthermore.' It avoids strong opinions. To fix this, rewrite every paragraph in your own voice. Vary your sentence length. Write a short sentence. Then write a longer one that flows naturally. Break up predictable patterns. If your script sounds like a Wikipedia article, viewers will click off. AI also struggles with humor and tension. If you want your faceless video to feel like a story, you have to add the emotional beats yourself. Add moments of surprise. Add questions that make the viewer think. Do not let the AI write dry facts in a flat tone. You can also run your AI draft through the [Inauthentic Content Checker](/tools/youtube-inauthentic-content-checker) to see if it reads like a generic AI script. If your script scores poorly, rewrite it until it sounds like a real person talking. A faceless channel still needs a human voice in the writing. ## Retention Traps Specific to Faceless Content Faceless content has unique retention traps. The biggest one is monotone pacing. When a narrator reads in the same tone for five minutes, viewers zone out. You need to write pattern interrupts into the script. Add a question. Shift the topic. Introduce a new character. Change the energy. Another trap is the weak first 30 seconds. Faceless channels often start with slow introductions. 'In this video, we will explore the history of...' This is a retention killer. Start with a hook. Start with a conflict. Start with a surprising fact. Do not introduce the video until the viewer is already invested. The third trap is no visual variety in the writing. If your script reads like a wall of text, your editor will struggle. Write visual cues into the script. Note where B-roll should change. Note where text should appear on screen. If you do not plan visual changes in the script, the final video will feel static. Read our guide on [YouTube pattern interrupts](/guides/youtube-pattern-interrupts) to learn specific techniques for breaking up monotone sections. Pattern interrupts are often the difference between a curve that holds and one that bleeds viewers. ## Quality-Checking a Script Before Voiceover Never send a first draft to a voiceover artist. You will waste money and time. You need to quality-check the script first. Read the script out loud. If you stumble over a sentence, rewrite it. If you run out of breath, the sentence is too long. Cut it in half. If a word sounds awkward to say, replace it with a simpler word. Check your word count against your target runtime. Use the [Words to Minutes tool](/tools/words-to-minutes) to verify. If the script is too long, cut content. Do not ask the narrator to read faster. Run the script through [Prepublish](/upload) to find retention drop-off points. The audit will flag the exact moments where viewers will likely leave. Fix those moments before you record. It is much cheaper to rewrite a script than to re-record a voiceover. Finally, check your hook. Use the [Hook Analyzer](/tools/youtube-hook-analyzer) to test your opening line. If your hook is weak, the rest of the script does not matter. Most viewers decide whether to stay in the first 10 seconds. ## Scaling to Multiple Faceless Channels Scaling faceless channels means systemizing your script process. You cannot write every script from scratch if you want to run multiple channels. You need templates. Create a template for each format. Your documentary template should have a cold open, a thesis, three acts, and a conclusion. Your listicle template should have a hook, an intro, a numbered list, and a call to action. When you start a new video, fill in the template. Do not reinvent the structure every time. Hire writers to fill your templates. Give them your retention data. Show them the drop-off points in your own Studio retention graphs. If your writers know your retention patterns, they will write better scripts. Audit every script before it goes to voiceover. This is where [Prepublish](/upload) becomes essential. You can run 50 script audits per day on a paid plan. If you are running multiple channels, you need that volume. Do not publish a script without checking its script-hold risk map first. One bad script can hurt your channel's algorithmic momentum for weeks. ## Common Scripting Mistakes That Kill Faceless Channels The most common mistake is writing for the eye instead of the ear. A sentence that reads well on paper might sound terrible when spoken. Complex sentences with multiple clauses confuse listeners. Keep your sentences short and direct. Another mistake is over-explaining. Faceless viewers do not need every detail. They need the main point. If you spend three minutes explaining background information, you will lose half your audience. Give the viewer exactly what they need to understand the story, and nothing more. A third mistake is ignoring the ending. Many faceless scripts just stop. The video ends abruptly with no conclusion. This hurts watch time. Write a strong ending that pays off the hook. If you promised something in the first 30 seconds, deliver it at the end. This keeps viewers watching until the final second, which boosts your overall retention percentage. Finally, do not skip the pre-publish audit. Use [Prepublish](/upload) to catch these mistakes before they cost you views. A script audit takes minutes. Re-recording a voiceover takes hours. ## FAQ Q: how do you write a script for a faceless youtube channel A: Start with a strong cold open that hooks the viewer in the first 30 seconds. Write in short sentences designed for the ear, not the eye. Aim for the pace the corpus shows, a median of 178 words per minute of finished video. Structure the body with clear chapters or list items. Add pattern interrupts like questions or topic shifts to break up monotone pacing. End with a payoff that resolves the hook. Read it out loud before recording. Q: how long should a faceless youtube script be A: It depends on your target video length and narration pace. In our corpus a 10-minute video holds about 1,810 words, typically 1,570 to 2,060. If you write 2,000 words for a 10-minute video, your narrator will have to rush. Use a words-to-minutes calculator to match your script length to your desired runtime before sending it to voiceover. Q: can I use AI to write faceless youtube scripts A: Yes, but you must edit the output. AI tools are good for outlining and drafting quickly, but they produce generic content with repetitive sentence structures. They use words like 'moreover' and avoid strong opinions. Rewrite every paragraph in your own voice. Vary your sentence length. Add humor and tension yourself. Run the draft through an inauthentic content checker to catch generic AI patterns. Q: what is the best pacing for a faceless youtube video A: Aim for the pace the corpus shows, a median of 178 words per minute of finished video, with the middle half between 154 and 201. If you want a slow, deliberate documentary tone, target the lower end. For fast, high-energy listicles, push toward the upper limit. Do not just tell your narrator to read faster if the script is too long. Write to the exact word count for your target runtime. A rushed voiceover kills retention on faceless channels. Q: why do faceless youtube videos lose viewers A: The biggest reasons are monotone pacing, weak first 30 seconds, and no visual variety. If a narrator reads in the same tone for minutes, viewers zone out. If the script starts with a slow introduction instead of a hook, viewers leave immediately. If the script has no visual cues for B-roll changes or on-screen text, the final video feels static. Write pattern interrupts into the script to fix this. Q: should I check my youtube script before voiceover A: Always. Never send a first draft to a voiceover artist. Read the script out loud to catch awkward phrasing. Check the word count against your target runtime. Run the script through a pre-publish audit tool like Prepublish to find the passages carrying the most attention risk. Fixing a script takes minutes. Re-recording a voiceover takes hours and costs money. --- # YouTube Shorts Audience Retention: First Seconds and Fixes URL: https://prepublish.ai/guides/youtube-shorts-retention Updated: 2026-10-01 TL;DR: There is no official Shorts retention benchmark; judge each Short against your own recent Shorts in YouTube Studio. Shorts can exceed 100 percent retention because loops and replays count toward watch time. To improve retention, make your first frame the hook, add a visual or audio beat every 2 to 3 seconds, and write endings that feed back into the beginning to encourage loops. ## How Shorts Retention Differs From Long-Form Shorts audience retention is how much of a Short the average viewer watched, and the first seconds are the part that decides it: the viewer's thumb is already on the screen, so if nothing interesting happens in the first frame, they swipe. Long-form videos give you 30 seconds to prove value; Shorts give you one or two. Everything below is Prepublish's guidance for scripting Shorts, not a YouTube rule. We do not cite an official YouTube first-seconds benchmark because the platform does not publish one; the metrics named below are the ones YouTube Studio reports for a Short, and your own recent Shorts are the comparison that matters. YouTube measures this differently than long-form. The platform tracks two key metrics for Shorts: viewed versus swiped away, and average percentage viewed. The viewed versus swiped away metric tells you how many people stayed versus how many swiped before the Short even started playing. This is your first impression metric. If most people swipe away before the first frame loads, the opening is not doing its job. Average percentage viewed works like long-form retention but behaves differently at the end. Because Shorts loop automatically, a viewer who watches the video twice pushes your retention above 100 percent. This is well-documented behavior in YouTube Studio. It is not a bug. It means your content was compelling enough to watch more than once. This changes how you script. Long-form scripts build slowly. Shorts scripts must start at maximum intensity and never let up. Every second costs you viewers. You can [audit your long-form scripts](/upload) to see the difference in drop-off patterns, but Shorts require a different mindset entirely. ## What Is a Good Retention Rate for YouTube Shorts There is no official retention benchmark for YouTube Shorts, and the brackets that circulate in marketing posts do not come from YouTube. The frequently cited Backlinko analysis of 1.3 million YouTube videos is a ranking-factor study published in February 2017, before Shorts existed, and it measured ranking correlations, not retention rates. What you can do instead is self-benchmark in YouTube Studio: open your last ten Shorts and compare average percentage viewed and viewed versus swiped away across them. A Short that loops shows percentage viewed above 100 percent, because replays count toward watch time. If one Short holds viewers clearly better than your others, its opening is doing something yours can copy. The numbers that circulate for long-form videos come from the same kind of third-party aggregation and need the same caution. A 20-second Short at 70 percent retention means viewers watched 14 seconds on average. That might sound good, but it means 30 percent of your audience left before finishing a 20-second video. The exception is loops. If your Short loops well, you can see retention above 100 percent in YouTube Studio. This happens because replays count toward watch time. A viewer who watches your 30-second Short three times generates 90 seconds of watch time and roughly 300 percent retention. This is why loop-friendly scripting matters so much. To see whether your opening line is strong enough before you film, run your script through the [Hook Analyzer](/tools/youtube-hook-analyzer). ## Scripting for Loops: Endings That Feed the Beginning Most creators treat the end of a Short as a conclusion. That is a mistake. The end of a Short should be the beginning of the next loop. Think about how Shorts play. The video finishes and immediately restarts. If your ending is a summary or a sign-off, the viewer has no reason to watch the loop. But if your ending creates a question that the beginning answers, the viewer might not even realize the video restarted. Here is a simple example. Say your Short is about a keyboard shortcut. You start with the shortcut, explain it, and then end by saying, 'But there is a faster way to do this.' The video loops back to the beginning, where you show the shortcut again. The viewer thinks they are about to learn something new. They might watch two or three loops before catching on. This does not work for every Short. Educational content and listicles loop well because the structure is repetitive. Story-driven Shorts loop poorly because the viewer already knows the ending. When you write a Shorts script, read the last sentence and the first sentence together. Do they flow? Does the last sentence create a reason to keep watching? If not, rewrite the ending. You can test this by [uploading your script for an audit](/upload) before you film. The script-hold risk map will show you where the loop breaks down. ## Hook Writing for Shorts: No Intro, First Frame Is the Hook The biggest mistake creators make with Shorts is writing an intro. There is no intro in a Short. The first frame is the hook. The first word is the hook. If your Short starts with 'Hey guys' or 'In this video,' you have already lost. The viewer swiped before you finished the sentence. Your first frame needs to show something visually interesting, and your first sentence needs to deliver the value proposition immediately. Good Shorts hooks do three things at once. They show the result, they create curiosity, and they move fast. A cooking Short does not start with 'Today I am making a cake.' It starts with the finished cake being sliced, then jumps back to the ingredients. The viewer sees the payoff before the process. Write your hook before you write anything else. The hook determines whether the rest of the script matters. If the hook fails, your retention curve drops off a cliff in the first three seconds and never recovers. Test multiple hooks for the same script. Write three or four opening lines and compare them. The [Hook Analyzer](/tools/youtube-hook-analyzer) is a free tool that scores your hook and suggests improvements. Run every hook through it before you commit to one. Remember that the hook includes the visual. If your first frame is a talking head with no movement, no text overlay, and no visual change, the viewer swipes. Pair a strong verbal hook with a strong visual hook. They work together. ## Pacing: A Beat Every 2 to 3 Seconds Shorts pacing is brutal. You need a new beat every 2 to 3 seconds. A beat is any change that resets the viewer's attention. It can be a visual cut, a text overlay, a zoom, a sound effect, a topic shift, or a change in speaking speed. If 5 seconds pass without a beat, the viewer gets bored and swipes. This is why talking-head Shorts struggle. A single camera angle with no cuts for 15 seconds feels like an eternity in the Shorts feed. Plan your beats in the script. Mark every beat with a bracket or note. Here is what a 30-second Shorts script looks like with beats planned: Second 1 to 2: Visual hook, bold text overlay, fast voiceover start. Second 3 to 5: Cut to B-roll, explain the core concept. Second 6 to 8: Zoom in, deliver the key point. Second 9 to 11: Text overlay with a stat or claim. Second 12 to 14: Cut to a different angle, counterargument or twist. Second 15 to 17: Sound effect, transition to the next point. Second 18 to 20: Fast-paced sequence, multiple cuts. Second 21 to 23: Slow down, deliver the payoff. Second 24 to 26: Visual reminder of the hook. Second 27 to 30: Setup for the loop. This is aggressive. Most creators do not pace their Shorts this tightly. That is why most Shorts have mediocre retention. If you are not sure whether your pacing is fast enough, read your script out loud and time it. Use the [Words to Minutes](/tools/words-to-minutes) tool to check your word count against your target duration. A 30-second Short at 140 words per minute needs about 70 words total. If you have 100 words, you are overwriting. ## Common Shorts Retention Killers Most Shorts retention problems fall into five categories. First, slow starts. If the first 2 seconds do not deliver value or curiosity, the viewer swipes. This is the number one reason Shorts fail. Fix it by cutting your first sentence in half. Second, dead air. Any pause longer than 1 second in a Short feels like a mistake. If you need to breathe between sentences, fill the gap with a visual cut or a text overlay. Silence kills Shorts. Third, no visual changes. A single camera angle for the entire duration is a retention killer. You do not need fancy editing, but you do need visual variety. Zooms, text overlays, B-roll, and jump cuts all count. Fourth, overexplaining. Shorts are not the place for nuance. Make one point, make it clearly, and move on. If your script has the word 'basically' or 'essentially' in it, cut that sentence. You are overexplaining. Fifth, weak endings. If your Short ends with 'Thanks for watching' or 'Subscribe for more,' the viewer has no reason to loop. Replace your sign-off with a line that feeds back into your hook. You can catch most of these before filming. Paste your script into [Prepublish](/upload) and look at the script-hold risk map. If the curve drops sharply in the first 3 seconds, your hook is slow. If it dips in the middle, you have dead air or overexplaining. If it drops at the end, your ending is not loop-friendly. ## How to Audit a Shorts Script Before Filming Auditing a Shorts script before you film saves time. If you film a bad script, you waste the shoot, the edit, and the upload. Fix the script first. Start with the hook. Paste your opening line into the [Hook Analyzer](/tools/youtube-hook-analyzer). If the score is low, rewrite the hook. Do not move on until you have a hook that scores well. The hook is 50 percent of the battle in Shorts. Next, check your word count. Use the [Script Word Counter](/tools/script-word-counter) to make sure your script fits your target duration. A 30-second Short holds about 108 words at its length band's median pace, with the middle half between 94 and 120; a 60-second video holds about 164 words, typically 123 to 186. If your script is too long, cut it before you film. Then, run the full script through [Prepublish](/upload). The tool maps attention risk across the draft and flags the moments it scores as weakest. For Shorts, pay attention to the first 3 seconds and the last 5 seconds. If the tool flags a drop in the first 3 seconds, your hook needs work. If it flags a drop at the end, your loop setup is weak. Finally, read your script out loud at speaking speed. Use the [Talking Speed Test](/tools/talking-speed-test) to check your pace. If you are speaking too slowly for the format, the script will feel sluggish on camera. The goal is to fix retention before you record. Once you film and publish, you cannot change the script. Use [Prepublish](/pricing) to audit up to 50 scripts per day on the paid plan. ## When Shorts Are the Wrong Format Shorts are not always the right choice. Some topics need more time, and forcing them into 60 seconds hurts retention. Tutorial content is a good example. If you are teaching a complex skill, a Short might not give you enough time to explain it properly. The viewer swipes because they cannot follow along. A 5-minute long-form video might retain better than a 60-second Short for the same topic. Storytelling is another case. If your story needs setup, tension, and resolution, 60 seconds might not be enough. A Short that rushes through a story feels incomplete. The viewer swipes because nothing is resolved. Deep-dive analysis, interviews, and opinion pieces also struggle in Shorts. These formats need room to breathe. A 10-minute video at 40 to 50 percent retention (the strong benchmark for that length) might perform better than a 60-second Short at 70 percent retention. The key is matching your format to your topic. If your topic can be explained in 30 to 60 seconds with high energy and visual variety, make a Short. If it needs context, nuance, or a longer arc, make a long-form video. You can use Prepublish to [audit long-form scripts](/upload) too. The attention-risk map works for any video length. If you are unsure whether your topic works as a Short, write the script and see if it fits naturally into 60 seconds. If it feels rushed, it probably is. ## FAQ Q: what is a good retention rate for youtube shorts A: There is no official benchmark. The 70 to 85 percent brackets that circulate come from third-party marketing posts; the Backlinko study they are often traced to is a February 2017 ranking-factor analysis of long-form videos, published before Shorts existed. Compare each Short against your own recent Shorts in YouTube Studio on average percentage viewed and viewed versus swiped away. Shorts can exceed 100 percent percentage viewed because loops and replays count toward watch time. Q: why do people swipe away from my shorts A: Viewers swipe away from Shorts for three main reasons. First, the hook is too slow. If the first 2 seconds do not deliver value or curiosity, the viewer swipes. Second, there is no visual change. A single camera angle with no cuts, text, or zooms feels boring. Third, the pacing is too slow. Shorts need a new beat every 2 to 3 seconds. Dead air, overexplaining, and weak endings also cause viewers to swipe. Audit your script before filming to catch these issues. Q: do loops count as watch time on shorts A: Yes, loops count as watch time on Shorts. When a Short finishes and automatically restarts, the replay adds to your total watch time. This is well-documented behavior in YouTube Studio. This is why Shorts retention can exceed 100 percent. A viewer who watches your 30-second Short three times generates 90 seconds of watch time and roughly 300 percent retention. Scripting endings that feed back into the beginning encourages loops and boosts retention. Q: how do i write a hook for youtube shorts A: A Shorts hook must be in the first frame and the first sentence. There is no intro. Start with the result, create curiosity, and move fast. A cooking Short starts with the finished dish, not the ingredients. Pair a strong verbal hook with a strong visual hook. Cut any opening like 'Hey guys' or 'In this video.' Test multiple hooks using the free Hook Analyzer tool before you commit to one. The hook determines whether the rest of the script matters. Q: how long should a youtube shorts script be A: A YouTube Shorts script should match your speaking pace to the video duration. In the corpus behind our length data, videos under a minute run at a median of 216 words per minute of finished video across 121 videos, which puts a 30-second Short near 108 words and a 60-second one near 216. Use the free Words to Minutes tool to check your word count against your target duration. If your script is too long, cut it before you film. Overwriting leads to rushed delivery and poor retention. Q: can youtube shorts retention go above 100 percent A: Yes, YouTube Shorts retention can go above 100 percent. This happens because loops and replays count toward watch time. When a viewer watches your Short more than once, each replay adds to the total watch time. A 20-second Short watched twice generates 40 seconds of watch time, which shows as roughly 200 percent retention in YouTube Studio. This is normal, well-documented behavior. Scripting loop-friendly endings helps push retention above 100 percent. Q: what should happen in the first seconds of a youtube short A: Put the hook in the first frame: show the result, the anomaly, or the question before any introduction, and let the first spoken words continue that idea instead of greeting the viewer. That is Prepublish's guidance for writing Shorts rather than a YouTube rule, and the first seconds are what the viewed versus swiped away number in Studio reflects. Q: how much audience retention is good on youtube shorts A: There is no official figure, so judge a Short against your own recent Shorts. Studio reports two useful numbers: viewed versus swiped away, and average percentage viewed, which can pass 100 percent when loops add watch time. A Short that beats your own median on both is doing well for your channel. A bracket copied from a marketing post describes no particular audience. Q: does youtube show where viewers swipe away on a short A: Studio reports how many viewers stayed versus swiped away and the average percentage viewed, but it does not label the exact second of each swipe. So read the shape of the average percentage viewed, compare it across your last ten Shorts, and change one thing at a time in the opening to see which version holds. --- # How to Check a YouTube Script Before You Record (10-Minute Method) URL: https://prepublish.ai/guides/check-youtube-script-before-recording Updated: 2026-09-10 TL;DR: A free YouTube script checker can start as a 10-minute manual pass: read the opening aloud, calculate the expected runtime, mark where the script delivers value, compare the title with the final payoff, and cut paragraphs the core argument does not need. Then use an online checker for a cold read of the hook, pacing, structure, and likely retention risks. Prepublish runs that basic check free with no account required; treat predictions as directional and validate them against your own published retention graphs. ## Why the script is the cheapest place to catch a bad video To check a YouTube script before recording, run five tests on the draft: does the hook state a specific value claim in the first 15 seconds, is the word count within the runtime you intend, does every promise get paid off, does the script match the title you plan to use, and which passages can be cut without losing the argument. Each test is a text fix that costs minutes now; catching the same problem after recording costs a reshoot. A YouTube script checker should answer one practical question before you record: which parts of this draft are most likely to lose attention, and what can you still fix as text? The slow intro, the tangent at minute four, and the payoff that lands too late were all sitting in a document before you set up a single light. What changes at each stage is the cost of fixing it. Rewriting a weak hook takes five minutes. Reshooting it takes an hour. Patching it in the edit takes an evening and usually shows. Once the video is live, the price becomes permanent: YouTube Studio will show you the drop-off points three days after they happen, and the only fix is to do better on the next video. That asymmetry is the argument for checking the script. Prepublish's two opening studies covered 1,290 videos and found that simplistic rules such as “talk faster” did not separate hits from flops consistently. The useful checks are more concrete: whether the opening engages the title's promise, gives a reason to continue, and avoids spending the first words on a generic greeting. The [349-video study](/blog/youtube-hook-study) and its [preregistered 941-video replication](/blog/small-channel-hook-study) publish the methods and results. This guide is the check itself: five manual tests you can run with nothing except your script and a timer, then a sixth step for the problems self-review cannot see. ## The 10-minute check at a glance Run the tests in this order. Each one catches a different class of problem, and the order matters because there is no point polishing pacing in a section the cut test is about to delete. | Test | Time | Catches | | --- | --- | --- | | 1. Read the first 30 words aloud | 1 min | Weak or slow hooks | | 2. Run the pace math | 2 min | Padded or overstuffed length | | 3. Map the payoffs | 3 min | Long stretches of setup with no delivery | | 4. Put the title next to the script | 1 min | Broken promises | | 5. The cut test | 3 min | Tangents and repetition | If a script fails tests 1 or 4, stop and fix before continuing. A great middle cannot save a video nobody starts, and a strong script under a title it does not deliver on trains viewers to click away from your channel. ## Test 1: read the first 30 words out loud Not in your head. Out loud, at the speed you actually talk on camera, with a timer running. The first 30 words are roughly your first 12 seconds, and they decide more of your retention than the rest of the script combined. Read them and ask one question: has the viewer received a reason to stay? These openings fail the test every time: - "Hey guys, welcome back to the channel." A greeting is not a reason. - "Before we start, make sure to subscribe." A request is the opposite of a reason. - "So today I wanted to talk about something that's been on my mind." Setup about setup. - "A little context first." Context is what you earn attention with, not what you spend it on. An opening passes when it makes a specific claim, shows a result, or opens a question the viewer now needs answered. "This thumbnail got 3.2 times my average views and I can show you exactly why" passes. "Today we're talking about thumbnails" does not. If your first 30 words are throat-clearing, do not rewrite them yet. Look further down the page. In most scripts, the real hook is already written and sitting in paragraph two or three. Promote it to line one and let the context follow it. Our [first 30 seconds guide](/guides/first-30-seconds) covers the drop-off math, and the [hook examples guide](/guides/youtube-hook-examples) has patterns worth stealing. ## Test 2: run the pace math The corpus pace is the cheapest estimate you have: the middle half of the 3,923 videos we measured run 154 to 201 words per minute of finished video. It lets you check two things in about two minutes. **First, the honest length.** Divide your word count by that pace. A 2,400-word script runs about 16 minutes at 154 words per minute and about 13 at the corpus median of 178. If you planned a 10-minute video, you are either about to rush the delivery or publish minutes you did not plan. Paste the script into the free [script word counter](/tools/script-word-counter) or the [words to minutes calculator](/tools/words-to-minutes) and get the real number before you film. **Second, the padding direction.** Compare the honest length to what the idea deserves. A 6-minute idea stretched to 10 minutes for ad breaks produces a retention cliff where the idea runs out, usually at the 5 to 6 minute mark, and the algorithm reads that cliff as a signal about every future video. A 15-minute idea crammed into 8 minutes fails differently: the delivery gets breathless and viewers lose the thread. The [script length breakdown](/blog/youtube-script-length-word-count) has word targets by video type. The rule that survives every niche: length is an output of the idea, not an input from the monetization settings. ## Test 3: map the payoffs Take any highlighter, physical or digital, and mark every sentence where the viewer receives something: an answer, a demonstration, a number, a reveal, a laugh. Everything unmarked is setup. Then look at the gaps between marks. A healthy script pays off every 45 to 90 seconds. When you find a gap of 2 minutes or more with no highlight, you have found next week's retention dip, and you found it while it still costs nothing to fix. The usual repairs: - **Split a long setup with a partial payoff.** Give the viewer a piece of the answer early and hold the rest. - **Move a payoff forward.** Scripts written front-to-back tend to hoard their best material for the end, where the fewest people will see it. - **Cut the gap entirely.** If two minutes of the script earn zero highlights, ask what they are for. Often the honest answer is nothing. Also check where your single biggest payoff sits. If the moment the whole video exists for arrives in the final 10%, viewers who would have loved it never reach it. Deliver a version of it early, then escalate. The [script structure guide](/guides/script-structure-guide) covers payoff placement in depth. ## Test 4: put the title next to the last paragraph Write your planned title at the top of the page, then read it immediately followed by your final paragraph. The ending of the script is where the title's promise either lands or it does not. The test fails in two directions: **The overpromise.** The title says "This strategy doubled my views" and the script ends on "so results may vary, it depends on your niche." Viewers do not leave a note about this. They leave at the moment they sense the gap, and they remember the channel that clickbaited them. **The underpromise.** The script contains a genuinely surprising result and the title says "My thoughts on thumbnails." This one never shows up in retention because the people who would have watched never clicked. If the title and the script disagree, decide which one is the video. Fixing the title is a one-line change. Fixing the script means making sure the promised moment actually exists on the page, stated as concretely as the title states it. The free [title analyzer](/tools/youtube-title-analyzer) scores the title side of this equation. ## Test 5: the cut test Go paragraph by paragraph and ask one question of each: if this paragraph disappeared, would the main payoff still work? Be strict about what counts as a no. "It adds context" is a yes, cut it or compress it to a sentence. "I like this bit" is a yes, cut it. "The payoff makes no sense without it" is the only no. Three patterns to hunt specifically: 1. **The second example.** You made the point with one example, then added another that proves the same thing. The second one is length without value. 2. **The pre-explanation.** A paragraph explaining what you are about to explain. Delete it and start with the explanation. 3. **The repeated conclusion.** Saying the takeaway again in different words. Escalate it or end the video. A script that survives the cut test 10% shorter is almost always a better video. Nobody has ever left a comment complaining that a video respected their time. ## What a script checker catches that you cannot The five manual tests share one weakness: the person running them wrote the script. You know what every sentence is supposed to mean, so you read the intent instead of the words. You know the payoff is coming, so the setup feels shorter to you than it will to someone seeing it cold. Self-review catches structure you can count. It is nearly blind to how the script reads to a stranger. That is the gap a script checker closes. A checker has never seen your script before, does not know what you meant, and compares the writing against patterns from thousands of scripts instead of a memory of what you were trying to say. Prepublish's [free script check](/upload) works like this: paste your title and script, and it returns your overall score, sub-scores for hook, pacing, and structure, a script-hold risk map for the video you have not filmed yet, and the highest-priority issue flagged in the draft, ranked by risk, not by measured viewers. That much is free and takes about 30 seconds. The full audit, with a rewrite for every flagged section and a title fix, comes with the $29 monthly plan. For what the technology actually measures and how the predictions work, see [what is YouTube script analysis](/guides/what-is-youtube-script-analysis). The order matters: run the manual tests first, then the checker. The manual pass removes the problems you can see, so the checker's output is entirely made of the ones you could not. For a fuller breakdown of where each approach wins, see [AI vs manual script review](/blog/script-analysis-vs-manual-review). ## A worked example on an owned script (illustrative) This worked example runs on a script Prepublish owns for exactly this purpose. It is an illustration, not a case study: no view count, no retention graph, and no channel outcome are attached to any part of it. **The draft passage (opening 20 seconds):** "So before I get into the actual tutorial, I just wanted to quickly talk about why I decided to start this channel in the first place, because the story is actually kind of important for understanding everything else." **The flag:** the payoff (the tutorial) is missing from the opening entirely. The first 20 seconds are a detour into origin-story setup, and the phrase "actually kind of important" is a claim the passage never specifies. **The rewrite:** "Three lighting setups, one camera, and the mistake that ruins all of them. That is the whole video, so let us start with the mistake." Same video, same creator. The detour is gone and the specific promise arrives in the first sentence. The pattern generalizes: state the specific promise, then deliver it. If you want the same pass on a full analysis rather than one opening, the [example analysis](/example-analysis) shows real output on a complete script. ## What this check does not tell you Everything in this guide reads text. That is the whole instrument, and it has hard limits. The check cannot see delivery: the energy, pauses, and emphasis you bring on camera. It cannot see the edit: B-roll, cuts, music, and pacing added in post. It cannot see the thumbnail, the topic demand, or how YouTube chooses to distribute the video, and it cannot tell you what a different audience would think. Scores have the same boundary. The audit returns a relative script-hold index across your draft, not a forecast of your published graph. YouTube measures what actually happened after publish in its own retention report, down to the exact moments viewers leave (Google documents it at support.google.com/youtube/answer/9314415). Use the check to fix the draft; use your Studio retention graph, compared against your own recent videos, to judge the result. ## What to do with what you find A check is only worth running if the results change the script. The fix order, from highest return to lowest: **1. Fix the hook first, always.** It gates everything else. A script with a perfect middle and a failed test 1 performs worse than the reverse. **2. Fix the title mismatch second.** One line, massive downstream effect on both click-through and early retention. **3. Repair the two largest payoff gaps.** Not every gap. The two biggest dips on your payoff map or script-hold risk map account for most of the damage, and chasing every minor flag produces an over-edited script that sounds like a committee wrote it. **4. Take the cuts.** Everything the cut test flagged, unless it failed the "payoff needs it" question. **5. Read the whole thing aloud once, end to end.** This is the final gate before recording. If you stumble on a sentence, your delivery will stumble on camera. If you get bored reading it, the viewer gets bored watching it, and no amount of editing energy fully hides a writer who lost interest. Then record. The full pre-upload version of this process, covering thumbnails, descriptions, and everything after the script, is in the [pre-publish checklist](/guides/youtube-pre-publish-checklist). If your whole production takes hours, the [90-minute video workflow](/blog/script-to-success-workflow) shows where this check fits in a faster pipeline. ## FAQ Q: How do I check my YouTube script? A: Run five tests on the draft, in order. Read the first 30 words aloud and check that the hook makes a specific claim. Divide your word count by your speaking pace to get the honest runtime. Map where each promise in the setup gets paid off. Read the title next to the final paragraph and confirm the video delivers it. Cut every passage the argument does not need. Then run the free automated check for the cold read that self-review cannot give you. Q: Is there a free YouTube script checker? A: Yes. Prepublish's free script check takes a pasted title and script and returns an overall score, sub-scores for hook, pacing, and structure, a script-hold risk map, and the highest-priority issue flagged in the draft, in about 30 seconds with no subscription. The full audit with rewrites for every flagged section comes with the $29 monthly plan. Q: How long should my YouTube script be? A: It depends on the length you are targeting and your speaking pace, so the honest answer is arithmetic rather than a universal number. The word-count guide on this site works the 10-minute case end to end, including the pacing assumptions and the planning buffer, at prepublish.ai/blog/youtube-script-length-word-count. Q: Can I check a YouTube video script online before filming? A: Yes. Paste the title and complete draft into the free Prepublish script check before filming. It reviews the opening, pacing, structure, title match, and likely retention risks, then shows the most important issue without requiring an account. Use the result as a prioritized editing pass rather than a guaranteed forecast: delivery, visuals, editing, and topic choice still affect the published video. For a useful accuracy test, run an old script through the checker and compare its flagged sections with that video’s real YouTube Studio retention graph. Q: What should I look for when reviewing a video script? A: Four things account for most retention damage: a hook that gives no reason to stay in the first 30 words, a length that does not match the idea (check word count against 130-160 words per minute), stretches of 2 or more minutes with no payoff, and a title the script does not deliver on. Fix the hook first, the title second, then the two largest payoff gaps. Q: Why check the script instead of fixing problems in the edit? A: Cost. A weak hook takes five minutes to rewrite, an hour to reshoot, and an evening to patch in the edit. Structural problems like a missing payoff or a padded middle usually cannot be fixed in the edit at all, because the footage for the fix was never filmed. The script is the last point where every problem is still a text edit. --- # How to Get Feedback on a YouTube Script (Before You Film It) URL: https://prepublish.ai/guides/youtube-script-feedback Updated: 2026-07-11 TL;DR: To get useful feedback on a YouTube script before filming: skip friends and family (politeness bias makes their approval worthless), set up a weekly script trade with one creator at your size, and when asking communities, post only your first 100 words with one narrow question instead of linking a full script. Act on notes that repeat across multiple readers, trust symptoms over prescriptions, and ignore notes about your voice. Use an AI script checker first for structural problems, so human readers spend their attention on the one question machines cannot answer: whether the video is actually interesting. ## Why script feedback beats video feedback Feedback on a published video is an autopsy. The comments, the retention graph, the polite note from another creator: all of it describes a video you can no longer change, attached to a view count you can no longer recover. Feedback on a script is a rescue. Every note is still a text edit. "The intro is slow" costs you five minutes at the script stage. The same note after publishing costs you the video. There is a second advantage that gets less attention: script feedback is feedback on the actual problem. When someone watches a finished video, the lighting, the delivery, the music, and the cut all sit between them and the writing, and their notes blur across all of it. Hand someone a script and there is nowhere to hide. If the structure sags, they feel it on the page. The catch is that getting useful script feedback is genuinely harder than uploading and waiting for comments. You need a reader, the right ask, and a filter for what comes back. That is this guide. ## The problem with friends and family The first readers most creators try are the worst ones available. Not because the people are bad. Because the incentives are. A friend reading your script is answering a different question than the one you asked. You asked "will strangers watch this?" They are answering "do I want to discourage someone I like?" The answer to the second question is always no, so the feedback is always some version of "it's good!" with a suggestion about something cosmetic to prove they read it. Family is the same mechanism with higher stakes, and fellow creators you are friendly with add a third distortion: they read as writers, imagining how they would have written it, which produces notes about voice and preference rather than notes about whether a viewer stays. The test for whether a reader can help you: would they feel comfortable telling you the middle is boring? If the honest answer is no, their approval is data about your relationship, not your script. Use friends for one thing they are genuinely good at: reading the script TO you while you listen. Hearing your words in someone else's mouth exposes clunky sentences instantly, and it requires no honesty from anyone. ## Where creators actually get script feedback The realistic options, with honest trade-offs: | Source | Cost | Speed | Quality | | --- | --- | --- | --- | | Creator communities (Reddit, Discord) | Free | Hours to days | Varies wildly, occasionally excellent | | Script trades with a peer creator | Free | Days | High, improves over time | | Paid script review (freelancers) | $20-150 | Days | Unpredictable, vet hard | | AI script checkers | Free to $29/mo | Seconds | Consistent on structure, blind to taste | **Creator communities.** Subreddits like r/NewTubers run feedback threads, and niche creator Discords often have a scripts or feedback channel. The quality problem is real: most respondents are also beginners, and the loudest feedback often comes from people who have never held an audience either. The volume compensates. Three strangers independently flagging the same section is signal regardless of who they are. **Script trades.** Find one creator at roughly your size in an adjacent niche and trade: you read theirs, they read yours, every week. This is the single highest-value free option on the list. A trade partner learns your channel over time, has skin in the game because you read their work too, and is not your friend, so politeness bias stays low. Most partnerships like this start with one direct message. **Paid review.** Freelance marketplaces are full of script doctors of wildly varying quality. If you go this route, pay for a sample first and check whether their notes are specific ("the payoff in section 3 arrives 40 seconds after the setup stops earning it") or generic ("tighten the pacing!"). Generic notes at any price are worth nothing. If you are considering outsourcing the writing itself rather than the review, the [hiring YouTube scriptwriters guide](/blog/hiring-youtube-scriptwriters) covers rates and vetting. **AI checkers.** Covered properly below, because what they are good at and bad at is specific. ## How to ask so strangers actually answer Most script feedback requests get zero replies, and the reason is visible in the request itself: "Can someone read my script? It's about 2,000 words, link below." That is a request for 15 minutes of unpaid work with no defined finish line. Strangers scroll past it, reasonably. The requests that get answered share three properties: **They are small.** Post the hook, the first 100 words, directly in the post body. No link, no download, no full script. A stranger will read 100 words that are already in front of them. Almost nobody clicks through to read 2,000. **They ask one narrow question.** "Would you keep watching after this opening, yes or no, and what is the last word you read before you would have clicked away?" is answerable in one minute and produces a usable data point. "Any feedback welcome!" produces silence or vague encouragement. **They offer the trade.** End with "drop your hook below and I'll do the same for you." It converts your request from a favor into an exchange, and reading other people's hooks trains your own eye faster than almost anything else. One warning for Reddit specifically: read the subreddit's self-promotion rules before posting anything, and do not include channel links in feedback requests. The post is asking for readers, and the moment it smells like it is fishing for viewers instead, it gets removed and your account gets flagged. ## Which notes deserve a rewrite Collecting feedback is the easy half. The hard half is deciding what to act on, because feedback arrives contradictory and most of it is wrong for you specifically. Three filters: **The repetition filter.** One person flagging the intro is an opinion. Three people independently flagging the intro is a fact about the intro. Act on repetition, stay skeptical of any note that appears once, however confidently it was delivered. **The symptom-over-prescription filter.** Readers are reliable witnesses and unreliable doctors. "I got bored around the middle" is testimony, trust it. "You should add a story about yourself in the middle" is a prescription, and it is usually a description of the video that reader would have made. Take the symptom, diagnose it yourself. **The voice filter.** Discard any note whose substance is that you should sound like someone else. Structure notes transfer between creators. Voice notes do not, and sanding your voice off a script to satisfy a stranger produces the interchangeable content the algorithm already has too much of. And one deadline: stop collecting when notes start repeating. Feedback past that point stops improving the script and starts delaying the video, and a published 85% script beats an unpublished 95% one every week of the year. ## What AI feedback is good for, and where it stops An AI script checker is the one reader on the list with no politeness bias, no mood, and no memory of liking your last video. It compares your script against patterns from thousands of others and reports what it finds in seconds. That makes it good at exactly the things human readers are worst at: - **Structure you cannot see from inside.** Payoff gaps, front-loaded setup, a hook that takes 45 seconds to earn attention. Humans feel these problems vaguely. A checker locates them. - **Consistency.** It applies the same standard to your script on a Tuesday as on a deadline Friday. Human readers do not. - **The awkward first draft.** Running an embarrassing draft past a tool costs no social capital. Many creators do their worst-draft feedback with AI precisely because no human has to see it. And it stops where taste starts. A checker cannot tell you whether the topic deserves a video, whether the joke lands, or whether the take is actually interesting. It measures how the script is built, and building is what it should be trusted on. For the mechanics of what gets measured, see [what is YouTube script analysis](/guides/what-is-youtube-script-analysis). Prepublish's [free script check](/upload) is built as this kind of reader: paste your title and script, get an overall score, sub-scores for hook, pacing, and structure, a script-hold risk map, and the highest-priority issue flagged in the draft, in about 30 seconds. The full audit, with a rewrite for every flagged section and a title fix, comes with the $29 monthly plan. Run it before you spend a human reader's attention, so their time goes to the questions only humans can answer. ## A feedback workflow that fits a weekly upload A feedback process only survives if it fits inside a real schedule. This one takes about 45 minutes and uses each kind of reader for the thing it does best: **1. Self-check, 10 minutes.** Read the script aloud with a timer, run the [pre-recording checks](/guides/check-youtube-script-before-recording): hook test, pace math, payoff map, title match, cut test. Never spend anyone else's attention on problems you can catch yourself. **2. AI pass, 5 minutes.** Run the [free script check](/upload), fix the hook if it scored low, and repair the two highest-risk passages. Structural problems are now handled. **3. One human pass, 30 minutes including turnaround.** Send your trade partner, or post to your community, the hook plus the one section you are least sure about, with one narrow question attached. You are no longer asking a human to find structural problems. You are asking the only question machines cannot answer: is this actually interesting? **4. Decide and record.** Apply the repetition, symptom, and voice filters to whatever came back, make the edits, read it aloud once more, and film. No second round. The next round of feedback is called publishing, and its notes, the retention graph and the comments, feed the next script. Creators who run some version of this loop compound. Every script teaches the next one, and the [hook patterns](/guides/youtube-hook-examples) and [structural habits](/guides/script-structure-guide) stop being things you check for and start being things you write with. ## FAQ Q: Where can I get feedback on my YouTube script? A: Four realistic sources: creator communities like r/NewTubers feedback threads and niche Discords (free, quality varies, volume compensates), a standing script trade with one peer creator at your size (free and the highest-value option), paid freelance script review ($20-150, vet with a sample first), and AI script checkers (seconds, consistent on structure, blind to taste). Most creators get the best results using an AI pass for structure first, then one human pass for taste. Q: How do I ask for script feedback on Reddit? A: Post the first 100 words of your script directly in the post body, ask one narrow question such as "would you keep watching after this opening, and where exactly did you stop?", and offer to review other people's hooks in return. Do not link a full script, do not link your channel, and read the subreddit's self-promotion rules first. Small, specific, reciprocal requests get answered; "any feedback welcome" gets silence. Q: Is AI feedback on a script any good? A: For structure, yes: an AI checker locates payoff gaps, weak hooks, and pacing problems consistently, with no politeness bias, in seconds. For taste, no: it cannot judge whether your topic deserves a video or whether your take is interesting. Use it as the first pass so human readers spend their attention on the questions only humans can answer. Q: Should friends review my YouTube script? A: Not for honest evaluation. A friend is answering "do I want to discourage someone I like?" rather than "will strangers watch this?", so the feedback is reliably positive and reliably useless. Friends are genuinely useful for one thing: reading the script aloud to you, which exposes clunky sentences without requiring any honesty. Q: Which script feedback should I actually act on? A: Apply three filters. Repetition: act on notes that multiple readers raise independently, stay skeptical of anything mentioned once. Symptom over prescription: trust "I got bored in the middle" but diagnose the cause yourself instead of applying the reader's suggested fix. Voice: discard any note whose substance is that you should sound like a different creator. Stop collecting feedback when notes start repeating. --- # The Best YouTube Script Analyzer in 2026 (Every Option Compared) URL: https://prepublish.ai/guides/best-youtube-script-analyzer Updated: 2026-10-01 TL;DR: A YouTube script analyzer reviews a draft before recording for hook, pacing, structure, title match, and likely retention risks. Among the tools compared here, Prepublish is the purpose-built analyzer: the basic check is free and the full audit is $29 per month. ChatGPT or Claude can provide flexible structural feedback; Grammarly checks prose; vidIQ and TubeBuddy handle discovery and channel workflow rather than script analysis. Test any analyzer against a published video whose retention graph you already know. ## What a script analyzer does (and what gets mislabeled as one) A YouTube script analyzer reads the script you plan to record and tells you where it is weakest while you can still change it: where the hook gives no reason to stay, where pacing sags, and which passages are most likely to lose attention. On the pages checked in September 2026, two tools do that audit job for long-form YouTube: Prepublish and RetentionYT. Retensis Script Coach is built for short-form, the Vidalytics analyzer sits behind a $119 per month video-hosting plan and targets sales scripts, and Story Lint scores your beats but never writes a replacement line. Script generators, grammar checkers and SEO suites get called analyzers too; they draft new text, check sentences, or report on videos you have already published. The point is timing. YouTube Studio shows you the same information days after publishing, when the only thing you can do with it is regret. The term gets applied loosely, so it helps to sort the tools people mention into what they really do. Grammar checkers like Grammarly analyze sentences, not watch time. SEO suites like vidIQ and TubeBuddy analyze keywords and published-video performance, and vidIQ will also generate a script draft for you, but none of them audits the draft you already wrote. AI writers like Subscribr generate scripts but do not audit the one you already wrote. General chatbots like ChatGPT will critique a script if you prompt them well, with no specific grounding in retention behavior. That leaves a short honest list, and yes, our own tool is on it. Prepublish is built for exactly this job, so this comparison is not neutral. What we can promise is accuracy about what every tool does and does not do, including ours. The gaps are stated plainly, prices were reviewed in July 2026, and where a competitor is the better fit for you, this guide says so. If you want the wider picture beyond analysis, covering research, drafting, and packaging tools too, read the [best YouTube script tools guide](/guides/best-youtube-script-tools). This page stays on one question: you have a script, and you want to know where it carries hold risk. ## Every option compared Here is the whole field in one table. Details and fair caveats for each tool follow below. | Tool | What it checks | Attention-risk map | Price | Best for | | --- | --- | --- | --- | --- | | Prepublish | Hook strength, pacing, drop-off points, title match | Yes, script-hold risk map with flagged high-risk passages | Free check; $29/mo or $290/yr | Auditing a script before you record | | ChatGPT / Claude | Whatever you prompt for | No, general judgment only | Free tiers; about $20/mo | Writers who want a flexible second opinion | | Subscribr | Drafts inside its own writing workflow | No | Free plan; paid plans from $99/mo | Creators generating scripts with AI | | Grammarly / Hemingway | Grammar, readability, sentence length | No | Free tiers | Cleaning up prose | | vidIQ / TubeBuddy | Keywords, tags, post-publish analytics; vidIQ also generates script drafts | No | vidIQ Boost $16.58/mo billed yearly, $19 monthly | Discovery, SEO, and drafting a script from scratch | | RetentionYT | Script audit: hook strength, pacing, repetition, likely drop-off zones; re-audit after edits | The audit flags drop-off zones; marketing demos show estimated retention percentages, and its AI Disclaimer page says scores are estimates not sourced from YouTube data | Free: 2 audits/mo and 1 rewrite; Creator $190/yr (15.83/mo equivalent), 30 audits/mo, 50 rewrites, 2 seats | The closest like-for-like audit workflow: audit, rewrite, re-audit | | Retensis Script Coach | Scores hook strength, pacing rhythm, clarity, and engagement; rewrites weak sections (short-form focus) | No; per-dimension scores | Free: 2 analyses/mo; $9.99/mo for 30 analyses; Pro $14.99/mo adds Script Coach | Short-form scripts needing targeted section rewrites | | Vidalytics AI Script Analyzer | Parses an existing sales or VSL script into hook, problem, solution, social proof, offer, and CTA; audits rather than generates | Not stated on the pages checked | Bundled with Vidalytics hosting: Premium $119/mo and up | Direct-response and sales video scripts inside their hosting platform | | Story Lint | Lints structure, pacing, and beat format; scores against creator-style templates | No; it deliberately never rewrites your words | Free: 3 analyses/mo; $19.99/mo and $49.99/mo tiers | A structure critic, when you want notes without rewrites | | XCut AI | Scores a YouTube or TikTok script for retention risk, pacing, and hook strength before you film (stated in its meta description; the page body is client-rendered) | Not stated | Free to start | A quick pre-film risk score | | GenScript (genscript.io) | Checks a script against YouTube's authenticity policy: AI patterns, originality markers, compliance | No | Not published on the page checked | Compliance checking before you film | | ZenAion (zenai.bot) | Desktop-app script auditor: hook evaluation, keyword checks, retention and pacing mapping | Their page claims retention and pacing mapping | Not published on the pages checked | A desktop skill (macOS build; the name is also used by an unrelated company, so check the domain) | | Maekersuite | Published-video research plus AI script writing and editing | No | Personal $23/mo ($18 on yearly); Pro $79/mo per user; Agency $99/mo per user, minimum 3 | Research and drafting in one pre-production workspace | | OverseerOS | Published-video pattern research plus script generation; no existing-draft audit claimed | No | Not published on the page checked | Research-backed drafting workflow | One omission, stated plainly: YouGenie appears in some roundups of script analyzers. Checked on 2026-09-13, its script-analyzer URL redirects to a homepage that describes thumbnail, description and competitive-insight tools rather than script auditing, so there is nothing to compare on the audit job and it is left out rather than guessed at. Two things stand out from the table. First, only one tool in the category maps attention risk from the script itself. That is not because the idea is secret; it is because everyone else anchored their product on discovery or generation, where the market was bigger. Second, the free tiers differ in kind. Everything on the list including ours is a subscription for full use, but the script check here runs without an account or a card, so the analysis quality is visible before any subscription enters the conversation. ## What our 1,290-video research says an analyzer should check A useful YouTube script analyzer should not reward generic “high-retention” folklore. Prepublish tested opening patterns across two datasets: an initial study of 349 videos from larger channels and a preregistered replication covering 941 videos from channels with 1,000 to 20,000 subscribers. The cleanest result was a warning against simplistic scoring. Speaking pace was nearly identical between hits and flops in both datasets. Several opening patterns from the first study did not replicate on smaller channels. Greeting openings were the one signal that leaned toward flops in both studies, but even that is an association rather than proof that a greeting causes a video to fail. That evidence changes what an analyzer should do. It should not subtract points merely because a creator speaks slowly or award points for superficial intensity. It should inspect whether the opening engages the title's promise, whether it gives the viewer a concrete reason to continue, where the script delays delivery, and whether later sections repeat rather than escalate. Read the full [349-video hook study](/blog/youtube-hook-study) and the [941-video replication](/blog/small-channel-hook-study); both include their limitations, and the row-level data is public. ## Prepublish: built for exactly this job Full disclosure once more: Prepublish is our tool. It exists because the authors kept watching good ideas die in YouTube Studio for reasons that were visible in the script all along. You paste a script (or a video link for transcription) at [the upload page](/upload). The free check returns your scores and the single highest-risk passage, with no account required. The full audit adds the complete script-hold risk map, every flagged drop-off point, copy-paste rewrites for the hook and weak sections, and a title rewrite. The full audit is part of the [$29 per month plan (or $290 per year)](/pricing?ref=guide-best-analyzer), which covers up to 50 audits a day plus saved history and PDF export. A real run on a complete script is preserved at the [example analysis](/example-analysis): the scores, the script-hold risk map, and flagged passages with rewrites. It shows what the tool produces; it is not a view forecast. What the analysis looks at: whether the first 30 words give a viewer a reason to stay, where long stretches of setup run without a payoff, where pacing drifts against the 154 to 201 words per minute range the middle half of our corpus sits in, and whether the script delivers what the title promises. These are the same checks described in our [manual 10-minute method](/guides/check-youtube-script-before-recording); the tool runs them consistently and finds the patterns self-review misses, because you wrote the script and your brain fills the gaps in it. The [AI vs manual review comparison](/blog/script-analysis-vs-manual-review) maps exactly where each approach wins. What Prepublish does not do: keyword research, topic ideation, script generation, or channel analytics. If you need a script written for you, use Subscribr or ChatGPT and come back with the draft. If nobody can find your videos at all, fix discovery first with vidIQ or TubeBuddy. The honest sequencing is in [what script analysis actually involves](/guides/what-is-youtube-script-analysis). ## ChatGPT and Claude: the do-it-yourself analyzer A general chatbot is the most common way creators check scripts today, and it is genuinely useful if you treat it as a smart reader rather than a retention model. The strengths are flexibility and price. You can ask for exactly the critique you want, feed it context about your channel, and iterate for free or about $20 a month. For judging whether an argument flows or an explanation is clear, frontier models are strong. The weakness is that a chatbot has no grounding in what YouTube viewers do. It has never seen a retention curve next to the script that produced it. Ask it "will this hold attention?" and you get plausible-sounding generalities, delivered with equal confidence whether they are right or wrong. It also tends toward politeness: push it and it praises, push differently and it criticizes, and neither tells you what viewers will do at minute four. If you go this route, prompt it with structure instead of vibes. Something like: "You are reviewing a YouTube script. Quote the first 30 words and say whether they contain a concrete reason to keep watching. List every stretch longer than 60 seconds of speaking time that contains setup but no payoff. Flag any section that repeats a point already made. Do not compliment anything." That gets you a decent structural pass, which is most of what a script needs, and it is the workflow our [prepublish-vs-chatgpt comparison](/compare/prepublish-vs-chatgpt) walks through in detail. The honest verdict: a well-prompted chatbot is the best free script analyzer available. A purpose-built one earns its price by being consistent, retention-grounded, and immune to flattery. ## Grammarly and Hemingway: sentence quality, not watch time Writing checkers come up in every "script analyzer" search, so they belong in the comparison, mostly to mark the boundary of what they do. Grammarly catches grammar, typos, and tone. Hemingway flags long sentences, passive voice, and dense paragraphs. Both have free tiers, and both make prose cleaner. For a script that will be read aloud, Hemingway's bias toward short sentences is genuinely helpful, since spoken sentences need to be shorter than written ones. Neither knows anything about viewers. A script can score perfectly on readability while opening with 45 seconds of throat-clearing, promising something in the title it never delivers, and burying its best moment at minute nine. Every one of those problems is invisible to a grammar checker, and any one of them costs more retention than every typo in the script combined. There is also a subtler mismatch: these tools optimize toward standard written English, and spoken scripts often should not be standard. Sentence fragments land well on camera. Starting with "And" works. Reading your script aloud, which the [10-minute check](/guides/check-youtube-script-before-recording) covers, catches awkward phrasing better than any readability score because your mouth finds what your eyes forgive. Use one of these as a final polish pass after the structural problems are fixed. Just do not mistake clean prose for a video people will finish. ## Subscribr: feedback inside a writing tool Subscribr is the strongest AI script writer for YouTube, and its editor gives feedback on drafts as part of the writing flow. That makes it the closest thing to an analyzer among the generation tools, so it deserves a fair look. What it does well: generation with voice training that learns your channel's style, research ingest for source material, idea generation ranked by outlier potential, and an editing pass inside its own workspace. If your bottleneck is producing scripts at all, especially for a faceless channel shipping several videos a week, Subscribr is built for you, and our [full comparison](/compare/prepublish-vs-subscribr) says so plainly. The differences that matter for analysis: Subscribr's feedback exists to improve drafts it is helping you write, not to audit an arbitrary script against predicted viewer behavior. There is no retention curve and no drop-off prediction. Pricing is also a different commitment: plans are billed annually only, with the Creator tier at about $49 per month and script generation metered by credits. You start with a $7 first week, then the annual plan begins. That structure makes sense for a tool you write in daily. It is a lot of subscription for the creator who writes their own scripts and wants a check before recording. The two tools stack more than they compete: draft in Subscribr, then audit the output before filming, because generated scripts fail in predictable places (hooks that summarize instead of provoke, middles that list instead of build) and an analyzer catches exactly those. ## VidIQ and TubeBuddy: discovery and drafting, not draft audits This section exists because "does vidIQ analyze scripts" is one of the most common questions in this category. The narrow answer: vidIQ ships a Script Writer that generates drafts, and no vidIQ page claims it audits a finished draft written elsewhere. TubeBuddy, same answer. Both are discovery and channel-management suites. vidIQ does keyword research, competitor tracking, trend surfacing, and AI-assisted ideation, with Boost at $16.58 per month billed annually or $19 month to month, and its Script Writer generates drafts from a topic. Neither product claims to audit a finished draft written elsewhere; that audit is the job Prepublish does. TubeBuddy does A/B testing for titles and thumbnails, bulk metadata edits, and tag tools. Both analyze your videos after they are published, through the lens of search and packaging. Neither reads a script. The confusion is understandable, because both products talk about "optimizing your video before you publish." They mean metadata: title, tags, description, thumbnail. The content itself, the 1,500 words you are about to say into a camera, never enters their pipeline. You can have a perfect vidIQ SEO score on a video that loses half its audience in the first minute, and the tool will not have seen it coming. The practical takeaway is about sequencing, not either-or. Discovery tools decide whether people click. The script decides whether they stay, and staying is what the algorithm pays for in recommendations. If you already use vidIQ or TubeBuddy and your impressions are fine but your average view duration is not, the tool you are missing sits on the script side. The full side-by-sides are at [prepublish-vs-vidiq](/compare/prepublish-vs-vidiq) and [prepublish-vs-tubebuddy](/compare/prepublish-vs-tubebuddy). ## Automated audit versus human review An automated audit and a human reviewer see different things, and a serious draft usually deserves both. What an automated audit sees, every time, in seconds: text-level structure, where the payoff lands relative to the setup, pacing and sentence-length drift, hook specificity, and whether passages match published YouTube policy categories. It applies the same rubric to draft five as it did to draft one. What a human reviewer sees that it cannot: whether the story earns the stakes it sets, whether the topic fits this audience this month, whether a joke lands, and whether the argument is one a viewer would repeat to a friend. George Blackman sells a YouTube script audit with written and video feedback, and freelance reviewers on Upwork cover the same ground at different prices. A human reads meaning; an audit reads structure. The practical order: run the audit for the mechanical pass, then pay a human for the judgment calls the audit cannot make. If the budget covers one, the audit catches the structural failures first, because a reviewer cannot tighten a script that has no payoff to build on. ## What each tool refuses to do No tool in this comparison will promise you an outcome, and the honest ones say so in writing. Prepublish returns a relative script-hold index across the draft and flags passages. It does not predict your published retention graph, does not guarantee views, and its own caveat says results depend on delivery, editing, packaging, and topic. RetentionYT goes further than most: its AI Disclaimer page states that its scores are estimates, do not guarantee YouTube performance, and are not sourced from YouTube Studio or any real audience data, even though its marketing shows estimated retention percentages. Story Lint refuses to rewrite your words at all: it scores structure and beat format and hands the fixing back to you, by design. Vidalytics confines its analyzer to script text on Premium and Enterprise hosting plans and states that it will not modify video timelines or audio. GenScript limits itself to authenticity and compliance checking. XCut AI scores a draft and stops. The pattern worth noticing: the tools that refuse to promise outcomes are the ones whose refusals you can verify. Treat any script tool that guarantees views, watch time, or retention as a vendor to avoid. ## How to test any analyzer before spending anything There is a clean way to evaluate a script analyzer, and almost nobody does it: run it on a script whose results you already know. Take a video you published months ago. Find its original script. Run the script through the analyzer, then open the real retention graph in YouTube Studio and put the two side by side. You are checking one thing: did the tool flag the places where real viewers really left? This test works because you hold the answer key. If the analyzer says your hook was strong and Studio shows 40% of viewers gone by second 25, the tool failed. If it flagged the exact minute where your graph cliffs, the tool is seeing something real. Run it on two or three videos, ideally one that performed well and one that flopped, so you can tell whether the tool distinguishes them or grades everything the same. The same test exposes chatbots' inconsistency: ask ChatGPT to analyze the same script twice in fresh conversations and compare the two verdicts. If they disagree about where the weak points are, you have measured how much grounding the judgment has. This is also the cheapest possible evaluation. The Prepublish free check costs nothing and shows the highest-risk passage, which is precisely the thing to verify against your Studio graph. Running it against one video whose graph you already know settles whether the analysis earns its price for your channel, before any subscription enters the conversation. Our [example analysis](/example-analysis) shows the full output format if you want to see it before running your own. ## What no analyzer will catch Ending on honesty: some things that decide a video's fate are invisible to every tool on this page, including ours. Delivery is the big one. The same script performs differently read with energy versus read flat, and no text analysis sees your face or hears your pacing. Editing is next: b-roll, cuts, and visual pacing rescue slow script moments and can also ruin good ones. Packaging sits upstream of everything, because the best-analyzed script on earth gets zero retention if the title and thumbnail earn no click. Our free [title analyzer](/tools/youtube-title-analyzer) covers a slice of that, and the discovery suites above cover more. Topic selection is the deepest blind spot. An analyzer evaluates how well the script executes the idea, not whether the idea deserves a video. A flawlessly structured script about something nobody cares about will be flawlessly ignored. Research tools like 1of10, covered in the [script tools guide](/guides/best-youtube-script-tools), address that question; no script-level tool does. So the honest job description is narrower than the marketing anywhere in this category: a script analyzer removes the failure modes that live in the text. Weak hooks, saggy middles, broken title promises, misjudged length. Those text-level failures happen to cause most early drop-off, which is why the category is worth money at all. But the tool is one checkpoint in a chain that still includes your idea, your delivery, and your edit. Anyone selling more than that is selling too much. ## FAQ Q: Is there an AI that can analyze my YouTube script? A: Yes. Prepublish is built specifically for it: paste your script and it maps attention risk, flags the passages most likely to lose attention, and returns rewrites for weak sections. The basic check is free and the full audit is $29 per month. General chatbots like ChatGPT can also critique a script if you prompt them with specific structural questions, though they have no grounding in real viewer behavior and their judgments vary between runs. Q: What does a YouTube video script analyzer check? A: A YouTube video script analyzer checks the draft before filming: whether the opening fulfills the title’s promise, whether the viewer receives a concrete reason to continue, where pacing or structure delays the payoff, and which sections repeat or lose focus. A purpose-built analyzer can turn those findings into a script-hold risk shape and prioritized rewrites. It cannot see performance, visuals, editing, thumbnail quality, or topic demand, so its forecast should be treated as a script-stage risk assessment rather than a guaranteed retention percentage. Q: Does vidIQ or TubeBuddy analyze scripts? A: No. Both are discovery and channel-management tools. vidIQ handles keyword research, trends, and competitor tracking; TubeBuddy handles title and thumbnail A/B tests, tags, and bulk metadata edits. Both analyze videos after publishing through the lens of search and packaging. Neither reads a script or maps its attention risk. They pair well with a script analyzer: they decide whether people click, the script decides whether people stay. If you came here looking to replace one of them, the [TubeBuddy alternative](/alternatives/tubebuddy-alternative) and [vidIQ alternative](/alternatives/vidiq-alternative) pages cover what transfers and what does not. Q: Can ChatGPT analyze my YouTube script? A: It can give a useful structural critique if you prompt it precisely: ask it to quote your first 30 words and judge whether they contain a reason to keep watching, to list every long stretch of setup without a payoff, and to flag repetition, while telling it not to compliment anything. What it cannot do is map attention risk against a consistent rubric, because it has never seen retention data paired with scripts. It also grades inconsistently: the same script in two fresh chats often gets two different verdicts. Q: What is the best free YouTube script analyzer? A: Two realistic options. The Prepublish free check analyzes your script and shows your scores plus the single highest-risk passage at no cost, with no account required. A carefully prompted ChatGPT or Claude session is the best fully free alternative for structural feedback. For mechanical checks, free tools like a script word counter and a words-to-minutes calculator confirm your script matches its planned length at your own measured pace (the median in our 3,923-video corpus is 178 words per minute of finished video). Q: How reliable is an AI attention-risk map? A: Treat it as directional, not exact. No tool can predict a retention percentage to the decimal, because delivery, editing, and packaging all affect the final graph after the script is written. What a good analyzer reliably finds is the location and cause of likely drop-offs: a hook without a reason to stay, a three-minute stretch of setup, a broken title promise. Verify accuracy yourself by running a script from a video you already published and comparing the flagged points against your real YouTube Studio graph. Q: How much does a YouTube script analyzer cost? A: Prepublish runs a free basic check and a $29 per month plan (or $290 per year) with up to 50 audits a day. The adjacent tools people compare are all subscriptions: vidIQ Boost is $16.58 per month billed yearly or $19 month to month, Subscribr starts at $99 per month for its cheapest paid plan, and ChatGPT Plus is about $20 per month. If you only need one script checked before an important video, the free check still shows the biggest problem and its rewrite; the paid plan unlocks every remaining fix. Q: Which script analyzer should I pick? A: Match the tool to the job. If you already have a draft and want to know where it is weakest, use one of the two tools here that audit an existing script. If you have not written it yet, a generator fits better. If you want a free second opinion on wording and structure, a prompted chatbot session is enough. Whichever you pick, verify it against a published video whose retention graph you already know. Q: Is a YouTube script checker the same as a script analyzer? A: The terms are used interchangeably, with a small difference in emphasis: a checker checks a draft against a fixed list, while an analyzer reports where the risk sits and rewrites the weakest passage. Either way the input is the text of the script, so the tool reads the draft and never the audience. Q: Do these analyzers work on YouTube Shorts scripts? A: Most tools in this category are built for long-form drafts with a hook, a body, and a payoff. Shorts are shorter and loop-based, so a tool designed for that format will fit better than a long-form auditor. Test any analyzer on a Short you have already published, and compare its flags with what YouTube Studio reports for that Short before you rely on it. --- # How to Increase Watch Time on YouTube (What Actually Moves It) URL: https://prepublish.ai/guides/increase-youtube-watch-time Updated: 2026-07-13 TL;DR: Watch time equals views times average view duration (AVD), and AVD is the lever creators control. Raise it with seven script-level fixes: confirm the title promise in the first 10 seconds, deliver real value inside 60 seconds, replace setup with structure, plant a re-engagement beat at the 25-30% mark, cut tangents, vary pacing, and end at the payoff. Do not pad video length: padding creates retention cliffs that reduce distribution and total watch time. For monetization, 4,000 hours equals 240,000 minutes, so a channel at 6 minutes per view needs half the views of a channel at 3. ## What watch time is and why YouTube optimizes for it Watch time is the total number of minutes viewers spend watching your video, summed across all views. It is the currency of the platform: YouTube's stated goal is to keep people watching, so its recommendation system distributes videos that generate the most expected watch time per impression. The formula has only two inputs: **Watch time = views × average view duration (AVD)** That decomposition matters because the two inputs are moved by completely different levers. Views are moved by packaging (title, thumbnail, topic selection) and by distribution you mostly do not control. AVD is moved by the script and the edit, which you control completely. Here is the loop most creators miss: AVD drives views. When your AVD is high, YouTube's expanding test keeps widening your audience, which multiplies views, which multiplies total watch time again. When AVD is weak, no packaging fix can compensate, because every viewer the packaging wins is a viewer the video loses minutes later. The mechanics of that test are covered in the [retention guide](/guides/youtube-retention-guide). So "how do I increase watch time" almost always reduces to "how do I increase average view duration." That is the assumption the rest of this guide runs on. ## The video-length trap The most common watch-time advice is also the most destructive: "make longer videos, they accumulate more minutes." The math sounds right. A 20-minute video at 30% retention yields 6 minutes per view; a 10-minute video at 50% yields 5. But the comparison assumes the longer video keeps its views, and it usually does not. Stretched videos hold retention worse, and weaker retention means the algorithm's test stops earlier, which means fewer views, which means less total watch time. You optimized the multiplicand and destroyed the multiplier. The honest rule: length is an output, not an input. Script the idea at the depth it deserves, then cut until every section earns its place. If the result is 8 minutes, it is an 8-minute video. Padding toward a length target creates a retention cliff at the exact timestamp where the padding starts, and viewers who hit a padded section do not skip it, they leave. Longer videos do win when the topic genuinely sustains them: deep tutorials, documentaries, well-paced video essays. A 25-minute video that holds 40% generates 10 minutes per view, which is exceptional. The difference is that those videos are long because the material demands it, not because a watch-time strategy did. ## The seven fixes that actually raise AVD Every one of these is visible in the script before recording. **1. Confirm the click in the first 10 seconds.** The viewer clicked a specific promise. Your first sentences must signal "you are in the right place." The single largest drop in almost every retention curve happens in the first 30 seconds, and most of it is promise mismatch, not hook weakness. See [the first 30 seconds guide](/guides/first-30-seconds) for structures. **2. Deliver real value before the 60-second mark.** Not a tease of value. An actual fact, insight, or result the viewer did not have. Early value creates commitment; viewers who have already gained something stay for more. **3. Front-load structure, not context.** Setup sections ("before we start, some background...") are where AVD goes to die. Give context in one sentence where needed, not in a dedicated act. **4. Plant a re-engagement beat at the 25-30% mark.** An open loop, a preview of the strongest point, a stake raise. This is where initial curiosity wears off; give the viewer a concrete reason to cross the middle. **5. Cut every tangent.** Apply one test to each section: does this serve the promise in the title? Tangents feel personal and relevant while writing; on the retention graph they are cliffs. **6. Vary the rhythm.** Monotonous pacing (same sentence length, same energy, same visual cadence) bleeds viewers steadily even when the content is good. Alternate short and long sentences, dense and light sections, and place [pattern interrupts](/guides/youtube-pattern-interrupts) where attention sags. **7. End at the payoff.** The moment the promise is delivered, the video is over. Recaps, second CTAs, and "one more thing" segments train the retention curve to nosedive, and end screens on a dead audience do nothing for session watch time. ## Watch time beyond one video: sessions and series YouTube credits your channel for the viewing session you start, not only the minutes on one video. Two structural plays compound here. **Series and playlists.** A viewer who finishes episode 2 of a series and starts episode 3 just doubled the watch time your channel generated, and playlist autoplay makes the handoff frictionless. Series work best when each episode delivers standalone value and ends by opening the next question, the same open-loop mechanic that works inside a script, applied between videos. **End-screen chaining with intent.** Pointing at "a random other video" underperforms. Point at the video that answers the question your current video just raised. The click-through on end screens is small, but the viewers who do click are your highest-retention audience, and their sessions are long. One warning: none of this compensates for weak individual videos. Session strategy is a multiplier on top of AVD, not a substitute for it. A channel of 30%-retention videos chained together is a chain of exits. ## The 4,000-hours math for monetization YouTube's Partner Program requires 1,000 subscribers and 4,000 valid public watch hours in 12 months (or the Shorts-views route). 4,000 hours is 240,000 minutes. The way that number falls, or does not, is almost entirely an AVD story. A channel averaging 3 minutes per view needs 80,000 views in 12 months. A channel averaging 6 minutes per view needs 40,000. Same target, half the audience, purely from script structure. Run your own math: multiply your current AVD (in Studio under Engagement) by your average views per video, and divide 240,000 by the result. That is how many videos stand between you and monetization at your current quality. Then note what a 2-point AVD improvement does to that count. For most small channels it removes months from the timeline. This is why "upload more" is the slowest possible route to 4,000 hours. Doubling output at 35% retention is grinding; moving retention from 35% to 50% is compounding, because every future video benefits and old videos keep collecting search traffic. Benchmarks by video length are in the [2026 retention benchmarks](/blog/youtube-retention-benchmarks-2026). ## How to know before you record Everything on this list is a property of the script. Promise confirmation, early value, tangents, re-engagement placement, rhythm, ending point: all of it exists in the text before the camera turns on, which means all of it is checkable before the expensive part of production. The manual version: read your script and mark the timestamp equivalent of every section (130-160 words per minute, or use the [words-to-minutes calculator](/tools/words-to-minutes)). Then ask, at each minute mark, "what does the viewer get in the next 60 seconds?" Any minute without an answer is a drop-off waiting to happen. The automated version: [Prepublish](/upload) reads the script and returns a script-hold risk map, hook scoring, section-level pacing flags, and copy-paste rewrites for the weakest passages, in under a minute. Run it before recording, fix the flagged sections, and the watch-time problem gets solved at the only stage where fixing it is cheap. ## FAQ Q: How do I increase watch time on YouTube? A: Raise average view duration, not video length. Confirm the title promise in the first 10 seconds, deliver real value inside the first minute, cut setup and tangents, plant a re-engagement beat at the 25-30% mark, vary pacing, and end the video at the payoff. AVD improvements compound because higher retention also earns more recommendations. Q: Does making longer videos increase watch time? A: Usually not. Longer videos accumulate more minutes per view only if retention holds, and padded videos hold worse. Weaker retention stops the algorithm's expanding test, which cuts views, which cuts total watch time. Length should be an output of how much the topic deserves, not a target. Q: How long does it take to get 4,000 watch hours? A: That is 240,000 minutes divided by your minutes per view. A channel averaging 3 minutes of watch per view needs 80,000 views within 12 months; at 6 minutes per view it needs 40,000. Improving average view duration through script structure shortens the timeline more reliably than uploading more often. Q: What counts as watch time on YouTube? A: Total minutes viewers spend watching your public videos, summed across all views, including rewatches. For Partner Program eligibility, the 4,000 hours must be valid public watch hours from the last 12 months: private, unlisted, deleted videos and most Shorts watch time do not count toward the long-form requirement. Q: Is watch time or retention more important? A: They are the same lever at different scales. Retention (percentage watched) is the per-video diagnostic; watch time (total minutes) is what YouTube optimizes for and what monetization requires. High retention on honest packaging produces high watch time. Chasing watch time directly, through padding or length targets, usually damages both. Q: Can I predict watch time before publishing? A: The AVD side, yes, approximately. Pacing, hook strength, section length, and promise-delivery structure are measurable from the script. Prepublish analyzes a script and returns a script-hold risk map with section-level flags and rewrites before you record, which is the only stage where structural fixes are cheap. --- # Do Hooks Matter for Small YouTube Channels? What 941 Videos Show (2026) URL: https://prepublish.ai/guides/do-hooks-matter-small-youtube-channels Updated: 2026-07-25 TL;DR: A preregistered study of 941 videos from 96 channels with 1,000 to 20,000 subscribers found hit and flop openings nearly identical: none of the three hook patterns that separate hits from flops on larger channels appeared, despite 94 to 98.5 percent power to detect them. Hook anatomy is unlikely to be why a small channel's video underperforms; topic and packaging are the prime suspects. Openings still matter for retaining viewers who click. ## The short answer, with its boundaries For deciding which of a small channel's videos takes off: the measurable anatomy of the opening is very unlikely to be the deciding factor. For keeping the viewers who already clicked: openings still matter, and nothing in the new data touches that. That distinction is the whole page. Most hook advice is measured, when it is measured at all, on large channels. In July 2026 we published [a study of 349 videos](/blog/youtube-hook-study) from channels between roughly 21,000 and 6.6 million subscribers, comparing each channel's biggest hits against its own flops. Three opening patterns survived per-channel statistical testing. Then we tested whether those patterns replicate on channels between 1,000 and 20,000 subscribers, and preregistered the whole study so the answer would publish either way. ## The small-channel replication in numbers The replication covered 96 analyzable channels and 941 videos with 31.8 million combined views. The three predictions, their frozen verdict rules, the channel list, and the statistical tests were locked in a public registry (osf.io/2zq9p) before a single hook was collected. All three predictions came back "can't tell." Across the analyzed videos, openings that engage the title's promise: 79.2% of hits, 80.4% of flops. Openings containing a specific number: 47.2% against 47.4%. Claim-or-result-first openings: 22.2% against 19.8%, nowhere near statistical significance at the channel level. On each pattern, 39 to 44 of the 96 channels showed the feature at exactly the same rate in their hits and their flops. The study had 94 to 98.5 percent power to detect effects the size of the original ones, so the misses are informative: effects that strong very likely do not exist at this channel size. Smaller effects remain unresolved. The full numbers are in the [small-channel study](/blog/small-channel-hook-study), and every row is checkable in the public CSV. ## The one signal that repeated One preregistered exploratory outcome stood out: greeting openings ("hey guys, welcome back") appeared in 23.3% of flop openings against 16.6% of hits, leaning toward flops in 33 channels against 11. It was registered as exploratory, so it gets no verdict, and it is an association rather than a proven cause. But it leaned the same direction in the original study, which makes it the only opening signal to repeat across both datasets. If you keep one habit from this page: [do not spend your first seconds on channel talk](/guides/should-you-start-youtube-video-with-greeting). ## Where a small channel's effort should go instead If openings do not decide which small-channel video takes off, something else does. The study did not measure what, but the remaining candidates operate before a single second of the video plays: topic choice and packaging, meaning the title and thumbnail that earn the click. The practical reallocation: stop rewriting your opening for the fifth time and spend that hour pressure-testing the topic and the title. Then, for the viewers who do click, the retention questions stay live: does the opening [engage the title's promise](/guides/first-30-seconds), does it give a reason to keep watching, does the middle hold? Those are script questions, and they are checkable [before you record](/guides/check-youtube-script-before-recording). ## FAQ Q: Do hooks matter for small YouTube channels? A: For deciding which video takes off: the data says probably not. A preregistered 941-video study of channels between 1,000 and 20,000 subscribers found hits and flops open nearly identically on every measured feature. For keeping viewers who already clicked, openings still matter; that is a separate retention question the study did not measure. Q: Why do hook patterns work on big channels but not small ones? A: The study established the difference, not the cause. The leading explanation: on small channels, view counts are dominated by whether the algorithm and the packaging earn the click at all, which happens before the opening plays. On larger channels with steadier baseline traffic, differences in what the opening contains have room to show up in the numbers. Q: Should small channels ignore hook advice completely? A: No. Two boundaries: the finding covers which videos get views, not whether clicked viewers stay, and one signal did repeat in both studies: greeting openings leaned toward flops (23.3% of flop openings vs 16.6% of hits on small channels). Skip the channel talk, get to the content, and spend the saved rewriting time on topic and packaging. --- # Why Did My YouTube Video Flop? What 1,290 Videos Say (2026) URL: https://prepublish.ai/guides/why-did-my-youtube-video-flop Updated: 2026-07-25 TL;DR: The median flop does about 0.31x of its channel's normal views, so flops miss big, not small. On channels under 20,000 subscribers, a preregistered 941-video study found openings are rarely the differentiator: hits and flops open nearly identically. Check causes in order: topic choice first, title and thumbnail second, script and retention third. Greeting openings leaned toward flops in both available studies. ## What a flop looks like in real numbers In a study of 96 channels between 1,000 and 20,000 subscribers, each channel's bottom five videos by views were compared against its top five. The flops were not near-misses: the mildest flop in the entire dataset did 0.88x of its channel's median views, 78% did less than half of normal, and the median flop did 0.31x. Hits ran a median 4.67x of channel-normal. That spread is worth internalizing before diagnosing anything: on small channels, videos do not miss by a little. They either clear the channel's baseline or land far under it, which points at causes that act early and binarily, before watch-time dynamics get a chance to matter. ## The suspect that mostly is not it: your opening The most common self-diagnosis after a flop is "my hook was weak." For small channels, the data argues against that as the default explanation. A [preregistered study of 941 small-channel videos](/blog/small-channel-hook-study) found hits and flops open nearly identically: title-promise engagement, specific numbers, claim-first structure, time to the point, and speaking pace all showed no meaningful separation. The study had 94 to 98.5 percent power to catch effects the size of those found on bigger channels, and caught none. On larger channels (21,000 subscribers and up), the picture differs: [three opening patterns did separate hits from flops](/blog/youtube-hook-study). So "fix your hook" is not wrong advice everywhere. It is weakly supported advice below roughly 20,000 subscribers. ## The checking order the data suggests First, topic. Was this a subject your audience demonstrably wants from you? The strongest small-channel outcome differences appear between videos, not within their openings, and topic is the biggest between-video variable you control. Second, packaging. The title and thumbnail decide the click, and the click decides everything downstream. A flop with strong impressions but a weak click-through rate is a packaging problem, and YouTube Studio shows you both numbers. Third, the script, for the videos that got clicks but bled viewers. If Studio shows normal CTR but the retention curve collapses early, the opening and structure are back on the table: does the first line [engage what the title promised](/guides/first-30-seconds), does it give a reason to keep watching, is there a payoff before the setup? One habit is cheap to drop either way: greeting openings leaned toward flops in both studies (23.3% of small-channel flop openings vs 16.6% of hits). And sometimes, honestly: none of the above. With small view counts, luck is loud. The same 96-channel study found 39 to 44 of 96 channels where hits and flops were statistically indistinguishable on opening features; single-video outcomes at low volume carry real randomness that no checklist eliminates. ## What to do before the next upload The flop already happened; the leverage is in the next video. Pressure-test the topic against what your audience has already rewarded: the [Comment Miner](/tools/youtube-comment-miner) groups your public comments into the questions viewers keep asking, which is a cheap way to check whether anyone was asking for the video that flopped. Write the title and thumbnail concept before the script so the video has a promise to keep. Then [check the script before recording](/guides/check-youtube-script-before-recording): the free check reads your script and flags where viewers are likely to leave, which is the one stage where fixes cost a rewrite instead of a reshoot. ## FAQ Q: Why did my YouTube video get no views? A: Work through three causes in order. Topic: was this something your audience has demonstrably rewarded before? Packaging: did impressions convert to clicks (YouTube Studio shows CTR)? Script: for videos that got clicks but lost viewers, check the retention curve. On small channels, data from 941 videos says the opening itself is rarely what separates hits from flops, so start upstream of the script. Q: Is one flop a reason to change strategy? A: No. In a 96-channel study, flops ran as deep as 0.31x of normal views on healthy channels; big misses are part of the normal distribution at small scale, and 39 to 44 of 96 channels had hits and flops that were statistically indistinguishable on opening features. Change course on patterns across several videos, not on one outcome. Q: Do bad hooks cause videos to flop? A: Below roughly 20,000 subscribers, the evidence says usually not: a preregistered study found hit and flop openings nearly identical, with high statistical power. On larger channels, three opening patterns (engaging the title's promise, giving a concrete reason to watch, leading with a claim or result) did separate hits from flops. The one habit that leaned toward flops at every size was opening with a greeting. --- # Does Talking Faster Help YouTube Videos? 1,290 Videos Say No (2026) URL: https://prepublish.ai/guides/does-talking-faster-help-youtube Updated: 2026-07-25 TL;DR: No. Across two studies and 1,290 videos, hit and flop videos speak at nearly identical pace: median 181 vs 180 words per minute on channels above 21,000 subscribers, 169 vs 170 on channels between 1,000 and 20,000. YouTube delivery is faster than conversation, but within that normal range extra speed separates nothing. What separated hits on larger channels was what the opening says, not how fast. ## The numbers In [a study of 349 videos](/blog/youtube-hook-study) from channels between roughly 21,000 and 6.6 million subscribers, each channel's biggest hits were compared against its own flops. Median speaking pace of the overperformers: 181 words per minute. Median of the flops: 180. Statistically identical. The [small-channel replication](/blog/small-channel-hook-study) (941 videos, channels between 1,000 and 20,000 subscribers) found the same non-difference: median 169 words per minute for hits, 170 for flops. Speaking pace was measured across the full video from public captions in both studies. ## Why the advice exists anyway "Talk faster" hardened into default advice because YouTube delivery genuinely is faster than conversation. Conversation runs slower than YouTube delivery; the creators in both datasets run 170 to 180 words per minute of finished video. The advice correctly describes what YouTube sounds like. What it gets wrong is the implication that more speed keeps separating winners once you are in the normal YouTube range. In 1,290 measured videos it does not. The hits are not the fast ones. Flops talk exactly as fast as hits and flop anyway. ## What to do with this If you have been re-recording takes to shave seconds, or compressing delivery until it sounds breathless, this is permission to stop. That optimization's ceiling arrived before you did. The differences that did survive testing on larger channels are about content, not velocity: openings that [engage the title's promise](/guides/first-30-seconds), openings that give a concrete reason to keep watching, openings that lead with a claim or result. Those are script decisions, checkable [before you record](/guides/check-youtube-script-before-recording). Pace is the polish; the sentence content is the substance. ## FAQ Q: What is the best speaking pace for YouTube? A: The measured norm across 1,290 videos is roughly 170 to 180 words per minute, faster than conversational speech (130 to 160). But within that range, pace did not separate hits from flops in either of two studies. Speak at the fast end of natural for you and spend the optimization effort on what the opening says instead. Q: Does fast-paced editing improve retention? A: The studies measured speaking pace, not edit density, so they cannot answer the editing question directly. What they rule out is the common claim that faster talking separates winners: it does not, at any tested channel size. Editing pace is a separate variable worth its own testing. Q: Should I cut pauses out of my YouTube videos? A: Cutting dead air is standard practice and probably harmless, but the data offers no evidence it turns flops into hits: flops in both studies already spoke as fast as hits. If pause-cutting is costing you re-records or making delivery sound breathless, the measured answer is that the effort is better spent on the script's opening content. --- # How Fast Should a YouTube Video Get to the Point? (What 1,290 Videos Show) URL: https://prepublish.ai/guides/how-fast-get-to-the-point-youtube Updated: 2026-07-25 TL;DR: Both hits and flops get to their point at nearly the same moment: median word 14 for hits and word 15 for flops on larger channels, word 15 for both on small channels, across 1,290 studied videos. Speed to the point does not separate winners. The content of the point does, on larger channels: a specific claim, result, question, or stake that engages the title's promise. ## The surprising part: flops are not slow In [a 349-video study](/blog/youtube-hook-study) comparing each channel's hits against its own flops, we measured how many words pass before the viewer gets one concrete reason to keep watching: a claim, a result, a question, or a stake. Median for hits: word 14. Median for flops: word 15. The [small-channel replication](/blog/small-channel-hook-study) (941 videos, 1,000 to 20,000 subscribers) found the same: among openings that reach a point at all, the median was word 15 in both groups. So "get to the point faster" fails as an explanation for why videos flop. Flopped videos reach their point on schedule, at the same word their channel's hits do. They reach a worse point. ## What the point should be made of On larger channels, three content differences survived per-channel testing: hits more often [engage the promise the title made](/guides/first-30-seconds), more often give a concrete reason to stay, and more often lead with a claim or a shown result. One in six flops never gives any reason to keep watching in the entire first 45 seconds; among hits that failure rate is one in ten. The practical rewrite is not "compress your intro." It is "make word 10 through 20 carry a specific claim, result, question, or stake that matches your title." A fast context dump is still a context dump. One honest boundary: on channels under 20,000 subscribers, [none of these content patterns separated hits from flops either](/guides/do-hooks-matter-small-youtube-channels). At that size, the opening is probably not why a video succeeds or fails, though it still affects whether clicked viewers stay. ## The 15-word test Read your script's first two sentences and ask: by word 15, does the viewer have one concrete reason to keep watching that connects to the title? If the answer is a greeting, channel news, or background setup, the schedule is normal but the content is the flop pattern. A [free script check](/guides/check-youtube-script-before-recording) runs this and the related checks on your script before you record it. ## FAQ Q: How quickly should a YouTube video get to the point? A: By around word 15, which is where both hits and flops already get to their point in 1,290 measured videos. Since flops hit the same schedule, speed alone will not save a video. The differentiating question is whether the point contains a concrete claim, result, question, or stake that matches the title's promise. Q: Are long intros killing my YouTube videos? A: Probably not the length itself: flops in two studies reached their point as fast as hits. What predicted flopping on larger channels was openings with no reason to keep watching at all (one in six flops) and openings that ignore what the title promised. Cut greetings and channel talk, then check the content of the first two sentences rather than their length. Q: What counts as "the point" of a YouTube opening? A: In both studies it was defined as the first concrete reason to keep watching: a specific claim, a shown or stated result, a question, or a stake. Background context, greetings, and channel news do not count, which is why a fast context dump still shows the flop pattern despite arriving quickly. --- # Should You Start a YouTube Video With a Greeting? The Data Leans No (2026) URL: https://prepublish.ai/guides/should-you-start-youtube-video-with-greeting Updated: 2026-07-25 TL;DR: The data leans no. Greeting openings ("hey guys, welcome back") appeared in 23.3% of flop openings against 16.6% of hits on small channels, and 11.6% against 7.3% on larger ones: the only opening signal that repeated across both studies of 1,290 total videos. It is an association, not proven causation, and was exploratory in the second study. If greeting is part of your style, move it past the first payoff instead of spending your highest-attention seconds on it. ## What the data actually shows Two studies compared each channel's biggest hits against its own flops. In [the first](/blog/youtube-hook-study) (349 videos, channels from about 21,000 to 6.6 million subscribers), greeting openings appeared in 11.6% of flop openings against 7.3% of hits. In [the small-channel replication](/blog/small-channel-hook-study) (941 videos, channels between 1,000 and 20,000 subscribers), the lean was larger: 23.3% of flop openings against 16.6% of hits, with 33 channels leaning flop against 11 leaning hit. Two honesty notes before the advice. First, this outcome was registered as exploratory in the second study, so under the study's own frozen rules it receives no verdict; it is an association, not a proven cause. Second, in the first study the greeting gap weakened to statistical noise under the strictest per-channel test. What makes it notable anyway: across two datasets, three channel sizes, and every analysis run, it never once leaned the other way, and it was the only opening signal to repeat in both studies. ## Why greetings correlate with flopping The mechanism nobody measured but everyone suspects: a greeting spends the highest-attention seconds of the video on content with zero information. "Hey guys, welcome back to the channel" tells a new viewer nothing about why to stay, and small channels especially are trying to convert first-time viewers, not regulars. Small channels also greet far more often: 16.6% of even their hit openings start with one, against 7.3% on larger channels. Habits from vlogging culture persist most where the stakes of the first seconds are highest. ## What to open with instead The openings that separated hits on larger channels led with substance: a specific claim, a shown result, or a question with stakes, [engaging what the title promised](/guides/first-30-seconds). If the greeting matters to you as a ritual, move it: greet after the first payoff, thirty seconds in, where regulars will still hear it and new viewers have already been given a reason to stay. There are [worked opening examples by type here](/guides/youtube-hook-examples), and a [free script check](/guides/check-youtube-script-before-recording) will flag a greeting opening along with the rest of the first 45 seconds. ## FAQ Q: Is it bad to say "hey guys welcome back" on YouTube? A: The data leans against it: greeting openings appeared in noticeably more flop openings than hits in both available studies (23.3% vs 16.6% on small channels). This is an association rather than proven causation, but it repeated across 1,290 videos and never leaned the other way. The likely mechanism: greetings spend the highest-attention seconds on words that give a new viewer no reason to stay. Q: Should I introduce myself at the start of a YouTube video? A: Not in the first seconds. New viewers decide whether to stay based on whether the opening engages the title's promise and offers a concrete reason to keep watching. An introduction carries neither. If identity matters to the video, a one-line credential attached to the claim ("I edited trailers for a decade, and this cut breaks three rules") works with the data instead of against it. Q: Where should the greeting go if I keep it? A: After the first payoff, usually 30 to 45 seconds in. Regular viewers who value the ritual will still hear it; first-time viewers get a reason to stay before you spend seconds on ceremony. This keeps the habit without putting zero-information words in the video's most expensive slot. --- # How to Audit a YouTube Script in Claude Before You Record URL: https://prepublish.ai/guides/audit-youtube-script-in-claude Updated: 2026-09-19 TL;DR: Audit a YouTube script in Claude by running four checks in order: score the opening with audit_hook, audit the whole draft with audit_script, run policy_preflight and check_authenticity, then fix the highest-priority passage and re-score the opening. The checks read text only. None of them predicts performance, and the audit payload says so in its own first field. ## How to Audit a YouTube Script in Claude Before You Record Four checks, run in order, audit a YouTube script in Claude before recording. Score the opening with `audit_hook`, audit the whole draft with `audit_script`, run `policy_preflight` and `check_authenticity` on the same text, then fix the highest-priority passage and re-score the opening. Every check reads text only, and none of them predicts performance. The loop assumes the draft exists as text and that the Prepublish MCP server is connected, which is documented on [the MCP server page](/mcp-server). If you want the five manual tests first, [the pre-recording check](/guides/check-youtube-script-before-recording) runs them without any tooling. What follows is the second opinion: an agent that calls published checks and reports named fields instead of an impression. ## The four-step loop, with the prompts Each step below is a prompt you paste into the conversation. Replace the bracketed parts and keep the constraint lines, which are the difference between a report and a rewrite you did not ask for. ### Step 1: score the opening before you touch anything else The opening is the cheapest text to change and the only text the hook check reads. The tool accepts between 80 and 1,500 characters, which is the first 15 to 90 seconds of speech depending on your pace. ``` Score the opening of my script, then diagnose it. Do not rewrite anything. Call audit_hook with hook_text set to the opening below and niche set to [your niche]. Report in this order: 1. overall_score, grade, and one_sentence_verdict. 2. A table of every sentence with attention_pull, curiosity_gap, payoff_distance and note. 3. top_issues, with the headline, the quote and the why for each. 4. The rewrites it returned, labelled with their style. Rules: do not rewrite any passage yourself. The only rewrites you may show are the ones the tool returned. Do not offer to rewrite the script. If a field is empty, say the field is empty. Opening: [paste the first 30 seconds of the draft here] ``` The same check runs in the browser at [the hook analyzer](/tools/youtube-hook-analyzer) if you would rather paste it there. The structural question the score is measuring, and the window it sits in, is covered in [the first 30 seconds guide](/guides/first-30-seconds). ### Step 2: audit the whole draft `audit_script` takes the planned title and the full script, plus an optional email address that also gets the result link by mail. It polls for 90 seconds inside the call. If the audit has not settled by then, the tool returns an id and tells the assistant to collect it with `get_audit`, which costs nothing and starts no new analysis. ``` Audit this script with audit_script. The title I plan to publish under is "[your title]". Send the result to [your email]. When it returns, report: 1. overall_score, hook_score, structure_score, pacing_score and ready_to_record. 2. one_key_improvement, quoted exactly. 3. Every entry in improvements, as a table with priority, category, title and location, and original_quote and improved where the plan released them. 4. The attention_map, as a table with position_pct, hold_index, note and sentiment. 5. Only then, the original_quote and the improved rewrite for the first improvement. Rules: do not rewrite any passage. Do not turn the improvement list into general advice. If an improvement has an empty improved field, say that it is locked rather than filling the gap. ``` ### Step 3: run the two risk checks Policy risk and reused-content risk are separate questions from attention risk, and they have their own tools. `policy_preflight` needs at least 200 characters. Both checks return category ids you can look up. ``` Run two checks on the draft below and keep the results separate. Do not merge them into one verdict. 1. policy_preflight with the script and the title "[your title]". Give me the verdict, total_flags, counts_by_category, and for every category that fired, its id, its label and its source_url. 2. check_authenticity with the same title and script. Give me the score, the risk_level, and each signal that fired with its name, severity and quote. Rules: quote what the checks returned. Where a flag comes back locked, report that the passage is withheld rather than guessing what it says. Script: [paste the full draft] ``` The browser version of the policy check is [the monetization checker](/tools/youtube-monetization-checker). ### Step 4: fix in priority order, then re-score only the opening Rewrite the passage the audit ranked first, then run the hook check again on the new opening. One change at a time, so the second score is about the change you made. ``` Here is the revised opening. Re-run audit_hook on it and only on it. Show the two runs side by side: overall_score, grade, and the attention_pull of each sentence in both. Tell me which sentences moved and which did not. Rules: do not start a second audit_script call. Do not rewrite anything. If the score barely moved, say so in one sentence and stop. ``` Scores are generated rather than measured, so do not read a two-point move as a result. A five-point shift is worth a look. A one-point shift is noise the model produces between runs. ## What a chat model can see that a tool-backed check cannot The checks take a fixed set of fields and nothing else. `audit_script` accepts `video_title`, `script_text`, and optional `email`, `video_duration_seconds`, `category` and `audience`. Everything a creator knows and cannot fit into those fields is invisible to it. A chat model reading the same script in the conversation can see the rest of it. You can tell it why you chose the topic, what your last ten videos did, and how you sound on the third take of a section you are bored of. None of that survives a tool call, and some of it is the most useful context you have. The honest division of labour is that the chat model judges, and the checks report. Ask the model whether the premise deserves a video. Ask the checks whether the draft delivers on the promise in the title. ## Where a chat model guesses and a tool-backed check does not A model asked to review a script will produce a review. It invents a scale, cites policy from memory, and gives you no way to compare this answer with the one it gave last week. The checks constrain that. | Question about the draft | A chat model with the script pasted | A tool-backed check | | --- | --- | --- | | What scale is this judged on | A number with no stated definition, or a paragraph | Named fields on fixed scales: attention_pull and curiosity_gap as integers, payoff_distance as near, mid or far | | Can two drafts be compared | Only by rereading the prose, and the second answer is generated fresh | The same field names on both runs, plus previous_analysis_id when an authenticated re-audit is anchored to the earlier draft | | What was flagged, in one word | A description of a problem | priority from a fixed set: CRITICAL, HIGH, MEDIUM, LOW, alongside the category the improvement belongs to | | Which policy is cited | The policy as the model remembers it, with no version | source_url on every category, plus rubric_version and rubric_published_at on the result | | Can the result be reopened tomorrow | Inside the same conversation | By analysis_id through get_audit, or at prepublish.ai/analysis/ | | What is it, underneath | A model reading your text | A model reading your text, with the scales, labels, citations and ids fixed | The last row is the point. The audit is model output too, and the backend says so: `retention_curve_source` reads `model` when the timeline came straight from the AI response and `interpolated` when the backend generated or extended it (`prepublish-be/internal/domain/entity/analysis.go`). The tool reports the timeline without that field, so treat every point on it as generated. The gain is not accuracy against some ground truth. The gain is that the instrument has named parts, so a second run and a third party can check what it read. ## The checks worth running before you record | Check | What it reads | What it returns | What it cannot know | | --- | --- | --- | --- | | `audit_hook` | An opening of 80 to 1,500 characters, plus an optional niche | A score, a grade, per-sentence attention_pull and curiosity_gap, payoff_distance, top issues with quotes, and three rewrites at different angles | Whether the lines work in your voice, and anything past the opening | | `audit_script` | video_title and script_text up to 250,000 characters, plus optional runtime, category and audience | overall, hook, structure and pacing scores, ready_to_record, a ranked improvement list with priority, category and location, and an attention map | How the topic lands with your audience, and anything visual | | `get_audit` | An analysis_id | The stored result again, at no cost | Nothing new, because it starts no analysis | | `check_authenticity` | video_title and script_text | A score, a risk level, and the signals that fired with quotes from the draft | Whether a reviewer at YouTube would agree, because it is not an enforcement decision | | `policy_preflight` | The script at 200 characters or more, plus an optional title | A verdict, flag counts, category ids with a source_url on each, and the rubric version | Whether ads will run, because the decision belongs to YouTube and applies to the finished video | | `script_runtime` | A script, a word count, or a target runtime | A runtime range at 160, 181 and 201 words per minute | Pauses, b-roll, demonstrations and edits, all of which add time | ## Worked example: five checks on one published script The example script is not a draft. It is the caption track of [*But what is a neural network?* by 3Blue1Brown](https://www.youtube.com/watch?v=aircAruvnKk), video id `aircAruvnKk`, captured on 19 September 2026. Using a published script means the checks can be read against a video whose result is already known. The capture produced 46,010 bytes of JSON3 across 286 caption events, which is 3,357 words and 18,430 characters. The player reported a duration of 1,119.96 seconds. Where the text came from matters, because the obvious method returns nothing. A direct fetch of the caption URL listed in the page's own data returns HTTP 200 with a zero-length body, and the same fetch under a `HeadlessChrome` user agent also returns a zero-length body. The request the player itself makes carries `&potc=1&pot=&key=yt8&lang=en&fmt=json3`, and refetching that URL returned the 46,010 bytes (both measured 18 September 2026; `prepublish-extension/src/content/youtube-main.js` and `prepublish-be/internal/infrastructure/youtube/channel_dlp.go`). An audit run on an empty string is a wasted call. ### script_runtime: 3,357 words ```json { "speaking_rates_words_per_minute": { "fast": 201, "median": 181, "slow": 160 }, "source": "Prepublish study of 349 videos; see https://prepublish.ai/blog/youtube-script-length-word-count", "word_count": 3357, "runtime_minutes": { "fast": 16.7, "median": 18.5, "slow": 21 } } ``` The median estimate lands within ten seconds of the real runtime, which is the only number in this workflow that can be checked against something that is not model output. It is still speaking time only. ### audit_hook: the first 92 words ```json { "overall_score": 75, "grade": "B", "model_used": "pro", "one_sentence_verdict": "The opening establishes a clear visual premise and a relatable cognitive puzzle, though it slows down by instructing the audience on how to feel rather than advancing the mystery." } ``` The per-sentence table is where the check earns its place. Every value below came back from the run. | Sentence | attention_pull | curiosity_gap | payoff_distance | | --- | --- | --- | --- | | "This is a 3." | 8 | 5 | near | | "It's sloppily written and rendered at an extremely low resolution of 28x28 pixels, but your brain has no trouble recognizing it as a 3." | 7 | 7 | mid | | "And I want you to take a moment to appreciate how crazy it is that brains can do this so effortlessly." | 4 | 4 | far | | "I mean, this, this and this are also recognizable as 3s, even though the specific values of each pixel is very different from one image to the next." | 6 | 6 | mid | | "The particular light-sensitive cells in your eye that are firing when you see this 3" | 7 | 8 | far | The lowest-scoring sentence became the top issue, headlined "Instructional filler", with this reasoning: "Instructing the viewer to appreciate something interrupts the momentum of the visual puzzle. The script could pull harder by letting the visuals demonstrate the complexity naturally." One of the three rewrites offered was a `curiosity_gap` version: "How does your brain know this is a 3? It is sloppily written and rendered at a low resolution of 28x28 pixels. Every time you look at a different version, completely different light-sensitive cells fire in your eye. Yet you never fail to recognize the pattern." That is a usable diagnosis: one sentence, one reason, three alternatives. The original sentence works on screen because the visuals carry the appreciation. The check read text only. ### audit_script: the full draft ```json { "notice": "This is a text-only check of an unrecorded script. It maps relative attention risk inside the draft. It does not measure or predict published YouTube retention, and it cannot account for delivery, editing, thumbnail, topic or distribution.", "analysis_id": "4d8206ce-9f60-46cc-b537-2a0af8b113c7", "analysis": { "status": "completed", "overall_score": 83, "hook_score": 88, "structure_score": 84, "pacing_score": 78, "ready_to_record": false, "one_key_improvement": "Dense outro housekeeping and abrupt interview appendix dissipate core lesson tension.", "attention_map": [ { "position_pct": 0, "hold_index": 100 }, { "position_pct": 15, "hold_index": 89, "note": "Teaching, not engaging", "sentiment": "negative" }, { "position_pct": 30, "hold_index": 84, "note": "Curiosity gap opened", "sentiment": "positive" } ], "improvements": [ { "priority": "HIGH", "category": "structure", "title": "Tighten multi-video logistical framing", "location": "~2 min mark", "original_quote": "There has been an explosion of modern variants recently ...", "improved": "There has been an explosion of modern variants recently, but you and I are going to start with the plain vanilla form ...", "locked": false }, { "priority": "MEDIUM", "category": "structure", "title": "Condense arbitrary layer sizing disclaimer", "location": "~4 min mark", "locked": true } ], "locked_count": 5, "policy_preflight": { "verdict": "no_matches", "total_flags": 0, "counts_by_category": {}, "locked": true } }, "open_in_browser": "https://prepublish.ai/analysis/4d8206ce-9f60-46cc-b537-2a0af8b113c7?source=mcp" } ``` Trimmed to the fields quoted here, with the longer quotes cut short. `analysis` is a projection of the backend payload: the tool sends the scores, the attention map, the improvement list and the policy verdict, and it drops the script text and the internal bookkeeping rather than passing the whole dashboard response through. The one key improvement it named was this: "Dense outro housekeeping and abrupt interview appendix dissipate core lesson tension." The improvement list arrived in this order. | Priority | Location | Title | | --- | --- | --- | | HIGH | ~2 min mark | Tighten multi-video logistical framing | | MEDIUM | ~4 min mark | Condense arbitrary layer sizing disclaimer | | MEDIUM | ~9 min mark | Bridge speech recognition analogy back directly | | LOW | ~14 min mark | Streamline cross-channel promotional plug | | CRITICAL | ~20 min mark | Restructure conversational interview appendix | | HIGH | ~18 min mark | Consolidate mid-outro channel logistics | Only the first entry came back complete. The other five carried `locked: true`, with their quote and rewrite removed server-side. That is the free-tier rule: index 0 comes back in full, because a preview a reader can dismiss as a token fix proves nothing (`prepublish-be/internal/application/dto/analysis_dto.go`, `freePreviewImprovementIndex = 0`). Read the priority column rather than the row order. In this run a HIGH entry sat first and a CRITICAL entry sat sixth. The one fix returned complete showed the shape of the output. The flagged passage was the two-video framing at the two-minute mark. The tool quoted it in full and offered this rewrite: "There has been an explosion of modern variants recently, but you and I are going to start with the plain vanilla form. It is the foundation for all of them, and it still holds plenty of complexity for us to explore." The attention timeline is the part most likely to be misread. | position_pct | hold_index | note | sentiment | | --- | --- | --- | --- | | 0 | 100 | | | | 15 | 89 | Teaching, not engaging | negative | | 30 | 84 | Curiosity gap opened | positive | | 50 | 78 | Info dump zone starts | negative | | 75 | 72 | Payoff delivered | positive | | 100 | 58 | | | Every number in that table is model output. The backend records in `retention_curve_source` whether the timeline came straight from the AI response or was interpolated, and that field stays on `/api/analysis/{id}` rather than travelling to the model. Either way no viewer was measured: `hold_index` is a relative script-hold index, not a share of an audience. Use it as a reading of the script's shape and nothing more. One result deserves a plain statement: this script scored 83 and returned `ready_to_record: false`. The rule is mechanical. The server requires an overall score of at least 75, and no improvement rated CRITICAL or HIGH (`prior_audit_resolver.go`, `readyToRecordMinScore = 75`). A CRITICAL passage in the closing kept the second condition from being met. A high score with a failing flag is not a contradiction in the tool. It is two conditions, and one of them failed. ### check_authenticity: reused-content risk ```json { "score": 5, "risk_level": "low", "verdict": "The script is a highly original, educational explainer on neural networks with specific mathematical breakdowns and expert commentary, presenting negligible risk of policy violations.", "signals": [ { "name": "lexical_diversity", "severity": "low" }, { "name": "first_person_ratio", "severity": "low" } ] } ``` Two signals fired and both came back low. The signal names are the useful part, because they are the same names every run. A script that reads as templated fires them at a higher severity, and the quote attached to each signal shows the repetition rather than asserting it. ### policy_preflight: no matches, then four Run on the same script, the policy check returned `verdict: "no_matches"`, `total_flags: 0`, `locked: true`, and a rubric stamped `rubric_version: 3` and `rubric_published_at: "2026-08-15T00:00:00Z"`. A check that returns nothing is easy to distrust, so I ran it a second time on a paragraph written to trip it, about replacing prescribed medication with a supplement stack and doubling the dose on camera. That run returned: ```json { "verdict": "high_matches", "counts_by_category": { "harmful_or_dangerous_acts": 2, "unverified_medical_claims": 2 }, "total_flags": 4, "locked": true, "rubric_version": 3 } ``` Each category carries the citation for its own rule. Medical claims stated as certain point at [YouTube's medical misinformation policy](https://support.google.com/youtube/answer/13813322), and harmful or dangerous acts point at [the advertiser-friendly guidelines](https://support.google.com/youtube/answer/6162278#Harmful_dangerous). The flagged passages themselves came back locked, which is the same free-tier split as the improvements: the free result tells you which category matched, and the paid result tells you where. ## Prompts that work, and the line that stops the agent rewriting The failure mode is specific. An agent asked to audit a script will finish the audit and then offer to fix the whole thing, and the offer arrives as a finished draft that replaces yours. The line that prevents it is a constraint, not a request. Put this at the top of any audit prompt: ``` Diagnose only. Do not rewrite a passage I did not ask you to rewrite. Do not offer to rewrite the script. If a field comes back locked or empty, say so instead of filling the gap. ``` The last sentence is doing real work. In the run above, five of six improvements arrived with their quote and rewrite removed. An agent that wants to be helpful will invent replacements for the missing five, and the invented ones are indistinguishable from the returned one in a chat window. Two more prompts that hold up. The calibration prompt. Use it to test whether the checks agree with your own read before you trust them on a draft you care about. ``` Take the transcript below, which is the spoken script of a published video I have already watched. Call audit_hook on its first 90 seconds, then audit_script with the video's own title. Send the result to [your email]. Then give me two lists. First, everything the checks flagged. Second, anything you noticed in the transcript that the checks did not flag. Rules: do not write a new script. Do not fix anything in this transcript. This is a calibration sample, not a draft. ``` The second list is the useful one, because it shows you where the checks are blind, on text whose result you already know. The separation prompt, for the case where the agent produces a review that looks like a tool report: ``` Before you answer, list the tool calls you actually made and the tool names you used. If you are about to describe a check you did not call, label the rest of your answer as your own reading of the text rather than a check result. ``` A chat model is fluent enough to write something that reads like a hook score. Asking it to name the calls it made is the cheapest way to see the difference. ## What these checks do not do They do not see delivery, editing, thumbnail or audience history. The payload says it in the same words every time: "This is a text-only check of an unrecorded script. It maps relative attention risk inside the draft. It does not measure or predict published YouTube retention, and it cannot account for delivery, editing, thumbnail, topic or distribution." They do not measure anything about viewers. The attention timeline is model output: the backend records in `retention_curve_source` whether it came straight from the model response or was interpolated, and neither value is a measurement. Your own Studio curve after publishing is the measurement, and comparing the two is the only way to learn whether this instrument reads your work in a way you can act on. They do not decide monetization. `policy_preflight` reports matches against published policy text and states its own scope: "This reads your script text only. Visuals, thumbnails, delivery, and edits are not checked. It flags passages that match categories in YouTube's published guidelines. It is not a YouTube decision, and it is not a guarantee." They do not return everything on the free tier. The free tier withholds parts of a result rather than the whole check. In the run above five of the six improvements carried `locked: true` with no quote and no rewrite, which is the number `locked_count` reports, and the per-section analysis, the title rewrite and the channel comparison do not appear in the report at all. They run against quotas. The MCP endpoint allows 100 AI-backed calls per UTC day and 6 per caller per 10 minutes by default (`prepublish-fe/lib/mcp/limits.ts`). The hook check has its own allowance behind the endpoint: one anonymous run per IP address in 24 hours, and three per day once an address is supplied (`prepublish-be/internal/domain/service/hook_analysis_service.go`, `hookAnonQuotaPerDay = 1`). The anonymous allowance was already spent when this article's example was prepared, which is why the hook run above carries an address. Plan the order of the checks around those limits: the cheap one is the check most likely to be refused. They read a window, not a script. The hook field stops at 1,500 characters, which at the median measured rate of 181 words per minute is the first 90 seconds or so. An opening that runs long is audited up to the cutoff and no further. They do not tell you whether the topic deserved a video. Every check here grades execution against the title you supply. If the premise is thin, a draft that delivers the promise will score well, and the score will be correct. ## FAQ Q: How do I audit a YouTube script in Claude before recording? A: Connect the Prepublish MCP server, then run four checks in order. audit_hook scores the opening, audit_script audits the whole draft, policy_preflight and check_authenticity read the same text for policy and reused-content risk, and a final audit_hook scores the revised opening. Each one is a tool call the assistant makes with your text. None of them needs an email address up front. Q: Does auditing a script in Claude need a paid account? A: No. The MCP endpoint is anonymous, with a published free tier of 100 AI-backed calls per UTC day across the endpoint and 6 per caller per 10 minutes, read from prepublish-fe/lib/mcp/limits.ts. Three parts of a result are withheld rather than the whole check: the per-section analysis, the title rewrite, and every improvement except the first. Q: Can Claude read my script file directly? A: Not through this server. The tools take text. audit_script accepts video_title and script_text plus optional runtime, category and audience, and nothing else reaches the model. If your draft lives in a document, you paste the text into the conversation or convert it first, because no tool here opens a file, a URL, a video or a channel. Q: What is the difference between audit_hook and audit_script? A: audit_hook reads an opening only, between 80 and 1,500 characters, and returns a grade, a score, per-sentence attention_pull and curiosity_gap, payoff distance, top issues and three rewrites. audit_script reads the whole draft, up to 250,000 characters, and returns four scores, ready_to_record, a ranked improvement list and a model-generated attention timeline. Run the hook check first, because it costs less and the opening is the cheapest text to change. Q: Why does my script score 83 and still say it is not ready to record? A: Because ready_to_record is derived on the server from two conditions: an overall score of at least 75 and no improvement rated CRITICAL or HIGH. The constant is readyToRecordMinScore in prepublish-be/internal/domain/service/prior_audit_resolver.go. A draft can score in the eighties and fail the second condition, so read the priority column in the improvement list. That is what decided the answer, not the headline score. Q: Can I check a script for monetization problems before recording? A: Run policy_preflight, which reads at least 200 characters and returns a verdict, flag counts, and the category ids that matched with a source_url pointing at YouTube's own published page. It reports risk against published policy text. It is not a YouTube decision and not a guarantee, and the quoted passages and suggested rewrites belong to the paid audit, so a free run returns the category rather than the sentence. Q: Does the audit forecast retention or views? A: No. Every AI-backed payload opens with the same constraint: a text-only check of an unrecorded script, mapping relative attention risk inside the draft, with no ability to account for delivery, editing, thumbnail, topic or distribution. The attention map it returns is model output, and the backend records in retention_curve_source whether that timeline came straight from the model response or was interpolated. Neither value is a measurement of viewer behaviour, and your YouTube Studio curve is the measurement. Q: Can I run these checks on a published video instead of my own draft? A: Yes, and it is a useful calibration exercise, but you supply the text, because no tool here fetches a transcript, a video or a channel. Paste a transcript and run audit_script with the published title. Expect the scores to read the way they read on a draft, since the checks know nothing about how the video performed. In the worked example below, a widely watched script scored 83 and returned ready_to_record false. --- # How to Remove Duplicate Lines From YouTube Auto Captions URL: https://prepublish.ai/guides/clean-youtube-auto-caption-duplicates Updated: 2026-09-19 TL;DR: YouTube auto caption cues roll, so each cue repeats the lines already on screen and appends the new one. Drop any line identical to the line emitted immediately before it, after stripping inline tags and collapsing whitespace. A real 18-minute auto-caption file drops from 1,484 lines and 10,052 words to 498 lines and 3,366 words. ## How to Remove Duplicate Lines From YouTube Auto Captions YouTube auto captions roll. Each cue repeats the lines already on screen and appends the one being spoken, so reading every line writes each sentence two or three times. Remove them with one rule: drop any line identical to the line you emitted immediately before it. On a real 18-minute auto-caption file pulled with yt-dlp 2026.08.19 on 19 September 2026, that rule cut 1,484 VTT text lines to 498, and 10,052 words to 3,366. Without it, the same file reports 538 words per minute for a speaker who talks at 180. ## What rolling cues are in YouTube auto captions The caption renderer keeps a small window of text on screen, two lines in the file measured here, and scrolls that window as speech continues. The VTT file records what the renderer displays at each moment rather than what was said. Each cue therefore carries every visible line, which puts each line in three consecutive cues: the cue that introduces it with per-word timings inline, a ten-millisecond cue that repeats it alone to flush the window, and the cue where it sits at the top while the next line arrives below. Keeping the first occurrence of each line and dropping the rest recovers the spoken words exactly. The cue model that produces the repeats is defined in the [WebVTT specification](https://www.w3.org/TR/webvtt1/): a cue carries a start time, an end time and any number of text lines, and nothing in the format forbids a cue from repeating the text of the cue before it. The table counts what each extraction approach produces on the same file. | Extraction | Lines kept | Words | Words per minute | | --- | --- | --- | --- | | Every VTT text line, tags stripped, nothing dropped | 1,484 | 10,052 | 538 | | The same lines with consecutive-duplicate removal | 498 | 3,366 | 180 | The file is the auto-generated English track of `aircAruvnKk`, a 3Blue1Brown video titled "But what is a neural network? | Deep learning chapter 1", runtime 18 minutes 40 seconds, pulled on 19 September 2026. The 986 dropped lines are 66.4 percent of the text lines in the file, and the word count is 2.99 times the real one. A file without rolling cues needs no such treatment. The manual captions of "Me at the zoo", 19 seconds and six cues, contain no repeated line at all, and the same parser passes it through unchanged at 38 words. ## YouTube VTT vs JSON3: where the duplicate text lives Both formats describe the same speech from the same track. They differ in what one unit means, and that difference decides where the repeats sit. | | WebVTT (`--sub-format vtt`) | JSON3 (`--sub-format json3`) | | --- | --- | --- | | One unit | a cue block: a timing line plus every visible line | an event: a time plus the words that entered the window | | Timing | `00:00:04.400 --> 00:00:06.869 align:start position:0%` | `tStartMs`, `dDurationMs` | | Text | plain lines, with `<00:00:04.799>` word tags inline | `segs[].utf8`, with `tOffsetMs` per word | | Word timing | inline tags inside the cue text | `tOffsetMs` inside each segment | | Line breaks | a newline inside the cue | a separate event holding only `"\n"` | | Where the repeat lives | in the file: each line is written two or three times | not in the event text on this track | | Size of the measured track | 171,557 bytes | 361,161 bytes | | Non-empty text units | 1,484 | 500 | | Naive word count | 10,052 | 3,368 | The VTT excerpt below is the head of that file, verbatim, starting at 4.4 seconds. It covers the stretch to 8.6 seconds, where the speaker begins an explanation of why a 28 by 28 pixel image is still readable. ```vtt 00:00:04.400 --> 00:00:06.869 align:start position:0% This<00:00:04.799> is<00:00:04.960> a<00:00:05.200> three.<00:00:05.920> It's<00:00:06.080> sloppily<00:00:06.640> written 00:00:06.869 --> 00:00:06.879 align:start position:0% This is a three. It's sloppily written 00:00:06.879 --> 00:00:08.549 align:start position:0% This is a three. It's sloppily written and<00:00:07.120> rendered<00:00:07.440> at<00:00:07.680> an<00:00:07.839> extremely<00:00:08.320> low 00:00:08.549 --> 00:00:08.559 align:start position:0% and rendered at an extremely low ``` Four things in that block matter to a parser. - `This is a three. It's sloppily written` appears in three cues. Only the first occurrence is new text. - The cue at 6.869 lasts ten milliseconds and carries no new words. It exists to flush the window, and it is the cue a cue-level dedup misses. - The `<00:00:04.799>` sequences are word-level timings, not content. The tagged line is 164 characters long and 38 characters once the tags come out; the whole file carries 8,604 tags and 60,228 characters of markup. - A line holding a single space is a blank display line. It is whitespace, and trimming turns it into nothing. The JSON3 excerpt is the same four seconds in the other container. Whitespace inside each object is compacted here for readability; the field names and values are as returned. ```json { "tStartMs": 0, "dDurationMs": 1119069, "id": 1, "wpWinPosId": 1, "wsWinStyleId": 1 }, { "tStartMs": 0, "dDurationMs": 2510, "wWinId": 1, "segs": [ { "utf8": "[Music]" } ] }, { "tStartMs": 4390, "wWinId": 1, "aAppend": 1, "segs": [ { "utf8": "\n" } ] }, { "tStartMs": 4400, "dDurationMs": 4159, "wWinId": 1, "segs": [ { "utf8": "This", "acAsrConf": 0 }, { "utf8": " is", "tOffsetMs": 399, "acAsrConf": 0 }, { "utf8": " a", "tOffsetMs": 560, "acAsrConf": 0 }, { "utf8": " three.", "tOffsetMs": 800, "acAsrConf": 0 }, { "utf8": " It's", "tOffsetMs": 1520, "acAsrConf": 0 }, { "utf8": " sloppily", "tOffsetMs": 1680, "acAsrConf": 0 }, { "utf8": " written", "tOffsetMs": 2240, "acAsrConf": 0 } ] }, { "tStartMs": 6869, "dDurationMs": 1690, "wWinId": 1, "aAppend": 1, "segs": [ { "utf8": "\n" } ] }, { "tStartMs": 6879, "dDurationMs": 4561, "wWinId": 1, "segs": [ { "utf8": "and", "acAsrConf": 0 }, { "utf8": " rendered", "tOffsetMs": 241, "acAsrConf": 0 }, { "utf8": " at", "tOffsetMs": 561, "acAsrConf": 0 }, { "utf8": " an", "tOffsetMs": 801, "acAsrConf": 0 }, { "utf8": " extremely", "tOffsetMs": 960, "acAsrConf": 0 }, { "utf8": " low", "tOffsetMs": 1441, "acAsrConf": 0 } ] }, ``` - The first object has no `segs`. Its `dDurationMs` of 1,119,069 ms is the video duration, 18 minutes 39 seconds, and it is the only object that carries `wpWinPosId` and `wsWinStyleId`. - Each `segs` array holds only the words that entered the window at that moment, and `tOffsetMs` gives the offset of that word inside the event. Word timing survives without any inline markup. - The `"\n"` events marked `aAppend: 1` are the line breaks the player inserts. They hold no words, so a parser that joins `segs[].utf8` and drops empty results removes them without a special case. - No two consecutive events in this file carried the same text. The repeat is a property of the VTT rendering of the same track, not of the JSON3 body, which is why a parser can read both shapes with one dedup rule at the end. ### How to pull both renditions ``` yt-dlp --skip-download --write-auto-subs --sub-langs "en-orig" --sub-format vtt \ -o "%(id)s" "https://www.youtube.com/watch?v=aircAruvnKk" yt-dlp --skip-download --write-auto-subs --sub-langs "en-orig" --sub-format json3 \ -o "json3_%(id)s" "https://www.youtube.com/watch?v=aircAruvnKk" ``` `en-orig` is the original speech recognition track. In yt-dlp's JSON for that video, `automatic_captions` held 162 keys and 131 of them carried a `tlang=` parameter, which marks a translation the player generates on request rather than a track the creator published. One key ended in `-orig`, and that was the original. Prefer a creator-uploaded track when one exists, then the `-orig` track, then the ASR key for the video's spoken language. That order is implemented in `pickOriginalTrack` in `prepublish-be/internal/infrastructure/youtube/channel_dlp.go` and `pickTrack` in `prepublish-extension/src/content/youtube-main.js`. The official route returns a track only for a video you have permission to edit: [`captions.download`](https://developers.google.com/youtube/v3/docs/captions/download) accepts the `youtube.force-ssl` or `youtubepartner` scope and costs 200 quota units per call, with a 403 when the permission is missing. For your own uploads that is the stable path and it returns the same VTT and JSON3 shapes these parsers consume. Both pulls above ran from a residential connection. On a datacenter IP the same command can return metadata and zero caption characters unless curl_cffi is installed, measured 19 September 2026, and a residential proxy alone did not fix that. If your caption body arrives empty or short, the problem is upstream of the parser and no dedup rule will repair it. ## Deduplicating YouTube auto captions: the six steps Six steps, in this order. Every one of them exists for a reason visible in the excerpt above. 1. Skip structural lines: `WEBVTT`, `Kind:`, `Language:`, `NOTE`, `STYLE`, `REGION`, `X-TIMESTAMP-MAP`, anything containing `-->`, and anything that is only digits. 2. Strip inline tags with `<[^>]+>`, which removes ``, `` and the `<00:00:04.799>` word markers in one pass. 3. Collapse runs of whitespace to a single space and trim. A newline inside a cue is a display wrap, not a sentence break. 4. Drop a line that is nothing but a bracketed sound cue, matching the pattern `^[\[(][^\])]*[\])]$`, so `[Music]` and `(laughs)` stay out of the prose. 5. Drop a line whose text equals the last line you kept. This is the rule that removes rolling repeats, and comparing against the last kept line rather than the previous file line is what preserves genuine repetition later in the video. 6. Join the survivors with single spaces, then start a new paragraph when the silence before a cue reaches 2,500 ms or the current paragraph reaches 90 words, whichever comes first. Capitalize the first letter of each paragraph and nothing else, so the parser adds no punctuation of its own. Steps 1 through 5 are `parseVTTToText` in `prepublish-be/internal/infrastructure/youtube/channel_dlp.go`, which calls `stripVTTTags` and `isNumericLine` from `extractor.go` so the two readers cannot drift apart. Step 4, the duration fallback and the paragraph rule come from `parseJson3` and `segmentsToText` in `prepublish-extension/src/lib/transcript.js`, where `SOUND_CUE_ONLY`, `PARAGRAPH_GAP_MS = 2500`, `PARAGRAPH_WORDS = 90` and `DEFAULT_DURATION_MS = 2000` are defined. Neither parser invents punctuation, and the extension file says so in its own comment. ## Python: clean an ASR transcript from VTT or JSON3 The script below reads either container and prints prose. Save it as `clean_transcript.py`. ```python #!/usr/bin/env python3 """Turn a YouTube caption file into clean prose. Both caption shapes YouTube serves carry the same words in different containers: VTT a rolling window. Every cue holds all the visible lines, so the line being spoken appears in two or three consecutive cues. JSON3 windowed events. Each event holds the words that entered the window at that moment, and a separate event carries the line break. Usage: python3 clean_transcript.py captions.en.vtt python3 clean_transcript.py captions.en.json3 python3 clean_transcript.py captions.en.json3 18:39 """ import json import re import sys TAGS = re.compile(r"<[^>]+>") # [Music] and (laughs) carry no script content. SOUND_CUE = re.compile(r"^[\[(][^\])]*[\])]$") TIME_LINE = re.compile( r"^(?:(\d{1,2}):)?(\d{2}):(\d{2})[.,](\d{3})\s*-->\s*" r"(?:(\d{1,2}):)?(\d{2}):(\d{2})[.,](\d{3})" ) VTT_HEADERS = ("WEBVTT", "Kind:", "Language:", "NOTE", "STYLE", "REGION", "X-TIMESTAMP-MAP") PARAGRAPH_GAP_MS = 2500 # a silence this long starts a new paragraph PARAGRAPH_WORDS = 90 # longest paragraph, in words FALLBACK_DURATION_MS = 2000 def collapse(text): """Cue text wraps on hard newlines that are not sentence breaks.""" return re.sub(r"\s+", " ", text).strip() def strip_tags(text): return collapse(TAGS.sub("", text)) def to_ms(hours, minutes, seconds, millis): return ((int(hours or 0) * 60 + int(minutes)) * 60 + int(seconds)) * 1000 + int(millis) def iter_vtt_cues(body): """Yield (start_ms, end_ms, [line, ...]) for each cue block.""" start = end = None lines = [] for raw in body.splitlines(): line = raw.strip() match = TIME_LINE.match(line) if match: if start is not None: yield start, end, lines groups = match.groups() start = to_ms(*groups[:4]) end = to_ms(*groups[4:]) lines = [] continue if start is None or not line or line.startswith(VTT_HEADERS) or line.isdigit(): continue lines.append(line) if start is not None: yield start, end, lines def vtt_cues(body): """Drop the part of a rolling cue that the previous cue already said.""" last_kept = "" for start, end, lines in iter_vtt_cues(body): for raw in lines: text = strip_tags(raw) if not text or SOUND_CUE.match(text) or text == last_kept: continue last_kept = text yield start, max(0, end - start), text def next_start(events, index, start): """A cue with no duration ends where the next one begins.""" for event in events[index + 1 :]: if isinstance(event, dict) and isinstance(event.get("tStartMs"), (int, float)): candidate = int(event["tStartMs"]) if candidate > start: return candidate - start return FALLBACK_DURATION_MS def json3_cues(body): events = json.loads(body).get("events") or [] last_kept = "" for index, event in enumerate(events): if not isinstance(event, dict): continue segs = event.get("segs") if not isinstance(segs, list): continue text = strip_tags("".join(s.get("utf8", "") for s in segs if isinstance(s, dict))) if not text or SOUND_CUE.match(text) or text == last_kept: continue start = int(event.get("tStartMs") or 0) duration = int(event.get("dDurationMs") or 0) if duration <= 0: duration = next_start(events, index, start) last_kept = text yield start, max(0, duration), text def capitalize_first(text): return text[:1].upper() + text[1:] if text else "" def to_prose(cues): paragraphs = [] current = [] words = 0 previous_end = None for start, duration, text in cues: gap = 0 if previous_end is None else start - previous_end if current and (gap >= PARAGRAPH_GAP_MS or words >= PARAGRAPH_WORDS): paragraphs.append(" ".join(current)) current = [] words = 0 current.append(text) words += len(text.split(" ")) previous_end = start + duration if current: paragraphs.append(" ".join(current)) return "\n\n".join(capitalize_first(p) for p in paragraphs) def cues_for(body): return json3_cues(body) if body.lstrip().startswith("{") else vtt_cues(body) def runtime_ms(value): parts = [float(p) for p in value.split(":")] seconds = 0.0 for part in parts: seconds = seconds * 60 + part return seconds * 1000 def main(argv): body = open(argv[1], encoding="utf-8").read() prose = to_prose(cues_for(body)) print(prose) words = len(prose.split()) if len(argv) > 2: minutes = runtime_ms(argv[2]) / 60000 print(f"\n---\n{words} words over {minutes:.2f} min = {words / minutes:.0f} wpm", file=sys.stderr) else: print(f"\n---\n{words} words", file=sys.stderr) if __name__ == "__main__": main(sys.argv) ``` Run it with the file path, and add the runtime as a second argument to get the words-per-minute check described below. ``` $ python3 clean_transcript.py aircAruvnKk.en-orig.vtt 18:40 ``` The verification section pastes what that run printed. ## JavaScript: the same parser in Node The same rules in JavaScript, with the constants copied from the extension file so the two stay in step. Save it as `clean-transcript.mjs` and run it with Node 18 or newer. ```javascript #!/usr/bin/env node // Turn a YouTube caption file into clean prose. // Same constants and the same two rules as prepublish-extension/src/lib/transcript.js: // consecutive duplicate cue text is dropped, and paragraphs break on a 2.5 s // silence or at 90 words. The VTT reader is new; JSON3 matches parseJson3. // // Usage: node clean-transcript.mjs captions.en.vtt [HH:MM:SS] import { readFileSync } from 'node:fs'; const TAGS = /<[^>]+>/g; // [Music] and (laughs) carry no script content. const SOUND_CUE_ONLY = /^[[(][^\])]*[\])]$/; const TIME_LINE = /^(?:(\d{1,2}):)?(\d{2}):(\d{2})[.,](\d{3})\s*-->\s*(?:(\d{1,2}):)?(\d{2}):(\d{2})[.,](\d{3})/; const VTT_HEADERS = ['WEBVTT', 'Kind:', 'Language:', 'NOTE', 'STYLE', 'REGION', 'X-TIMESTAMP-MAP']; const PARAGRAPH_GAP_MS = 2500; const PARAGRAPH_WORDS = 90; const DEFAULT_DURATION_MS = 2000; /** Hard line wraps inside a cue are not sentence breaks. */ function cleanText(value) { if (typeof value !== 'string') return ''; return value.replace(/\s+/g, ' ').trim(); } function stripTags(value) { return cleanText(value.replace(TAGS, '')); } function toMs(hours, minutes, seconds, millis) { return ((Number(hours || 0) * 60 + Number(minutes)) * 60 + Number(seconds)) * 1000 + Number(millis); } function* iterVttCues(body) { let start = null; let end = null; let lines = []; for (const raw of body.split(/\r?\n/)) { const line = raw.trim(); const match = TIME_LINE.exec(line); if (match) { if (start !== null) yield { start, end, lines }; const g = match.slice(1); start = toMs(g[0], g[1], g[2], g[3]); end = toMs(g[4], g[5], g[6], g[7]); lines = []; continue; } if (start === null || !line || VTT_HEADERS.some((h) => line.startsWith(h))) continue; if (/^\d+$/.test(line)) continue; lines.push(line); } if (start !== null) yield { start, end, lines }; } function* vttCues(body) { let lastKept = ''; for (const cue of iterVttCues(body)) { for (const raw of cue.lines) { const text = stripTags(raw); if (!text || SOUND_CUE_ONLY.test(text) || text === lastKept) continue; lastKept = text; yield { startMs: cue.start, durationMs: Math.max(0, cue.end - cue.start), text }; } } } function nextStart(events, index, start) { for (let i = index + 1; i < events.length; i += 1) { const event = events[i]; if (event && typeof event.tStartMs === 'number' && event.tStartMs > start) { return event.tStartMs - start; } } return DEFAULT_DURATION_MS; } function* json3Cues(body) { const events = (JSON.parse(body).events || []); let lastKept = ''; for (let i = 0; i < events.length; i += 1) { const event = events[i]; if (!event || typeof event !== 'object') continue; if (!Array.isArray(event.segs)) continue; const text = stripTags( event.segs.map((s) => (s && typeof s.utf8 === 'string' ? s.utf8 : '')).join(''), ); if (!text || SOUND_CUE_ONLY.test(text) || text === lastKept) continue; const startMs = Number(event.tStartMs) || 0; let durationMs = Number(event.dDurationMs) || 0; if (durationMs <= 0) durationMs = nextStart(events, i, startMs); lastKept = text; yield { startMs, durationMs: Math.max(0, durationMs), text }; } } function capitalizeFirst(text) { return text ? text.charAt(0).toUpperCase() + text.slice(1) : ''; } function toProse(cues) { const paragraphs = []; let current = []; let words = 0; let previousEnd = null; for (const cue of cues) { const gap = previousEnd === null ? 0 : cue.startMs - previousEnd; if (current.length && (gap >= PARAGRAPH_GAP_MS || words >= PARAGRAPH_WORDS)) { paragraphs.push(current.join(' ')); current = []; words = 0; } current.push(cue.text); words += cue.text.split(' ').filter(Boolean).length; previousEnd = cue.startMs + cue.durationMs; } if (current.length) paragraphs.push(current.join(' ')); return paragraphs.map(capitalizeFirst).join('\n\n'); } function runtimeMs(value) { return value.split(':').reduce((total, part) => total * 60 + Number(part), 0) * 1000; } const [path, runtime] = process.argv.slice(2); const body = readFileSync(path, 'utf8'); const prose = toProse(body.trimStart().startsWith('{') ? json3Cues(body) : vttCues(body)); console.log(prose); const words = prose.split(/\s+/).filter(Boolean).length; if (runtime) { const minutes = runtimeMs(runtime) / 60000; console.error(`\n---\n${words} words over ${minutes.toFixed(2)} min = ${Math.round(words / minutes)} wpm`); } else { console.error(`\n---\n${words} words`); } ``` ## How to check the cleaned transcript is correct Four checks, in the order that catches the most errors for the least reading. **Cross-format agreement.** Feed the VTT and the JSON3 of the same track to the same parser. Both containers describe the same speech, so the prose must come out identical. On the measured file it did, in both languages, with no character difference between the four runs. If the two disagree, one reader has a bug and the word counts against each other will say which. **Word count against runtime and speaking rate.** Divide the cleaned word count by the runtime in minutes. Across 349 YouTube videos measured in July 2026, speaking rate had a median of 181 words per minute, with 160 at the 25th percentile and 201 at the 75th, from `prepublish-fe/lib/seo/wpm-data.ts`. A talking-head video that lands far above 201 words per minute has duplication or repeated phrases still in the text. One far below 160 has lost cues, usually to a truncated download or a network block, and the fix is upstream. The same arithmetic through Prepublish's pipeline gives 3,368 words at 180 words per minute for the video measured here, and [the transcript tool](/youtube-transcript) prints the word count and the runtime for any public link. | Check | Measured on `aircAruvnKk` (18:40) | Reading | | --- | --- | --- | | Words after dedup | 3,366 | inside the band | | Words per minute | 180 | 1 below the 181 median, inside 160 to 201 | | Published transcript count for the same video | 3,368 words, 180 wpm | 2 words apart, and the gap is the two [Music] markers | | Naive word count | 10,052 | 538 wpm, 2.99x the cleaned count | | Paragraphs | 37, longest 97 words, shortest 11 | consistent with the 90-word cap plus the cue that crossed it | | Last cue end | 18:39.069 | 931 ms before the 18:40 runtime | | Consecutive events with identical text in the JSON3 | 0 | the dedup rule had nothing to remove there | **Spot-check the proper nouns and the numbers.** Dedup repairs repetition and nothing else, so the words still need reading. In the 3,366-word transcript, `relu` appears three times in lower case and `ReLU` once, `sigmoid` appears nine times, and `28x 28` reads as two tokens where a person would write one. Reading the first minute and the last minute catches the cases that matter, because names and figures cluster at the start and the end of an explanation. **Recount the words with a second tool.** A word counter that reads the cleaned text directly, such as [the script word counter](/tools/script-word-counter), should agree with the parser to within the sound cues you chose to drop. Converting the runtime into minutes at [words to minutes](/tools/words-to-minutes) gives the same band as a table rather than a command line. Test output from the runs behind this article, on the pulled file. The first run is cut after its opening paragraph; the whole run printed 37 paragraphs and 3,366 words. ``` $ python3 clean_transcript.py aircAruvnKk.en-orig.vtt 18:40 This is a three. It's sloppily written and rendered at an extremely low resolution of 28x 28 pixels. But your brain has no trouble recognizing it as a three. ... Incredibly um deep uh neural networks. All right, thank you Alicia. --- 3366 words over 18.67 min = 180 wpm $ python3 clean_transcript.py json3_aircAruvnKk.en-orig.json3 18:40 3366 words over 18.67 min = 180 wpm $ node clean-transcript.mjs aircAruvnKk.en-orig.vtt 18:40 3366 words over 18.67 min = 180 wpm $ node clean-transcript.mjs json3_aircAruvnKk.en-orig.json3 18:40 3366 words over 18.67 min = 180 wpm $ diff py_vtt.txt py_json.txt && diff py_vtt.txt js_vtt.txt && diff py_json.txt js_json.txt $ python3 clean_transcript.py zoo_jNQXAC9IVRw.en.vtt 0:19 38 words over 0.32 min = 120 wpm ``` The two lines around the ellipsis are the first and last paragraph of the same run. Both parsers agree, both containers agree, and the manual caption file reports the same word count from the Python and the JavaScript reader. Both parsers were tested on macOS with Python 3.14.6 and Node v24.19.0. The VTT file measured 171,557 bytes and the JSON3 file 361,161 bytes, both pulled from YouTube with yt-dlp 2026.08.19 on 19 September 2026, and a 440-byte manual caption file came from a second video. Four runs produced identical prose, and the manual file produced no duplicates to remove. ## What removing duplicate caption lines does not fix Each row below was observed in the cleaned 3,366-word transcript, or in the second file used for testing. | Artifact | What dedup does | What would fix it | | --- | --- | --- | | A word repeated inside a line: `at at some point`, `many many variants`, `relu relu stands for` | Nothing. The line is not identical to the previous line | Reading, or a language model pass with the sentence in front of it | | A mis-heard proper noun or number | Nothing | The video itself, or the creator's own description and chapter titles | | Filler words that are in the audio: the last paragraph of the measured file reads `Incredibly um deep uh neural networks. All right, thank you Alicia.` | Nothing. `um` and `uh` are separate words, not repeats | A stop word list, or reading the text before publishing it | | One term cased two ways: `relu` three times and `ReLU` once | Nothing | A term list applied after parsing | | A bracketed line that carries content: `(baaaaaaaaaaahhh!!)` | Dropped whenever the bracket covers the whole line | Nothing, unless the pattern is narrowed to known cue words | | Sentence boundaries and punctuation | Nothing. Neither parser invents punctuation | Human editing | | Two speakers in one track | Nothing. Neither format carries speaker labels | Manual attribution, or diarization run on the audio | | A translated track used as the spoken one | Nothing | Selecting the `-orig` track, or the spoken language | | A caption body truncated by the network | Nothing | A canary that checks caption character counts, not exit status | The casing row is the one that costs time at scale. In this single file, `relu` and `ReLU` refer to the same function, and a search for either spelling finds only part of the mentions. The same holds for product names, acronyms and spelled-out numbers, which is why the dedup rule belongs before any search, count or summary that treats the words as data. Deduplication is the step that makes the rest visible. A 10,052-word wall of repeated text hides three stutters, a casing split and at least one number written as two tokens. A 3,366-word paragraph structure puts them where a reader can see them. ## FAQ Q: Why do YouTube auto captions repeat the same line? A: The caption renderer keeps a small window of text on screen and scrolls it as the speaker continues, and the VTT file records what the renderer displays rather than what was said. Each cue therefore carries every visible line, so a line appears in three consecutive cues: the one that introduces it, a ten-millisecond cue that repeats it alone, and the one where it sits at the top while the next line arrives. Q: What is the quickest way to remove duplicate lines from a YouTube VTT file? A: Strip the inline tags, collapse whitespace, then walk the lines and drop any line whose text equals the last line you kept. Comparing against the last kept line rather than the previous file line preserves genuine repetition later in the video. On the 18-minute file measured on 19 September 2026 that one rule removed 986 of 1,484 text lines and 6,686 of 10,052 words. Q: Do YouTube JSON3 captions contain duplicate lines? A: The JSON3 body can carry duplicated cue text, and the parser in Prepublish's extension drops consecutive duplicates because the player has served that shape. In the JSON3 file measured on 19 September 2026, no two consecutive events carried the same text: the events hold only the words that entered the window, and line breaks arrive as their own events. The dedup rule costs nothing when there is nothing to drop, so keep it in both readers. Q: How do I clean an ASR transcript in Python? A: Skip the header, timing and cue-number lines, remove everything between angle brackets with the pattern <[^>]+>, collapse runs of whitespace, drop lines that are only a bracketed sound cue, and drop any line identical to the previous line you kept. Join the survivors with single spaces, and start a new paragraph at a silence of 2,500 ms or at 90 words. The Python sample in this article does all of it for both VTT and JSON3 input. Q: Why does my cleaned transcript still show 500 words per minute? A: Duplication survived the pass. The usual cause is comparing a cue against the previous cue rather than against the last line kept, which misses the rolling flush cues, and the second cause is running the dedup before stripping inline tags so that the tagged and untagged versions of the same line look different. A talking-head video measuring near 500 words per minute against the runtime is roughly three times the expected rate. Q: Should I delete [Music] and [Applause] lines from a transcript? A: Delete them when the bracket is the entire line and the text is for reading, which is what the shipped parser does. The cost is visible: the cleaned prose for the measured video is 3,366 words against the published transcript count of 3,368, and the difference is one [Music] marker at the start and another later. Keep them when the transcript is an archive of the caption file rather than a script. Q: Can I get YouTube captions from the YouTube Data API instead of yt-dlp? A: Only for videos you own or have edit permission on. The captions.download method requires that permission and accepts the youtube.force-ssl or youtubepartner scopes at a quota cost of 200 units per call, so it does not replace yt-dlp for other people's videos. For your own uploads it is the stable route, and it returns the same VTT or JSON3 shapes that the parsers here consume. Q: Does removing duplicate lines break the timestamps? A: No, provided the reader records a time when it keeps a line and ignores the repeat cues afterwards. The kept line takes the start time of the cue that introduced it, and its duration comes from the end of that cue. On a rolling file the flush cue is only ten milliseconds long, so consecutive lines still produce a near-zero gap, which keeps the 2,500 ms paragraph rule from firing inside a sentence. --- # How to Connect Claude Code to a YouTube MCP Server URL: https://prepublish.ai/guides/connect-claude-code-youtube-mcp Updated: 2026-09-19 TL;DR: Prepublish runs a YouTube script audit as an MCP server at https://mcp.prepublish.ai. Connect Claude Code with claude mcp add --transport http prepublish https://mcp.prepublish.ai. Six tools cover a full script audit, a hook score, a reused-content check, a YouTube policy pre-flight, audit collection and a words-to-runtime calculator. It is free and anonymous, with a published daily cap. ## How to Connect Claude Code to a YouTube MCP Server Prepublish serves a YouTube script audit over the Model Context Protocol at `https://mcp.prepublish.ai`, and it audits a script you have written but not recorded. Claude Code connects with one command: ```bash claude mcp add --transport http prepublish https://mcp.prepublish.ai ``` The endpoint is stateless Streamable HTTP, free, and anonymous. It exposes six tools, returns scores, flagged passages and rewrites inside the conversation, and asks for no account. ## How to connect Claude Code to a YouTube MCP server Two ways, and the difference is only where the configuration lives. The command above writes to local scope, which keeps the server to your machine. Run `claude mcp list` to confirm the entry, and `/mcp` inside a session to see the connection status and the tool list. For a server that travels with a repository, create `.mcp.json` at the project root: ```json { "mcpServers": { "prepublish": { "type": "http", "url": "https://mcp.prepublish.ai" } } } ``` The `type` field is load-bearing. Claude Code reads an entry that has a `url` and no `type` as a stdio server, skips it, and reports `MCP server "prepublish" has a "url" but no "type"`. Adding `"type": "http"` fixes it, and `"streamable-http"` works as an alias, which matters because that is the name the MCP specification uses for the transport. A committed `.mcp.json` stays at pending approval until someone runs `claude` in the project and accepts the workspace trust dialog, so a cloned repository cannot silently approve its own servers. `https://mcp.prepublish.ai` is the canonical connector URL. `https://prepublish.ai/mcp` and `https://mcp.prepublish.ai/mcp` serve the same handler and are listed as aliases on the server card, in `prepublish-fe/app/mcp/route.ts`. ## Client setup for Claude Desktop, ChatGPT, Cursor, Cline, Windsurf, VS Code and Codex CLI Every client below takes the hosted URL directly. None of them requires the bridge for a basic connection, which is worth stating because the bridge exists and its presence invites the assumption that a remote endpoint is unavailable. | Client | Config file | Remote URL directly or bridge | Simplest entry | | --- | --- | --- | --- | | Claude Code | `.mcp.json` in the project, or local scope via the CLI | Remote URL directly; the bridge also works | `claude mcp add --transport http prepublish https://mcp.prepublish.ai` | | [Claude Desktop](/guides/connect-claude-desktop-youtube-mcp) | No file for a remote connector. `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS, `%APPDATA%\Claude\claude_desktop_config.json` on Windows, for the local bridge | Remote URL through Connectors, or the bridge in the config file | Connector URL `https://mcp.prepublish.ai`, or `npx -y prepublish-mcp` | | [Cursor](/guides/connect-cursor-youtube-mcp) | `~/.cursor/mcp.json` for every project, `.cursor/mcp.json` for one | Remote URL directly; the bridge also works | `{"url": "https://mcp.prepublish.ai"}` | | [Cline](/guides/connect-cline-youtube-mcp) | The extension MCP settings JSON, opened from the Cline panel, or `~/.cline/mcp.json` for the CLI | Remote URL directly, as `type: streamableHttp`; the bridge also works | `{"type": "streamableHttp", "url": "https://mcp.prepublish.ai"}` | | [ChatGPT](/guides/connect-chatgpt-youtube-mcp) | No file. Developer mode plus a developer-mode app under ChatGPT Plugins | Remote URL only, because ChatGPT connects from OpenAI infrastructure | Endpoint URL `https://mcp.prepublish.ai` pasted into a developer-mode app | | Windsurf | `~/.codeium/windsurf/mcp_config.json` | Remote URL directly, as `serverUrl` or `url` | `{"serverUrl": "https://mcp.prepublish.ai"}` | | VS Code with Copilot | `.vscode/mcp.json` in the workspace, or the user-profile `mcp.json` | Remote URL directly; the bridge also works | `{"type": "http", "url": "https://mcp.prepublish.ai"}` | | Codex CLI | `~/.codex/config.toml`, or `.codex/config.toml` in a trusted project | Remote URL directly; the bridge also works | `url = "https://mcp.prepublish.ai"` | ### Claude Code The CLI command above, or the `.mcp.json` block in the section above. Both are documented in the [Claude Code MCP reference](https://code.claude.com/docs/en/mcp). ### Claude Desktop For a remote connector, open Customize then Connectors, choose Add custom connector, and paste `https://mcp.prepublish.ai`. Claude Desktop, claude.ai and Cowork connect to custom connectors from Anthropic's cloud infrastructure rather than from your machine, so the endpoint has to be reachable over the public internet, which this one is. Free plans are limited to one custom connector. The steps are in [Get started with custom connectors using remote MCP](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp). The local file is a separate mechanism and takes only a command, so it needs the bridge: ```json { "mcpServers": { "prepublish": { "command": "npx", "args": ["-y", "prepublish-mcp"] } } } ``` Save the file, quit Claude Desktop, and restart it. Local server logs land in `~/Library/Logs/Claude` on macOS and `%APPDATA%\Claude\logs` on Windows, per the [MCP quickstart for Claude Desktop](https://modelcontextprotocol.io/quickstart/user). ### Cursor Create `~/.cursor/mcp.json` for every project, or `.cursor/mcp.json` for one project: ```json { "mcpServers": { "prepublish": { "url": "https://mcp.prepublish.ai" } } } ``` Cursor documents both file locations and the remote `url` shape in its [MCP documentation](https://cursor.com/docs/mcp). ### Windsurf Edit `~/.codeium/windsurf/mcp_config.json`: ```json { "mcpServers": { "prepublish": { "serverUrl": "https://mcp.prepublish.ai" } } } ``` Windsurf docs now live under the Devin Desktop documentation; the [MCP page](https://docs.devin.ai/desktop/cascade/mcp) still names `~/.codeium/windsurf/mcp_config.json` as the file and accepts `serverUrl` or `url` for a remote server. ### VS Code with Copilot Create `.vscode/mcp.json` in the workspace, or run `MCP: Open User Configuration` for the user profile: ```json { "servers": { "prepublish": { "type": "http", "url": "https://mcp.prepublish.ai" } } } ``` The wrapper key is `servers`, not `mcpServers`, which is the most common copy-paste error for this client. VS Code documents the file and the remote shape in [Add and manage MCP servers in VS Code](https://code.visualstudio.com/docs/agent-customization/mcp-servers). ### Codex CLI Add a table to `~/.codex/config.toml`: ```toml [mcp_servers.prepublish] url = "https://mcp.prepublish.ai" ``` Codex CLI, the ChatGPT desktop app and the Codex IDE extension share this configuration. The supported keys for a Streamable HTTP server are documented in the [Codex MCP reference](https://learn.chatgpt.com/docs/extend/mcp). ## Which YouTube script tools does the MCP server expose Six tools, discovered with `tools/list`. Names, inputs and outputs below come from `prepublish-fe/lib/mcp/tools.ts`, which is the single source of truth: the stdio bridge fetches its list from the hosted server at startup, so the names cannot drift between the two. | Tool | Inputs | Returns | Cost | | --- | --- | --- | --- | | `audit_script` | `video_title`, `script_text`, and optional `email`, `video_duration_seconds`, `category`, `audience` | Hook, structure and pacing scores, a script-level attention-risk map, and a copy-paste rewrite per flagged passage, plus an `analysis_id` | AI-backed | | `get_audit` | `analysis_id` | The current state of an audit started earlier, and a browser link | Free | | `audit_hook` | `hook_text`, with optional `niche` and `email` | Per-sentence attention pull, the curiosity gap, payoff distance, a grade, top issues and rewrites | AI-backed | | `check_authenticity` | `video_title`, `script_text` | A score, a risk level, the firing signals quoted from the script, and remediation steps | AI-backed | | `policy_preflight` | `script` (200 characters minimum), optional `title` | The YouTube policy categories the draft may touch, each citing YouTube's own published page, plus a verdict and flag counts | AI-backed | | `script_runtime` | One of `script_text`, `word_count`, `target_minutes` | A runtime range or a word budget from measured speaking rates | Free, local arithmetic | Every AI-backed result repeats the same constraint in its payload: the check is text-only, it maps relative attention risk inside an unrecorded script, and it does not measure or predict published YouTube retention. ### audit_script Use it when the draft is finished or nearly finished. > Audit this script for a video titled "I rebuilt my studio for 400 pounds". I plan to record about nine minutes. Send the result to me@example.com. The tool starts an asynchronous audit and polls for up to 90 seconds inside the same request. If the audit has not settled by then, it returns the id and tells the assistant to collect it later. The five checks worth running by hand before you spend a call on this one are in [the pre-recording method](/guides/check-youtube-script-before-recording). ### get_audit Use it after a poll timeout, or when you come back to an audit from earlier in the conversation. > Collect the audit with analysis id 6f0b1c2e-9a44-4f0a-9c3d-1f7b2a8e5d10 and show me only the passages it flagged hardest. ### audit_hook The cheap check, for an opening alone. The browser version of the same check is the [hook analyzer](/tools/youtube-hook-analyzer). > Score this opening and tell me which sentence loses people first: "Most creators lose half their viewers in the first fifteen seconds, and the reason is rarely the editing." ### check_authenticity For the fear that a repeating format reads as templated. > Check this script for reused-content risk. I publish the same format every week and I am worried it now reads as mass-produced: [paste the script] The signals it returns come with quotes from the draft, so the report shows the repetition rather than asserting it. ### policy_preflight For a script that touches sensitive subject matter. > Pre-flight this script against YouTube advertiser policy before I record. The title is "How I got banned from three platforms": [paste the script] The category list cites YouTube's published policy pages. The quoted passages and their rewrites belong to the paid audit, so a free result can return counts with the quotes locked. The browser equivalent is the [monetization checker](/tools/youtube-monetization-checker). ### script_runtime Arithmetic, with no AI call and no budget consumed. > How long will this 2,400-word script run, and how many words do I need for a twelve-minute video? Rates come from a measurement of 349 videos: 25th percentile 160 words per minute, median 181, 75th percentile 201 (`prepublish-fe/lib/seo/wpm-data.ts`). Speaking time only. Pauses, B-roll and demonstrations add time, so the estimate is a floor rather than a target. ## Remote Streamable HTTP or the stdio bridge Use the hosted URL for everything, unless the client cannot be handed a URL. The endpoint is one path that answers POST and GET. A POST carries one JSON-RPC message and gets one JSON response, with no session id issued and no SSE stream opened. The specification allows that: a server handling a request may answer with `application/json` instead of a `text/event-stream`, and the `Mcp-Session-Id` header is a MAY. The handshake, tool discovery and every tool call are ordinary POST requests. A bare GET returns the server card instead of the 405 the specification permits, because humans and crawlers arrive at that URL from directory listings. The registry entry is `ai.prepublish/script-audit`, version 1.0.1, marked latest, with a remote-only Streamable HTTP record pointing at `https://mcp.prepublish.ai`. Those are the fields in `prepublish-mcp/server.json`, read back from the official registry on 19 September 2026. The bridge is published on npm as [`prepublish-mcp`](https://www.npmjs.com/package/prepublish-mcp) version 1.0.0, and the invocation documented in `prepublish-mcp/README.md` and on [the MCP server documentation](/mcp-server) is `npx -y prepublish-mcp`. It starts a local process that connects to the same hosted server over Streamable HTTP and re-serves the tool list over stdio, which is the transport a client uses when it spawns a subprocess and talks over stdin and stdout. The bridge adds and hides nothing: `prepublish-mcp/test/bridge.test.ts` asserts that its sorted tool names equal the six names in the hosted list, and that a forwarded `script_runtime` call returns the same arithmetic. Three cases where the bridge is the right answer: - The client takes only a command and arguments. That is the `claude_desktop_config.json` path, plus some editors and local agent runtimes. - The audit has to run from your own network. Custom connectors in Claude connect from Anthropic's cloud, so a private endpoint behind a firewall will not be reached that way. The bridge runs on your machine. - You want to forward a bearer token from a local environment variable. `PREPUBLISH_TOKEN` sends an `Authorization: Bearer` header upstream, and `PREPUBLISH_MCP_URL` points the bridge at another deployment. The bridge needs Node 20 or newer, per the `engines` field in `prepublish-mcp/package.json`. On startup it writes one line to stderr naming the upstream URL, the tool count and whether a token was supplied, which is the fastest way to confirm that the process launched and reached the server. ## Is the YouTube MCP server free? Limits and what happens at the cap Free and anonymous by default, with three published counters. All three defaults come from `prepublish-fe/lib/mcp/limits.ts`, and all three are environment variables on the deployment rather than constants in the client. | Limit | Default | Window | Variable | | --- | --- | --- | --- | | AI-backed anonymous calls across the whole endpoint | 100 | One UTC day | `MCP_DAILY_CALL_CAP` | | AI-backed anonymous calls per caller | 6 | 10 minutes | `MCP_CALLER_CALL_LIMIT` | | AI-backed authenticated calls per caller | 30 | 10 minutes | `MCP_AUTHED_CALLER_LIMIT` | | `script_runtime` | Unlimited | None | None | Three refusals, three different problems. When the global day is spent, the tool returns: `Prepublish's free MCP endpoint has reached its daily limit of 100 AI-backed calls (it resets at 00:00 UTC).` When one anonymous caller has used six checks inside ten minutes, it returns: `This connection has used its 6 free Prepublish AI checks for now; the allowance resets in about N minute(s).` When an API key has used thirty, it returns `This Prepublish API key has used its 30 MCP checks for now; the allowance resets in about N minute(s).` All three are tool-level errors rather than protocol failures, so the message you see in the conversation is the message the server wrote. The per-caller limit exists because the backend rate limiter keys on client IP and every MCP call reaches it from the web container's single IP address, which would otherwise put every user of the server in one shared bucket. A call that carries an API key is exempt from the shared daily cap, because it is attributable to one account and the backend already enforces that account's plan quota; the wider window is what stops a single key from saturating the endpoint for everyone else. The counters are in-process. A restart resets them, which is a deliberate trade: a soft cap that forgets is better than wrongly blocking someone. Get the live numbers from `GET https://mcp.prepublish.ai`, where `free_tier.ai_backed_calls_per_day` and `used_today` are read from the same counters, and `used_today` counts anonymous calls only. Two more gates sit behind the MCP layer, in the tools themselves. The hook check asks for an email address once the day's anonymous call is used, which the backend answers with a 402 whose message mentions email, unless the call arrived authenticated with an API key. Each individual check also has its own daily allowance on prepublish.ai, which returns a 429 that says the allowance for that check is spent. Neither is a fault in your configuration. The endpoint implements protocol revisions up to `2025-11-25`, and negotiates down for older clients; `2025-06-18`, `2025-03-26` and `2024-11-05` are answered as asked. The revision in force is newer than that, and clients are required to handle older dialects, so a current client will connect, but the server cannot use capabilities added after `2025-11-25`. ## What this server does not do It does not forecast retention. Every AI-backed payload carries the same constraint, stated for the model to relay: a text-only check of an unrecorded script, mapping relative attention risk inside the draft, with no ability to account for delivery, editing, thumbnail, topic or distribution. It does not decide monetisation. `policy_preflight` reports the categories a draft may touch against YouTube's published policy text and links each one. Only YouTube decides, and it decides on the finished video. It does not fetch a video, a transcript or a channel. All six tools take text you paste. If the draft does not deserve the check, no tool here will tell you that: it audits execution against the title's promise, not whether the topic was worth a video. It does not write the script. The tools audit a draft you already wrote, and `audit_script` will return rewrites for flagged passages only, not a draft of its own. It does not give you a per-user history. An API key (`pp_live_...`, created at https://prepublish.ai/dashboard) or an existing magic-link token identifies the account a call belongs to, but no tool lists what that account has audited. Anonymous use has no identity to attach a run history to, which is why `get_audit` takes the id that `audit_script` returned. ## Troubleshooting MCP connection problems Every symptom below is a string the code produces. The server messages and JSON-RPC codes come from `prepublish-fe/lib/mcp/tools.ts`, `prepublish-fe/lib/mcp/limits.ts`, `prepublish-fe/lib/mcp/protocol.ts` and `prepublish-fe/app/mcp/route.ts`. | Symptom | Cause | Fix | | --- | --- | --- | | `MCP server "prepublish" has a "url" but no "type"` in `claude mcp list` | The `.mcp.json` entry has a URL and no transport type, so Claude Code reads it as a stdio server | Add `"type": "http"` or `"type": "streamable-http"` to the entry | | The server never appears after you edit `claude_desktop_config.json` | The file is loaded at launch, and invalid JSON fails silently | Quit Claude Desktop and reopen it, then read `~/Library/Logs/Claude/mcp-server-prepublish.log` | | `Prepublish's free MCP endpoint has reached its daily limit of 100 AI-backed calls (it resets at 00:00 UTC).` | The global day counter is spent | Wait for 00:00 UTC, or run the same check from the browser tool linked on [the MCP server documentation](/mcp-server). Do not retry the tool | | `This connection has used its 6 free Prepublish AI checks for now; the allowance resets in about N minute(s).` | Six AI-backed calls from one caller inside ten minutes | Wait out the window, or use the browser tool for the next check | | `Prepublish needs an email address to continue: ...` | The day's anonymous hook check is used and the backend asks for an address to continue | Pass the user's real address as `email` on `audit_hook`. Never invent one, and do not retry unchanged | | `Prepublish could not use that email address: ...` | The optional address on `audit_script` does not parse | Ask the user to check it, or call again without `email` | | `Prepublish rejected the input for policy_preflight: ...` | The draft is below the schema minimum, 50 characters for `script_text` and 200 for a policy script, or a required field is empty | Paste the full draft rather than a summary, then call the tool again | | `Prepublish's free daily allowance for this check is spent: ...` | The backend's own per-check limit, distinct from the MCP endpoint cap | Tell the user the check can be run in the browser, or try again tomorrow | | `The audit (analysis_id "...") is still running. Call get_audit with that id in a minute to collect it.` | `audit_script` stopped polling after 90 seconds | Call `get_audit` with that id. The in-conversation link opens the same result in a browser | | `Unknown tool "no_such_tool"` with JSON-RPC code `-32602` | The name was misspelled, or the client is holding a stale tool list | Re-run `tools/list` and use a name from the response | | `Resource not found` with JSON-RPC code `-32002` | `resources/read` was called for a uri this server does not serve. One resource exists, the audit widget at `ui://prepublish/audit-v1.html`, and `resources/list` names it | Read the uri from `_meta.ui.resourceUri` on `audit_script` or `get_audit`, or take it from `resources/list`. `prompts/list` answers with an empty array and any other method falls through to `-32601` | | `JSON-RPC batching is not supported; it was removed in protocol revision 2025-06-18. Send one request per POST.` with code `-32600` | A script or an inspector sent a JSON array of requests | Send one JSON-RPC message per POST. The specification removed batching in the [2025-06-18 revision](https://modelcontextprotocol.io/specification/2025-06-18/changelog) | | `npx -y prepublish-mcp` exits at once and the client shows a failed server | Node is older than 20, which the package's `engines` field requires, or the upstream host is unreachable | Run `node --version`, then run the bridge by hand to read its stderr line. Point it elsewhere with `PREPUBLISH_MCP_URL` if needed | ## FAQ Q: How do I connect Claude Code to a YouTube MCP server? A: Run claude mcp add --transport http prepublish https://mcp.prepublish.ai in a terminal. For a project-scoped server that you can commit, add an entry under mcpServers in .mcp.json with "type": "http" and the endpoint as "url", then approve the server when Claude Code asks. Claude Code reads an entry that has a url but no type as a stdio server and skips it, so the type field is required. Q: Is the YouTube MCP server free to use? A: Yes. The endpoint is anonymous and needs no account, API key or card. The free tier is a published allowance: 100 AI-backed anonymous calls per UTC day across the whole endpoint, 6 per anonymous caller per 10 minutes and 30 per authenticated caller per 10 minutes by default, read from prepublish-fe/lib/mcp/limits.ts. The script_runtime calculator is local arithmetic and never counts against any of them. An optional pp_live_ API key, created at https://prepublish.ai/dashboard, attributes calls to your account, lifts the shared daily cap and applies your plan quota instead. Q: Does this work in Claude Desktop? A: Yes, two ways. Add it as a custom connector under Customize then Connectors, and paste https://mcp.prepublish.ai; the connection then originates from Anthropic's cloud infrastructure. Or keep the local config file and run the stdio bridge, which Claude Desktop launches itself: npx -y prepublish-mcp forwards to the same hosted server, so the tool list is identical. Q: Can Cursor, Windsurf, VS Code Copilot and Codex CLI use the same server? A: Yes. Cursor reads ~/.cursor/mcp.json or .cursor/mcp.json and accepts a url entry. Windsurf reads ~/.codeium/windsurf/mcp_config.json and accepts serverUrl or url. VS Code reads .vscode/mcp.json in a workspace or the user-profile mcp.json and takes an entry with "type": "http". Codex CLI reads ~/.codex/config.toml and takes a [mcp_servers.prepublish] table with url. Q: Can the MCP server analyze a video that is already published? A: No. All six tools take text you paste: the script, the hook, the policy draft. Nothing fetches a video, a transcript or a channel, and no result is a measurement of a published video. The tools read a draft before you record. If you need the analysis to line up with real viewer behaviour, compare it against your own YouTube Studio curve afterwards, which is the sequencing described in the pre-recording checks. Q: Does audit_script need an email address? A: No. The address is optional: the audit runs without one and the result comes back in the conversation. Give one and the result link is emailed to you as well; the tool description tells the assistant never to invent an address. There is no account behind it. Q: What happens when the free daily cap is reached? A: The tool returns an error telling the model that the endpoint has reached its daily limit and not to retry, and it names https://prepublish.ai/upload as the alternative for that day. The counter resets at 00:00 UTC. The live number is published on the server card, so you can read it before you start: a GET to the endpoint returns the cap and the calls used today. Q: Does the server read or store my script? A: The script is processed to produce the audit and stored with the analysis so the result can be reopened by id. The MCP documentation states that nothing is sold or shared. If you would rather not send a draft to any service, the six tools are the wrong instrument, and a manual read of your own script is the honest alternative. --- # How to Generate a SKILL.md From a YouTube Channel URL: https://prepublish.ai/guides/generate-skill-md-from-youtube-channel Updated: 2026-09-19 TL;DR: Paste a channel handle into the generator. It lists the 60 newest uploads, keeps long-form videos, analyses at most 12, and requires 4 usable original-language transcripts. Gemini Flash writes a brief; a deterministic renderer emits SKILL.md plus references/hooks.md, references/titles.md, and references/transcript-excerpts.md. Every quote over 8 words is checked against the transcripts. ## How to Generate a SKILL.md From a YouTube Channel Paste a channel handle into the [Prepublish channel skill generator](/tools/youtube-channel-skill-generator). It analyses the 12 most recent long-form uploads, requires at least four usable original-language transcripts, and writes a four-file Agent Skill bundle in about six minutes. Measured runs on 18 and 19 September 2026 took 6 minutes 30 seconds, 5 minutes 35 seconds, and 6 minutes 5 seconds. ## What the generator reads and what it emits The generator accepts a bare @handle, a channel URL, or a link to any video on the channel. It resolves the channel with yt-dlp and reads public data only: the 60 newest entries in the videos tab, then titles, descriptions, tags, chapters, view counts, and durations for the long-form videos among them. There is no YouTube Data API call anywhere in the tool and no Google account is involved (ops/specs/channel-skill-generator.md, 18 September 2026). Three numbers bound the read. Uploads under 180 seconds are discarded before the list is used, at most 12 videos are analysed, and the transcript stage stops once it has accumulated 60,000 characters (channel_skill_service.go, channelSkillLongformSeconds, channelSkillMaxVideos, channelSkillTranscriptsTotal). Each transcript is capped at 8,000 characters, of which the first 1,200 characters are kept as an opening and the next 6,000 as a body. One Gemini Flash call writes the brief. A pure renderer then produces the files, with no model call and no wall clock, so the same stored result always renders the same bytes (channel_skill_render.go, RenderChannelSkillFiles). | Run, 18 and 19 September 2026 | Wall clock | Videos read | Transcripts used | SKILL.md | | --- | --- | --- | --- | --- | | @maxinomics | 6 min 30 s | 12 | 9 | 9,623 bytes | | @veritasium | 5 min 35 s | 12 | 11 | 9,395 bytes | | @maxinomics rerun | 6 min 05 s | 11 | 11 | 9.4 KB | Source: marketing/content-drafts/EVIDENCE.md, section 6. Metadata dominates that time rather than writing. Twelve detail pulls at roughly 13 seconds each account for about 2 minutes 36 seconds of the first run, and every transcript then costs a metadata probe plus a caption download (ops/specs/channel-skill-generator.md, 18 September 2026). A channel with fewer eligible uploads finishes sooner. ## What is inside the generated SKILL.md The renderer emits one brief file and up to three evidence files. SKILL.md is always present; a reference file appears only when it has evidence to carry: ```go // RenderChannelSkillFiles renders the downloadable bundle from the stored // model output and the input snapshot. It is pure and deterministic: no model // call, no wall clock, no map iteration, so the same entity always renders the // same bytes. SKILL.md is always present; a reference file is emitted only when // it has evidence to carry. files := []ChannelSkillFile{{Path: "SKILL.md", Content: renderSkillMD(s)}} // three conditional appends follow, in this order (conditions elided): "references/hooks.md" "references/titles.md" "references/transcript-excerpts.md" ``` The SKILL.md body is fixed in order. These are the heading lines as `renderSkillBody` writes them, with each section's own render call elided: ```go func renderSkillBody(s *ChannelSkill, limits skillRenderLimits) []string { var lines []string if section := renderIdentity(s, limits); len(section) > 0 { lines = append(lines, "## Identity and niche", "") // ...section... elided } if section := renderAudience(s, limits); len(section) > 0 { lines = append(lines, "## Audience", "") } if section := renderVoice(s, limits); len(section) > 0 { lines = append(lines, "## Voice and diction rules", "") } if section := renderHooks(s, limits); len(section) > 0 { lines = append(lines, "## Hook patterns", "") } if section := renderStructure(s, limits); len(section) > 0 { lines = append(lines, "## Structure and pacing template", "") } if section := renderTitleConventions(s, limits); len(section) > 0 { lines = append(lines, "## Title conventions", "") } if section := renderThumbnails(s, limits); len(section) > 0 { lines = append(lines, "## Thumbnail conventions", "") } if section := renderRecurring(s, limits); len(section) > 0 { lines = append(lines, "## Recurring segments and catchphrases", "") } if section := renderTopics(s, limits); len(section) > 0 { lines = append(lines, "## Topics covered and gaps", "") } if section := renderCTAs(s, limits); len(section) > 0 { lines = append(lines, "## CTA patterns", "") } if section := renderBannedMoves(s, limits); len(section) > 0 { lines = append(lines, "## Banned moves", "") } if section := renderChecklist(s, limits); len(section) > 0 { lines = append(lines, "## Draft checklist", "") // (each section's content appends elided for length) } for len(lines) > 0 && lines[len(lines)-1] == "" { lines = lines[:len(lines)-1] } return lines } ``` `renderProvenance` then appends a closing `## Provenance` block that is always present and never empty. | SKILL.md part | Derived from | What the reader sees | | --- | --- | --- | | YAML frontmatter | `SkillFolderName`, `Result.Description`, `ChannelURL`, `VideosAnalyzed`, `GeneratedAt` | `name`, `description`, and a `metadata` map with `channel_url`, `videos_analyzed`, `generated_at`, `generator: prepublish` | | Identity and niche | `identity.niche`, `.positioning`, `.promise`, `.credibility_markers` | a niche paragraph, then bold-labelled "Where it sits" and "What a viewer gets" | | Audience | `audience.who`, `.knowledge_level`, `.what_they_want`, `.what_bores_them` | who the channel writes for, plus two bullet lists | | Voice and diction rules | `voice.summary`, `.person`, `.formality`, `.sentence_rhythm`, `.rules[]`, `.vocabulary[]` | a rhythm description, then rules that can each carry a blockquoted transcript line | | Hook patterns | `hooks[]`: pattern, `seconds_to_payoff`, `video_title`, `opening_quote`, `why_it_works` | real openings with the moment the promise lands | | Structure and pacing template | `structure.template[]`, `.pacing_notes[]` | one table row per beat: Beat, Typical start, Typical length, Purpose | | Title conventions | `titles.conventions`, `.formulas`, `.avoid` | conventions, reusable formulas, and a "These titles never" list | | Thumbnail conventions | `thumbnails.conventions`, `.recurring_elements` | what the thumbnails repeat | | Recurring segments and catchphrases | `recurring_segments[]`, `catchphrases[]` | named segments and repeated phrases with a frequency note | | Topics covered and gaps | `topics.covered`, `.adjacent_gaps` | two lists: inside the supplied videos, and just outside them | | CTA patterns | `ctas[]`: `wording_example`, `placement`, `frequency_note` | the wording, where it sits, and how often it appears | | Banned moves | `banned_moves[]` plus `voice.forbidden[]` | moves the channel does not make, each with a reason | | Draft checklist | `draft_checklist[]` | Markdown checkboxes | | Provenance | video count, upload-date range, transcript count split manual and auto, fetch date, `evidence_notes` | what was read, when, and what the data could not show | The three reference files carry the depth that does not fit in the brief: | Reference file | Contents | Emitted when | | --- | --- | --- | | references/hooks.md | one section per hook: the verbatim opening quote, then title, duration, views, and URL from the snapshot, then why it works and when the promise paid off | the result has at least one hook | | references/titles.md | conventions, formulas, the avoid list, and a "Titles analysed" table of every video in the snapshot with title, published date, length, and views | there is any title evidence or any snapshot video | | references/transcript-excerpts.md | five groups in fixed order: transcript openings, opening hooks, voice rule evidence, structure beat evidence, recurring segment evidence | at least one quote survives deduplication | Two ceilings shape all of this. SKILL.md is capped at 480 lines (`maxSkillMDLines`), and the renderer walks a budget ladder of 8 items, 6 quotes, 240 characters per quote, and 900 characters per paragraph, then 5, 4, 180, and 600, then 3, 3, 140, and 400. The first set that fits wins, and the overflow evidence stays in the reference files. The skill name is capped at 48 characters, matches `^[a-z0-9-]{1,48}$`, takes a `-voice` suffix, and falls back to `youtube-channel-voice`. ## A real SKILL.md from the Maxinomics run The bundle below is real output stored from a run against @Maxinomics on 18 September 2026: prompt version 1, model gemini-3.5-flash, 11 videos analysed, 11 transcripts used, all of them auto-generated captions. Nothing below is reconstructed. ```markdown --- name: "maxinomics-voice" description: "A writing brief for Maxinomics, to be loaded when drafting scripts that analyze global business, economics, and industrial supply chains through real-world data." metadata: channel_url: "https://www.youtube.com/channel/UCUEmaeh13ai1ivT5wzz5Lhg" videos_analyzed: 11 generated_at: "2026-09-18T17:07:05Z" generator: prepublish --- ## Identity and niche The economic, industrial, and geopolitical forces driving global systems, business models, and supply chains. **Where it sits.** An analytical, data-driven explainer channel that bypasses political rhetoric and corporate spin to focus on physical constraints, unit economics, and historical parallels. **What a viewer gets.** A deep, logical understanding of how complex global systems actually work by tracing the money and physical resources underneath them. **Credibility markers** - Uses real-time industry data platforms, such as FreightWaves for freight intelligence. - Cites academic research papers from institutions like MIT and Boston University. - Breaks down complex corporate operations into precise unit economics, such as return per ton of payload. - Draws direct historical parallels, comparing modern tech companies to 19th-century railroads or the 1920s rubber monopoly. ## Structure and pacing template | Beat | Typical start | Typical length | Purpose | | --- | --- | --- | --- | | The Scarcity Hook | 0:00 | 1:10 | Introduce a physical constraint or a specific object that represents the core economic puzzle of the video. | | The Core Math or Unit Economics | 1:10 | 3:00 | Break down the exact numbers, costs, and revenues that drive the behavior of the key players. | | The Historical Parallel | 6:40 | 3:20 | Show how this exact economic pattern has played out in the past, proving it is a recurring force of human nature. | | The Physical Chokepoint | 10:00 | 5:00 | Identify the geographical or physical bottleneck that decides who wins and who loses in this market. | **Pacing notes** - Videos range from 13 to 25 minutes, allowing for deep, multi-chapter historical and economic investigations. - Chapters are clearly defined, often transitioning from a modern corporate dilemma to a historical case study before returning to the present. - The script maintains a steady, deliberate pace, using pauses and musical shifts to let complex mathematical or economic points sink in. ``` The closing provenance block of the same file reports `Videos analysed: 11 (2025-12-23 to 2026-08-07)` and `Transcripts used: 11 (0 manual, 11 auto-generated)`. It also records what the model could not establish. For this run the hooks carry no timings, and the note gives the reason: > the exact seconds to payoff for the hooks could not be determined from the provided metadata as the transcripts do not contain explicit timestamps for the resolution of the opening promises. Those values are zero in the file. One detail about the evidence lines in the bundle: they reproduce the creator's own words, which means they carry the punctuation, filler, and mishearings of the caption track. Those passages sit in blockquotes and are quoted as they are. ## How to install the skill in Claude Code, Cursor, Codex CLI, Copilot, and Gemini CLI Unzip the download. The archive already contains a top-level folder named after the skill, and every client below expects exactly that shape. | Client | Directory | Source | | --- | --- | --- | | Claude Code | `~/.claude/skills//SKILL.md` for personal use, `.claude/skills//SKILL.md` in a repository | [Extend Claude with skills](https://code.claude.com/docs/en/skills), retrieved 19 September 2026 | | Cursor | `.cursor/skills/` in a repository or `~/.cursor/skills/` for the machine | [Cursor skills help](https://cursor.com/help/customization/skills), retrieved 19 September 2026 | | Codex CLI | `$HOME/.agents/skills/`, or `$REPO_ROOT/.agents/skills/` for a repository | [Where Codex loads local skills](https://developers.openai.com/codex/skills), retrieved 19 September 2026 | | GitHub Copilot, CLI and VS Code | `.github/skills/`, `.claude/skills/`, or `.agents/skills/` in a repository; `~/.copilot/skills/` or `~/.agents/skills/` for personal | [Adding agent skills for GitHub Copilot CLI](https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/add-skills), retrieved 19 September 2026; the [VS Code page](https://code.visualstudio.com/docs/agent-customization/agent-skills) is dated 16 September 2026 | | Gemini CLI | `~/.gemini/skills/` or `~/.agents/skills/` for user scope, `.gemini/skills/` or `.agents/skills/` for workspace scope | [Gemini CLI skills](https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/skills.md), retrieved 19 September 2026 | Cursor also loads `.claude/skills/` and `.codex/skills/` for compatibility, so one Claude Code install serves both. Copilot takes `/skills reload` to pick up a new folder without restarting, then `/skills info ` to confirm. Codex CLI needs a restart if a new skill does not appear. Three constraints from the Agent Skills specification apply to any hand-editing afterwards. The `name` field must match the parent directory name, the `description` field is capped at 1024 characters, and the body is meant to stay under 500 lines with longer material in `references/` ([specification](https://agentskills.io/specification), retrieved 19 September 2026). The generator already works inside those limits, because it caps SKILL.md at 480 lines and puts the deep evidence in three reference files. ## Which channels make good input The 12-video budget cuts both ways. It is enough to describe a settled format and too little to describe a channel in transition. | Input | What happens | Why | | --- | --- | --- | | Twelve or more recent long-form uploads with captions | Full run | The brief is built from the maximum evidence set | | Four to eleven eligible uploads | Run proceeds with fewer videos | Provenance records the real count, so the brief is thinner but honest | | Fewer than four eligible long-form uploads | Fails as too_few_videos, and the run is charged | There is not enough material to describe a format | | Uploads without captions, or with only machine translations | Those videos are skipped | The tool quotes the creator's own words and never generates a transcript | | Fewer than four usable transcripts | Fails as too_few_transcripts, and the run is charged | Nothing can be quoted, so nothing can be written | | A channel that pivoted format inside the last 12 uploads | The brief averages both eras | The window has no era filter | Two practical rules follow. Pick a channel whose last dozen long-form uploads resemble each other, and check the provenance block before trusting the voice section, because the upload date range printed there is the window the model actually read. A captions failure caused by YouTube blocking our own network is reported separately as `captions_blocked` and does not charge the daily run, because that failure is ours rather than the channel's (ops/specs/channel-skill-generator.md, 18 September 2026). ## How to edit the generated file before you use it Read the provenance block first, including the "What the data could not show" list. It is the model telling you where it guessed or gave up, and the fastest route to the parts that need a human. The evidence sections are worth trusting without re-reading the channel, because a machine check backs them. Every `*_quote` field the model returns is compared against the supplied transcripts, and a quote longer than 8 words that cannot be found is removed, with the removal recorded in the provenance block (`ai.ValidateChannelSkillQuotes`, `ai.StripChannelSkillUnverifiedQuotes`). The writer gets up to three attempts, each retry naming the exact failures. Quotes of 8 words or fewer are not checked, so treat a short quotation as a paraphrase and a long one as grounded. These sections deserve an edit: - **Identity, audience, and the draft checklist.** These are interpretation rather than measurement. The model read metadata and transcript excerpts, and it did not meet the audience. - **Thumbnail conventions.** They are inferred from titles, descriptions, tags, and chapters. The writer never sees the thumbnail image. - **Payoff timings.** `seconds_to_payoff` depends on captions or chapters carrying timing. When it cannot be established, the value is zero and the reason appears in the provenance notes, as in the Maxinomics bundle above. - **Title formulas.** A formula carries an example only when that exact title appears in the analysed snapshot, so a missing example signals a pattern the model generalised. Everything else can be saved and used. There is no build step and no schema to validate. ## What the generator cannot do It reads public captions and metadata, and nothing else. It does not watch the video. Delivery, editing rhythm, music, on-screen text, and the thumbnail image are invisible to it, which is why thumbnail guidance is inferred rather than observed. It describes patterns rather than predicting results. The bundle carries no claim about retention, watch time, or platform treatment, and the model is instructed to report a gap rather than fill one. The provenance block says so directly: for the Maxinomics run it lists as absent "audience retention, click-through rates, and private analytics." The transcripts are frequently auto-generated, so a verbatim quote can contain a caption track's error. The generator copies that text as it stands, which keeps the quote traceable and keeps a misheard word attributable to the source. Finally, the analysis window is recent by design. Twelve uploads is a snapshot of how a channel publishes now, not a history of how it got there. If the channel has a second format that matters, the honest move is a second run once that format fills the window. The [channel scanner](/tools/youtube-channel-scanner) reads the same public surface if you want the raw numbers before committing to a skill run, and [how to write a YouTube script](/guides/how-to-write-a-youtube-script) covers the drafting side that the brief feeds. ## FAQ Q: How long does it take to generate a SKILL.md from a YouTube channel? A: Six minutes is the working figure. Three live runs measured on 18 and 19 September 2026 took 6 minutes 30 seconds for @maxinomics, 5 minutes 35 seconds for @veritasium, and 6 minutes 5 seconds for a @maxinomics rerun (marketing/content-drafts/EVIDENCE.md, section 6). Most of that time is metadata rather than writing: twelve detail pulls at roughly 13 seconds each account for about 2 minutes 36 seconds, and every transcript then costs a metadata probe and a caption download. Q: How many videos does the generator read, and how many transcripts does it need? A: It lists the 60 newest uploads, discards anything under 180 seconds, and analyses at most 12 long-form videos (channel_skill_service.go, channelSkillVideoWindow and channelSkillMaxVideos). Each transcript is capped at 8,000 characters and collection stops at 60,000 characters across the run. At least 4 videos must yield a usable original-language transcript or the run fails without writing a file. A Shorts-heavy channel can lose most of its uploads to the 180-second filter before analysis begins. Q: What happens if the channel has no public captions? A: The video is skipped. The generator never invents a transcript, and a video whose only tracks are machine translations is skipped as well, because quoting a translation back as the creator's voice would be a fabrication (channel_skill_service.go). If fewer than 4 usable transcripts remain, the run fails as too_few_transcripts. When the refusal comes from YouTube blocking our own network instead, the row records captions_blocked, and that failure does not charge the daily run. Q: Where do you put SKILL.md so an agent can use it? A: Unzip the bundle and put the skill folder in the client's skills directory. Claude Code reads ~/.claude/skills/ and .claude/skills/; Cursor reads ~/.cursor/skills/ and .cursor/skills/; Codex CLI reads ~/.agents/skills/ and a repository's .agents/skills/; GitHub Copilot reads ~/.copilot/skills/ and .github/skills/; Gemini CLI reads ~/.gemini/skills/ and .gemini/skills/. The zip already contains a top-level folder named after the skill, which matters because the specification requires the name field to match the parent directory (agentskills.io/specification, retrieved 19 September 2026). Q: Can you edit the generated SKILL.md? A: Yes. The file is plain Markdown with YAML frontmatter, so no build step is involved. Edit the interpretation sections first: identity, audience, and the draft checklist are the model's reading of the channel, while the quote fields were machine-checked against the transcripts. If you rename the folder, keep the name field in step, because the specification requires the name to match the parent directory. The generator writes nothing back, so an edited copy is yours alone. Q: Why does the brief describe two different formats? A: Because the analysis window is the 12 most recent long-form uploads, with no era filter. A channel that changed format, length, or subject inside that window produces a brief that averages the old and the new. The provenance block dates the window, which is how you spot it: when the upload range covers a known pivot, read the voice and structure sections as two periods rather than one. Narrowing the input means waiting until the new format fills the window. Q: Does the generator need a YouTube account or an API key? A: No. It reads public channel data with yt-dlp and makes no YouTube Data API call, so a visitor needs no Google account and the channel owner grants nothing (ops/specs/channel-skill-generator.md, 18 September 2026). The limit is one charged run per IP address per rolling 24 hours, with a seven-day cache per channel. A repeat request for the same channel inside seven days returns the stored bundle instead of spending the run. --- # Where Agent Skills Go: Claude Code, Cursor, Codex, Copilot URL: https://prepublish.ai/guides/install-agent-skills-claude-cursor-codex Updated: 2026-09-19 TL;DR: A skill is a folder whose name matches the name field in SKILL.md. Claude Code reads .claude/skills/ in a project and ~/.claude/skills/ for every project. Cursor reads .agents/skills/ and .cursor/skills/. Codex, Copilot, Gemini CLI and OpenCode all read .agents/skills/, which makes it the shared location. Claude Code is the one client that does not. ## Where Agent Skills Go: Claude Code, Cursor, Codex, Copilot An agent skill is a folder whose name matches the `name` field in its `SKILL.md`, and each client reads it from a directory that client owns. Claude Code reads `.claude/skills//SKILL.md` in a project and `~/.claude/skills//SKILL.md` in every one. Cursor reads `.agents/skills/` or `.cursor/skills/` in a project, and the same two under your home directory. ## Where do agent skills go in Claude Code and Cursor? Both clients split skills into project scope and personal scope, and both use the folder name as the identity of the skill. The [Agent Skills specification](https://agentskills.io/specification) requires the `name` field to match the parent directory name, and [Cursor restates that rule](https://cursor.com/docs/context/skills) in its own documentation. Claude Code adds three scopes the other clients do not have. A plugin carries skills in its own `skills/` folder and namespaces them as `/plugin-name:skill-name`. Enterprise skills load from `.claude/skills/` inside the managed settings directory. Skills enabled on a claude.ai account download into `~/.claude/skills/synced/`, which is why `synced` is a reserved folder name that Claude Code skips. Personal scope also differs by client, and that is where a directory which works locally stops working elsewhere. Cursor keeps `~/.cursor/skills/` on the machine until you turn on Sync Skills for Cloud Agents, and it copies neither `~/.agents/skills/` nor unsynced local skills to Cloud Agents, remote SSH sessions or self-hosted workers. Claude Code keeps `~/.claude/skills/` out of Cowork, cloud sessions and routines, which read the skills enabled on your account instead. ## The directory matrix for seven clients Agent Skills clients disagree about directories, which is why a skill written for one client often sits unread in another. Each client name below links to the page the row is drawn from, and every page was read on 19 September 2026. | Client | Project directory | Personal directory | How the client discovers the skill | Reads other clients' directories | | --- | --- | --- | --- | --- | | [Claude Code](https://code.claude.com/docs/en/skills) | `.claude/skills//SKILL.md` | `~/.claude/skills//SKILL.md` | Scans those locations at startup, including parents up to the repository root, then watches them for edits | No (measured 19 September 2026) | | [Cursor](https://cursor.com/docs/context/skills) | `.agents/skills/` or `.cursor/skills/` | `~/.agents/skills/` or `~/.cursor/skills/` | Walks the skills root recursively at startup; a nested project directory scopes its skills to the files below it | Yes: `.claude/skills/`, `.codex/skills/`, `~/.claude/skills/`, `~/.codex/skills/` | | [Codex CLI](https://developers.openai.com/codex/skills/) | `.agents/skills/` in the working directory, in each parent, and at the repository root | `$HOME/.agents/skills`, with admin scope at `/etc/codex/skills` | Scans from the working directory up to the repository root, then lists name, description and path in the prompt | Not documented | | [GitHub Copilot](https://docs.github.com/en/copilot/concepts/agents/about-agent-skills) | `.github/skills/`, `.claude/skills/` or `.agents/skills/` | `~/.copilot/skills/` or `~/.agents/skills/` | Loads repository and personal skills into the cloud agent, code review, the Copilot CLI and IDE agent mode | Yes: `.claude/skills/` and `.agents/skills/` | | [Gemini CLI](https://geminicli.com/docs/cli/skills/) | `.gemini/skills/` or the `.agents/skills/` alias | `~/.gemini/skills/` or the `~/.agents/skills/` alias | Scans discovery tiers; the model calls `activate_skill`, and you approve a consent prompt before the body loads | Yes, through the `.agents/skills/` alias | | [OpenCode](https://opencode.ai/docs/skills/) | `.opencode/skills/`, plus `.claude/skills/` and `.agents/skills/` | `~/.config/opencode/skills/`, `~/.claude/skills/`, `~/.agents/skills/` | Walks up from the working directory to the git worktree, then lists skills in the `skill` tool description | Yes: the `.claude` and `.agents` paths | | [Claude apps](https://support.claude.com/en/articles/12512198-creating-custom-skills) | No directory. Upload a zip, then enable the skill in Customize, then Skills | Not applicable: the skill belongs to your account | Server side. The zip must hold the skill folder at its root, not loose files | No | Two rows need a note the table cannot hold. Anthropic's help centre article writes the filename in lowercase as `skill.md` and caps the description at 200 characters, while the platform documentation and the specification say `SKILL.md` and 1,024. The rows above follow the platform documentation. The Codex row covers the ChatGPT desktop app as well, because OpenAI ships skills into both products from the same `.agents/skills` locations. The `.agents/skills/` path is the nearest thing to a shared location, and Gemini CLI explains why it exists: the alias is documented as an interoperable path that stays compatible across different AI tools. Five of the seven rows above read it. Claude Code is the holdout, so a repository that mixes clients needs a `.claude/skills/` entry beside the shared one rather than instead of it. ## How to verify a skill loaded in each client Each row below is the check that client documents. Listing a skill and using the skill are different questions, and only one of them has a command. | Client | Command or step | What a pass looks like | | --- | --- | --- | | Claude Code | Type `/name`, or open the `/skills` menu | The body runs; an unloaded name answers `Unknown command: /name`. `/skill-doctor` reports each skill's context cost and usage (v2.1.252 or later) | | Cursor | Open Customize in the sidebar, then Skills | Discovered skills appear beside rules. Typing `/` in Agent chat also finds the skill | | Codex CLI | Run `/skills`, or type `$` | The skill appears in the selector. `~/.codex/config.toml` can disable one with a `[[skills.config]]` entry without deleting the file | | GitHub Copilot | `gh skill list`, on GitHub CLI 2.90.0 or later | Installed skills are listed, and `gh skill preview OWNER/REPOSITORY SKILL` renders one before install | | Gemini CLI | `/skills list` in a session, or `gemini skills list --all` from the terminal | The skill appears with its tier, and activation shows a consent prompt naming the directory it may read | | OpenCode | `opencode debug skill` | Prints every discovered skill as JSON with its name, description and absolute path | | Claude apps | Enable the skill, then send a prompt that should match it | Anthropic's guidance says to review the thinking to confirm the skill loaded, then iterate on the description | GitHub documents no list command for the cloud agent, so the only check there is whether Copilot applies the skill when your prompt matches its description. Anthropic documents the same gap for claude.ai, which is why that row ends in a prompt test. ## Measured: what two clients did on 19 September 2026 Documentation pages describe intent, and clients enforce less than they describe. I built one scratch project on macOS, placed the same `SKILL.md` files in different directories, and ran two clients against it. Claude Code was version 2.1.272 and OpenCode was version 1.18.23. Claude Code ran a skill from `.claude/skills/hello/` when it was invoked as `/hello`, and answered `Unknown command: /agentsonly` for a skill that existed only in `.agents/skills/`. A control invocation of `/nosuchskill` in the same project returned the same message, so that message separates a failed load from a successful one. A symlink at `.claude/skills/linked` pointing into `.agents/skills/agentsonly/` then worked, which means Claude Code takes the invocation name from the entry in its own directory while reading the file from the target. Codex documents following symlinked skill folders as well, and the other clients' pages do not say. OpenCode listed skills from a project `.agents/skills/` directory, a project `.claude/skills/` directory and a home `~/.agents/skills/` directory, each with its path on disk. It also listed a skill whose `name` field said `not-mismatch` inside a folder called `mismatch`, under the frontmatter name, so the match rule its own documentation states was not enforced at discovery in that version. Every run happened on macOS, in one project, against project-level paths. The symlink result is the one that matters for a team, because it means one authored copy can serve a client that reads `.agents/skills/` and a client that does not. ## Sharing skills with a team Commit the skill directory. A skill checked into a repository is the one distribution method every client in the matrix supports, and each client picks the folder up from its own path without an install step. Author the file once in `.agents/skills//`, the path five of the seven clients read, and add a symlink at `.claude/skills/` for Claude Code. That arrangement was measured above rather than assumed. Windows needs a different mechanism for symlinks, and no client in this matrix documents junction behaviour. Claude Code writes the per-developer visibility choices from its `/skills` menu into `.claude/settings.local.json`, so that file belongs in `.gitignore`. Keep personal skill directories out of the repository, and do not author a skill named `synced`, because Claude Code reserves that folder for account skills. Portability breaks in three places. Claude Code accepts frontmatter fields that claude.ai and the Skills API reject with an error listing the allowed keys, so a skill meant for both surfaces should use the six specification fields only. Body features that only Claude Code implements, such as injecting shell output at load time, do nothing in claude.ai chat or through the API. Codex reads an optional `agents/openai.yaml` beside `SKILL.md` for display metadata and invocation policy, and the other clients ignore that file. A skill is one shape of reusable capability, and an MCP server is the other. The server shape suits a capability that should run on a server rather than travel as a folder of instructions. Prepublish publishes it at [the MCP server](/mcp-server), with a remote endpoint, a local bridge through `npx prepublish-mcp`, and the same audit reachable by either route. If you would rather not author the file, [the channel skill generator](/tools/youtube-channel-skill-generator) writes a bundle in this layout: one `SKILL.md` plus a `references/` folder, inside a zip whose root is the skill folder. The name it generates already satisfies the 64 character ceiling, and it is capped at 48 characters because that name becomes the frontmatter name, the zip top level and the download filename stem (`prepublish-be/internal/domain/entity/channel_skill_render.go`). Measured runs on 18 and 19 September 2026 produced a 9,623 byte `SKILL.md` for @maxinomics from 12 videos and 9 transcripts in 6 minutes 30 seconds. ## Troubleshooting: the skill does not load or does not trigger Each row is a documented rule rather than a guess, and most of them come from the specification's validation rules or from a client that enforces them. | Symptom | Cause | Fix | | --- | --- | --- | | The skill does not trigger on its own | Matching runs on the description, so a description without the words a user would type gives the model nothing to match. `disable-model-invocation: true` removes automatic invocation in Claude Code and Cursor, and Cursor's `paths` field hides a skill from work outside its globs | Put the trigger words in the first sentence of the description, then invoke the skill explicitly to separate a load failure from a match failure | | The frontmatter fails validation | Claude Code reads frontmatter only when the opening `---` is the first line, and treats the whole file as content otherwise. A claude.ai or Skills API upload rejects a field outside the specification and names the allowed properties. A name over 64 characters or a description over 1,024 fails the specification | Run `skills-ref validate ./my-skill` from the specification's reference library, keep to the six specification fields on anything you upload, and check for a blank line above the `---` | | The name does not match the directory | The specification requires `name` to match the parent directory, Cursor and OpenCode document the same rule, and Copilot says the name typically matches. Claude Code takes the invocation name from the directory and treats the field as a display label | Rename the folder or the field, and pick a name that works as the frontmatter name, the zip top-level folder and the download filename stem | | The description is too vague for the agent to match | The description is the only text loaded before activation, so it carries the whole matching decision. Claude Code truncates the combined `description` and `when_to_use` text at 1,536 characters, and Codex shortens descriptions first when the skill list passes its budget | Write what the skill does and when to use it, in that order, then generate should-trigger and should-not-trigger prompts and measure the hit rate | | The file is too long | The body loads on activation and stays in context for the turn. The specification recommends under 5,000 tokens and 500 lines, and Claude Code keeps only the first 5,000 tokens of each skill when it re-attaches them after auto-compaction, inside a combined 25,000 token budget | Move detail into `references/` and link each file from the body, one level deep. Codex counts its list budget against every installed skill, so a large library costs context whether or not a skill runs | ## Limits: directories move, and some of these claims are documentation-only Everything here describes what seven vendors documented on 19 September 2026. Directories in this area have moved before and will move again. Claude Code merged custom commands into skills and still loads `.claude/commands/` for older setups. Gemini CLI tells unpaid tier and Google One users that Antigravity CLI replaced it on 18 June 2026, while the skills page I read carries an April 2026 date. `gh skill` is in public preview and needs GitHub CLI 2.90.0 or later. The Copilot and Codex pages carry no visible last-updated date at all, so the only date attached to those rows is the day I read them. Some cells rest on documentation alone, and the table says so rather than filling the gap. Codex does not document whether it reads `.claude/skills/`. Cursor, Copilot, Gemini CLI, OpenCode and Claude apps do not state whether they follow a symlinked skill folder, and only Claude Code and Codex document that they do. My OpenCode measurement came from one version on one operating system. The default filesystem on macOS is case-insensitive, so a lowercase `skill.md` was the same file as `SKILL.md`, and I did not test filename casing anywhere else. Version gates sit under individual behaviours, and they matter when a step does not work on your machine. `/skill-doctor` needs Claude Code v2.1.252 or later. Syncing account skills in the terminal needs v2.1.273 or later. Cursor copies personal skills to Cloud Agents only after you turn sync on. Re-check four things after a client upgrade. Confirm the directory still matches the matrix, because a compatibility path can be dropped as quietly as it was added. Re-run one explicit invocation per client, since that separates discovery from matching. Confirm the frontmatter fields you use still load in the client that is not yours. Re-read the documentation pages, because each carries its own last-updated date, and a directory claim is only as current as the page that made it. ## FAQ Q: Do agent skills work in both Claude Code and Cursor without changes? A: Mostly. Claude Code and Cursor both read the specification fields name and description, and both read a SKILL.md body. The differences sit in the extensions each client adds. Claude Code accepts context, agent, model and allowed-tools; Cursor has its own paths, icon and color fields. A skill written with only the six specification fields loads in both, and the same file uploads to claude.ai without an unexpected-key error. Q: Where do agent skills go in Claude Code? A: Claude Code reads project skills from .claude/skills//SKILL.md and personal skills from ~/.claude/skills//SKILL.md. It also reads a nested .claude/skills/ below the directory where the session started, but only after Claude reads or edits a file there. A plugin carries skills in its own skills/ folder, and skills enabled on your claude.ai account sync into ~/.claude/skills/synced/. All of that comes from the Claude Code skills documentation read on 19 September 2026. Q: Where does Cursor look for skills? A: Cursor loads project skills from .agents/skills/ and .cursor/skills/, and user-level skills from ~/.agents/skills/ and ~/.cursor/skills/. It walks those roots recursively, so a skill group filed inside a category folder still works, and it picks up a nested .cursor/skills/ anywhere in the repository, scoped to files under that folder. Cursor also loads .claude/skills/, .codex/skills/, ~/.claude/skills/ and ~/.codex/skills/ for compatibility. Q: Is there one directory every client reads? A: .agents/skills/ is the closest thing. Cursor, Codex, GitHub Copilot, Gemini CLI and OpenCode all read it, across project and personal scope. Claude Code does not. A project skill that existed only in .agents/skills/ answered Unknown command when invoked in Claude Code 2.1.272 on 19 September 2026. The arrangement that works is one authored copy in .agents/skills/ plus a symlink into .claude/skills/, which Claude Code followed in the same test. Q: What happens when the frontmatter name does not match the folder? A: The specification requires a match, and Cursor and OpenCode both document that requirement. Claude Code is looser: the invocation name comes from the directory, and the name field is a display label, so /hello comes from a folder called hello whatever the field says. A run of OpenCode 1.18.23 on 19 September 2026 listed a skill whose field said not-mismatch inside .agents/skills/mismatch/, so that rule was not enforced at discovery there. Q: How do I confirm that a skill loaded? A: Invoke it by name and read what happens. In Claude Code, typing /name runs the body, and a missing skill answers Unknown command: /name, which I measured on version 2.1.272 on 19 September 2026. Cursor lists discovered skills under Customize, then Skills. Codex takes /skills, or a dollar sign to mention a skill. Gemini CLI takes /skills list. OpenCode prints every discovered skill and its path through opencode debug skill. GitHub CLI lists installed skills with gh skill list. Q: Why does a skill not trigger automatically? A: Automatic invocation rests on the description, so a vague one produces no match. Setting disable-model-invocation true removes a skill from automatic invocation entirely, in Claude Code and in Cursor. Cursor can also scope a skill with paths so it appears only for matching files. Codex shortens descriptions first when the skill list passes its budget and may omit skills from the initial list, so the trigger words belong in the first sentence. Q: Which skill files should I commit to a repository, and what should I ignore? A: Commit the skill directories, because they are the shared artifact: .agents/skills/, .claude/skills/, .github/skills/, .cursor/skills/, .gemini/skills/ or .opencode/skills/. Ignore per-developer state instead. Claude Code writes the /skills visibility choices into .claude/settings.local.json, which should stay on one machine. Keep personal skills out of the repository, and do not author a skill named synced, because Claude Code reserves that folder for skills from your account. --- # Original vs Translated YouTube Captions: How to Tell Them Apart URL: https://prepublish.ai/guides/original-vs-translated-youtube-captions Updated: 2026-09-19 TL;DR: An auto-translation is not a track. The player appends tlang to a real track's URL, so the request keeps lang=en while the body is Turkish. Read the spoken language from audioTracks[defaultAudioTrackIndex], strip tlang from every fetch, and prefer a manual track over the automatic one. Measured on 19 September 2026 on aircAruvnKk. ## Original vs Translated YouTube Captions: How to Tell Them Apart An auto-translated YouTube caption is not a track. The player builds one by adding `tlang=` to a real track's URL, so the request keeps `lang=en` while the body is Turkish. Read the spoken language from `audioTracks[defaultAudioTrackIndex]`, strip `tlang` from every fetch, and prefer a manual track over the automatic one. Measured on 19 September 2026 on `aircAruvnKk`. ## How to tell original language captions from translated YouTube captions Three signals separate a real track from a translation, and all three are visible before you fetch anything. The first is the URL. A real track's URL carries `lang` and, for auto-generated tracks, `kind=asr`. A translation carries `lang`, `kind=asr` and `tlang`. The `lang` value names the track the translation was derived from, not the language of the body, so two requests that both say `lang=en` can return two different languages. The second is the list. `captionTracks[]` in `ytInitialPlayerResponse` holds real tracks only, and an auto-translation is not an entry there. Counting the array gives the number of real tracks and says nothing about how many translations exist. The third is the player's current selection. That value is a viewer preference set from the interface language, so on a Turkish interface it preselects the Turkish translation of an English video. A client that reads the current selection as the video's language adopts a UI setting as a fact about the audio. | Signal | What it looks like for a real track | What it looks like for a translation | | --- | --- | --- | | URL parameter | `lang=en&kind=asr` | `lang=en&tlang=tr&kind=asr` | | Presence in `captionTracks[]` | present | absent | | Player selection | the track itself | the track plus `translationLanguage` on the entry | | yt-dlp key | `en` or `en-orig` | `tr` | | Body language | English | Turkish | ## What the tlang parameter does to a caption URL `tlang` is a request-time instruction, not a stored asset. The player takes a track that exists, asks YouTube to machine-translate it into the named code, and renders the result. The track itself is unchanged, and no new track is created. Because the translation is derived at fetch time, it inherits the source track's identifiers. The `lang` parameter, the `kind=asr` marker and the video id all survive into the translated request, and only `tlang` says what the body will be. Measured on 19 September 2026, the translated request for `aircAruvnKk` kept `lang=en` and added `tlang=tr`, and the body it returned was Turkish. A yt-dlp probe on the same day resolved the key `tr` to `lang=en&tlang=tr&kind=asr` and the key `de` to `lang=en&tlang=de&kind=asr`. The parameter changes the body while leaving every field a naive parser reads unchanged. ## The measured example: 31 tracks, Arabic first, and Turkish behind an English label `aircAruvnKk` is 3Blue1Brown's "But what is a neural network?", a video spoken in English. Measured on 19 September 2026: | Fact | Measurement | | --- | --- | | Caption tracks the player listed | 31 | | First track in the player's own list order | Arabic, because the list is alphabetical rather than spoken-language first | | Track the player pre-selected for a viewer whose interface language was Turkish | `English >> Turkish`, an auto-translation | | The URL of that translated request | keeps `lang=en` and adds `tlang=tr` | | The body of that request | Turkish text | | What a scraper that trusts the parameter reports | language `en`, returning Turkish | The 31 figure reconciles with an independent read. On the same day, yt-dlp 2026.08.19 reported 30 keys under `subtitles`, the creator-uploaded set for that video, plus a single auto-generated key, `en-orig`. The pre-selected translation appears in neither count. Nothing about the translated request is malformed. It returns HTTP 200, the JSON3 body parses, the segments carry text, and the language field says `en`. A pipeline with no `tlang` check stores Turkish prose in an English row. The alphabetical order is the second half of the trap. A caller that takes the first entry, or that walks the list until it finds a language it recognises, can select Arabic on an English video without that entry being wrong. ## The selection rule Prepublish uses, in order Two implementations exist, one in the browser extension and one on the server, and both follow the same order. The extension resolves the spoken language first, then chooses a track. `spokenLanguage` in `prepublish-extension/src/content/youtube-main.js` never consults the viewer's caption selection, because that selection is set from the interface language. `pickTrack` then applies this order: 1. A track in the spoken language, preferring a manual track over the auto-generated one. 2. If the spoken language has no track, any manual track in the list. 3. Then the auto-generated track, if one exists. 4. Then the first entry in the list. 5. The viewer's current selection applies only as a tiebreaker between tracks already in the chosen language, such as `en` against `en-US`. A selection that carries `translationLanguage` is skipped, because selecting it re-applies the translation. 6. The chosen entry is copied with `translationLanguage` deleted before it is handed to the player, and the result is labelled by comparing the chosen code against the spoken language rather than by reporting what was asked for. The server applies the same idea to yt-dlp's keys, in `pickOriginalTrack` in `prepublish-be/internal/infrastructure/youtube/channel_dlp.go`: 1. The creator's manual track for the video's declared language. 2. The ASR key ending `-orig`, which YouTube marks as the original audio and which exists even when the video declares no language. 3. The ASR key for the video's language, accepted only when its URL carries `kind=asr` and no `tlang=` anywhere. 4. If none of those match, no track. The function returns false rather than substituting a translation. Keys are walked in sorted order, so the same video yields the same track on every run. `baseLanguage` reduces a tag to its base, so `en-US` matches `en` and `es-orig` still matches a video declared as `es`. That function backs the stored result at [the transcript endpoint](/youtube-transcript), which reports the chosen language code, the source as `manual` or `asr`, and whether the chosen track is the spoken one. ### How to find the spoken language from audioTracks[defaultAudioTrackIndex] The player describes the audio separately from the captions, and that description is the field to trust. In the player response, `captions.playerCaptionsTracklistRenderer.audioTracks` holds the audio tracks and `defaultAudioTrackIndex` names the one playing. ```js const renderer = playerResponse .captions.playerCaptionsTracklistRenderer; const audio = renderer.audioTracks[renderer.defaultAudioTrackIndex]; const spoken = audio.audioTrackId || audio.id || audio.languageCode; ``` An audio track also names the caption tracks recorded in its language, which gives a second read of the same fact. `audio.defaultCaptionTrackIndex` and `audio.captionTrackIndices[0]` both index into `captionTracks`, and that entry's `languageCode` is the language the player associates with the audio. The extension falls back in a fixed order when the audio entry is absent or carries no parseable code. It tries `videoDetails.defaultAudioLanguage`, then the `audioTrack.id` of the format flagged `audioIsDefault` in `streamingData.adaptiveFormats`. After that come the language of the `asr` track, and then the single shared language when every listed track has one. The last two are inferences rather than declarations, and the code names them as such. ## The same distinction in yt-dlp output yt-dlp exposes the two kinds of track under separate keys, which makes the check cheap. | Where it appears | What it is | How to spot it | | --- | --- | --- | | `subtitles["en"]` | a track the creator uploaded or approved | any key under `subtitles` | | `automatic_captions["en"]` | speech recognition of the spoken audio | URL carries `kind=asr`, no `tlang` | | `automatic_captions["en-orig"]` | the same recognition, explicitly marked as the original audio | key ends `-orig` | | `automatic_captions["tr"]` | a machine translation of the English track into Turkish | URL carries `tlang=tr` | Measured with yt-dlp 2026.08.19 on 19 September 2026 for `aircAruvnKk`: 30 keys under `subtitles`, 162 keys under `automatic_captions`, exactly one key ending `-orig` (`en-orig`), and 155 keys whose URLs carry `tlang=`. Of the six keys left, the plain `en` entry resolves to a `timedtext` URL carrying `kind=asr`, and the other five resolve through a manifest URL with no `lang` or `kind` parameter on it. The flag that pulls only the original is `--sub-langs` with the `-orig` key, alongside `--write-auto-subs`: ```bash yt-dlp --skip-download --write-subs --write-auto-subs \ --sub-langs "en-orig" --sub-format vtt \ "https://www.youtube.com/watch?v=aircAruvnKk" ``` That command wrote a single file, `aircAruvnKk.en-orig.vtt`, 171,557 bytes, whose header reads `Language: en`, and it wrote nothing else. The plain `en` key under `automatic_captions` resolves to the same track. Requesting it wrote `aircAruvnKk.en.vtt` at 171,557 bytes, and the two files were byte-identical by SHA-256 (`4a78a5252564f51a38085db4d678b2edc08ba03956f2be81d86f7be218ae797e`). The `-orig` suffix is the explicit marker, not a different rendition. To find the key without guessing it: ```bash yt-dlp -J --skip-download --ignore-no-formats-error "$URL" \ | jq -r '.automatic_captions | keys[] | select(endswith("-orig"))' ``` That returns `en-orig` for this video. To count how many translations a video offers, which is the number of requests that would have produced wrong-language text: ```bash yt-dlp -J --skip-download --ignore-no-formats-error "$URL" \ | jq '[.automatic_captions | to_entries[] | select(.value | any(.url | test("tlang=")))] | length' ``` That returns 155 for this video. The filename will not warn you. Asking for `tr` makes yt-dlp announce `Writing video subtitles to: aircAruvnKk.tr.vtt`, the same `