<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Reading the Video]]></title><description><![CDATA[Reading the Video]]></description><link>https://jordtcatena.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6ac691d8ae487d86285a68bd/2499f07c-1ca3-47e5-9e6c-29b74567aaa2.png</url><title>Reading the Video</title><link>https://jordtcatena.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Fri, 16 Oct 2026 17:09:02 GMT</lastBuildDate><atom:link href="https://jordtcatena.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Check a video summary against the transcript before you quote it]]></title><description><![CDATA[A summary of a famous talk gets quoted as if it were the talk. It isn't: a summary sentence is a paraphrase, and the further it travels, the more it gets treated as the speaker's own words. This post ]]></description><link>https://jordtcatena.hashnode.dev/check-a-video-summary-against-the-transcript-before-you-quote-it</link><guid isPermaLink="true">https://jordtcatena.hashnode.dev/check-a-video-summary-against-the-transcript-before-you-quote-it</guid><category><![CDATA[youtube]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[learning]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Jordt Catena]]></dc:creator><pubDate>Wed, 07 Oct 2026 18:44:23 GMT</pubDate><content:encoded><![CDATA[<p>A summary of a famous talk gets quoted as if it were the talk. It isn't: a summary sentence is a paraphrase, and the further it travels, the more it gets treated as the speaker's own words. This post checks one summary against its transcript, using Steve Jobs' 2005 Stanford commencement address (15:04), and ends with a 30-line Python script that does the tedious part.</p>
<h2>Three depths of the same speech</h2>
<p>The summary I'm checking comes in three lengths. The shortest, the gist, is one paragraph:</p>
<blockquote>
<p>Steve Jobs delivers the 2005 Stanford Commencement address, reflecting on his life through three key lessons: trusting that unexpected experiences will eventually connect, using major setbacks to rediscover a passion for meaningful work, and using the inevitability of death as a guide to live authentically.</p>
</blockquote>
<img src="https://cdn.hashnode.com/uploads/covers/6ac691d8ae487d86285a68bd/93ef27a5-c78d-4169-b65d-b0c4d66b13ba.png" alt="The one-paragraph gist of Steve Jobs' Stanford speech next to the video and transcript" style="display:block;margin:0 auto" />

<p>That's enough to decide whether to watch the speech, and useless as a source: there's nothing in it you could check. The brief and the full notes add the part that matters, a timestamp on every point.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ac691d8ae487d86285a68bd/eda98bb7-14fa-4d78-98bd-2ec3f55d7eb8.png" alt="The brief summary, with a timestamp beside each point" style="display:block;margin:0 auto" />

<p>These are the five points I'll follow back to the transcript, copied as they appear:</p>
<table>
<thead>
<tr>
<th>Time</th>
<th>Summary point</th>
</tr>
</thead>
<tbody><tr>
<td>05:10</td>
<td>Dropping out of required classes to study calligraphy eventually shaped the typography of personal computing, illustrating that experiences can only be connected looking backward.</td>
</tr>
<tr>
<td>08:35</td>
<td>Getting fired from Apple reopened creative possibilities through NeXT and Pixar, demonstrating that the only way to do great work is to love what you do.</td>
</tr>
<tr>
<td>10:31</td>
<td>A life-threatening pancreatic cancer diagnosis initially carried a three- to six-month prognosis until a biopsy revealed a rare form treatable by surgery.</td>
</tr>
<tr>
<td>12:17</td>
<td>Death acts as life's change agent to clear away the old and make room for the new.</td>
</tr>
<tr>
<td>14:13</td>
<td>The Whole Earth Catalog's final issue concluded with the parting message 'Stay Hungry. Stay Foolish.', offered as a closing wish for the graduates.</td>
</tr>
</tbody></table>
<h2>Treat every timestamp as a citation, and follow it</h2>
<p>Following each one back gives three kinds of result.</p>
<p><strong>It matches.</strong> The 10:31 point says three to six months. At 10:30 the transcript reads: <em>"and that I should expect to live no longer than three to six months."</em> Same number, one second apart. The 08:35 point is even closer: at 08:35 Jobs says, word for word, <em>"And the only way to do great work is to love what you do."</em></p>
<p><strong>It matches, but only half of it is there.</strong> The same 10:31 point goes on: "until a biopsy revealed a rare form treatable by surgery." That's true, but it isn't at 10:31. The biopsy is at 11:04, and the result comes at 11:21 to 11:24: <em>"it turned out to be a very rare form of pancreatic cancer that is curable with surgery."</em> A point that merges two moments can only cite one of them. If you quote the second half, cite 11:24.</p>
<p><strong>It's a paraphrase, not a quote.</strong> The 12:17 point says "Death acts as life's change agent". What Jobs said, from 12:10 to 12:16, is: <em>"Death is very likely the single best invention of Life. It is Life's change agent. It clears out the old to make way for the new."</em> The summary is fair. But "Death is life's change agent" is not a sentence he said, and it's exactly the kind of line that ends up on a quote graphic.</p>
<p>And one that the summary gets right where a lot of the internet doesn't: "Stay Hungry. Stay Foolish." isn't Jobs' line. At 14:08 he's describing the back cover of the final issue of The Whole Earth Catalog: <em>"Beneath it were the words: 'Stay Hungry. Stay Foolish.'"</em> The 14:13 point credits the Catalog, which is correct.</p>
<h2>A 30-line quote checker</h2>
<p>Clicking timestamps is fine for five points. For a longer list, a script is quicker. Two things make this slightly harder than <code>grep</code>:</p>
<ol>
<li><p><strong>Captions split sentences across lines.</strong> At 14:13 the line ends with "Stay Hungry." and "Stay Foolish." starts the line at 14:18, so a line-by-line search misses that occurrence.</p>
</li>
<li><p><strong>Punctuation and case differ</strong> between a summary and captions: "Life's" and "life's", curly and straight quotes, full stops in the middle of a phrase.</p>
</li>
</ol>
<p>So the script lowercases everything, keeps only letters and digits, joins the whole transcript into one string while remembering where each line starts, and maps a match back to the line it starts in:</p>
<pre><code class="language-python">import bisect, re, sys

def load(path):
    """Read a transcript where every line starts with [mm:ss] or [h:mm:ss]."""
    cues = []
    for line in open(path, encoding="utf-8"):
        m = re.match(r"\[(\d{1,2}(?::\d{2}){1,2})\]\s+(.*)", line)
        if m:
            cues.append((m.group(1), m.group(2)))
    return cues

def norm(s):
    return re.sub(r"[^a-z0-9]+", " ", s.lower()).strip()

def find(cues, phrase):
    """Time of the cue where phrase first starts, even if captions split it across cues."""
    starts, text = [], ""
    for _, line in cues:
        starts.append(len(text))
        text += norm(line) + " "
    pos = text.find(norm(phrase))
    if pos &lt; 0:
        return None
    return cues[bisect.bisect_right(starts, pos) - 1][0]

if __name__ == "__main__":
    cues = load(sys.argv[1])
    for phrase in open(sys.argv[2], encoding="utf-8").read().splitlines():
        if phrase.strip():
            print(f"{find(cues, phrase) or 'NOT FOUND':&gt;9}  {phrase}")
</code></pre>
<p>It takes the transcript as plain text with a time on each line (<code>[10:30] and that I should expect to live...</code>) and a file with one phrase per line. On this speech:</p>
<pre><code class="language-text">$ python check_quotes.py jobs.txt quotes.txt
    10:30  three to six months
    11:24  curable with surgery
    08:35  the only way to do great work is to love what you do
    12:32  Your time is limited, so don't waste it living someone else's life
    14:08  Stay Hungry. Stay Foolish.
NOT FOUND  Death is life's change agent
NOT FOUND  Here's to the crazy ones
</code></pre>
<p>The two misses are the useful results. The first is the summary's paraphrase from above. The second is the copy from Apple's 1997 "Think Different" campaign, which is often credited to Jobs and isn't in this speech.</p>
<p>A miss isn't a verdict, though. The check is strict on purpose: "experiences can only be connected looking backward" from the 05:10 point is also NOT FOUND, because what he said at 05:07 is <em>"you can't connect the dots looking forward; you can only connect them looking backwards."</em> And these are auto-captions, so they have typos of their own ("Beleiveing" at 05:22). A NOT FOUND means "go and listen to this part", not "this is made up".</p>
<h2>Chapters get you to the passage, the checker gets you to the line</h2>
<p>The chapter list for the speech has five entries, roughly the three stories plus the opening and the close:</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ac691d8ae487d86285a68bd/c3f4f6c0-20d8-4c9b-b8c5-aec17f082e5c.png" alt="Five chapters for the speech: Intro, College, Love Loss, Death, The Whole Earth Catalog" style="display:block;margin:0 auto" />

<table>
<thead>
<tr>
<th>Start</th>
<th>Chapter</th>
</tr>
</thead>
<tbody><tr>
<td>00:00</td>
<td>Intro</td>
</tr>
<tr>
<td>01:50</td>
<td>College</td>
</tr>
<tr>
<td>05:38</td>
<td>Love Loss</td>
</tr>
<tr>
<td>09:04</td>
<td>Death</td>
</tr>
<tr>
<td>13:08</td>
<td>The Whole Earth Catalog</td>
</tr>
</tbody></table>
<p>That's how I'd navigate the video if I wanted to hear a passage in context. For a quote, I'd rather have the exact second, which is what the script gives you.</p>
<h2>Where the transcript and summaries came from</h2>
<p>Everything above is from <a href="https://summarizer.video/">summarizer.video</a>, which I work on: paste a YouTube link and you get the summary at three depths, chapters and the timestamped transcript side by side, and the transcript downloads as TXT, Markdown, SRT or VTT. The <code>jobs.txt</code> file is the plain-text export with timestamps. It also has a Chat tab that answers only from the transcript and cites timestamps, the same rule as this post, built in.</p>
<p>Whatever <a href="https://summarizer.video/">YouTube summarizer</a> or transcript tool you use, the check is the same. If a summary point has no time on it, you can't verify it. If it does, verifying it takes ten seconds.</p>
]]></content:encoded></item></channel></rss>