v2: idle B-roll, no laptops, all lines clean, generated direct on Google
This commit is contained in:
parent
9feccc2093
commit
838f86f744
1 changed files with 24 additions and 23 deletions
47
index.html
47
index.html
|
|
@ -65,14 +65,14 @@
|
||||||
<div class="demo">
|
<div class="demo">
|
||||||
<div>
|
<div>
|
||||||
<video class="player" controls playsinline preload="metadata"
|
<video class="player" controls playsinline preload="metadata"
|
||||||
src="https://api.corben.world/files/a398fd75-a079-4379-a3ff-fa5ace3e2720/public">
|
src="https://api.corben.world/files/68fdcece-135d-416d-97df-a53da2a3c929/public">
|
||||||
Your browser cannot play this video.
|
Your browser cannot play this video.
|
||||||
</video>
|
</video>
|
||||||
<p class="cap">720×1280 · 40s · h264 + AAC · 7.2 MB</p>
|
<p class="cap">720×1280 · 32s · h264 + AAC · 13 MB</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3>Four dogs, one argument</h3>
|
<h3>Four dogs, one argument</h3>
|
||||||
<p style="color:var(--muted);margin:0 0 20px">Everyone stays on screen the whole time, like a real call. The audio runs in sequence so only one speaks at a time, and the live tile carries a lit border. Each dog was generated alone, then composited — asking one model for four characters in a single shot produced the same dog four times.</p>
|
<p style="color:var(--muted);margin:0 0 20px">Everyone stays on screen the whole time, like a real call. Each dog has two takes — a speaking one and an idle one — and only shows the speaking take during their own slot. The rest of the time they are listening, blinking, tilting their head, scratching an ear or yawning. The live tile carries a lit border.</p>
|
||||||
<ul class="cast">
|
<ul class="cast">
|
||||||
<li><b>Butcher</b><span>overclaims the market</span></li>
|
<li><b>Butcher</b><span>overclaims the market</span></li>
|
||||||
<li><b>The Golden</b><span>reframes it as displacement</span></li>
|
<li><b>The Golden</b><span>reframes it as displacement</span></li>
|
||||||
|
|
@ -84,27 +84,22 @@
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<h2>One character, on its own</h2>
|
<h2>The two takes behind one tile</h2>
|
||||||
<div class="demo">
|
<div class="demo">
|
||||||
<div>
|
<div>
|
||||||
<video class="player" controls playsinline preload="metadata"
|
<video class="player" controls playsinline preload="metadata"
|
||||||
src="https://api.corben.world/files/414f2b88-6a88-41bc-8a9e-f41ee528139a/public">
|
src="https://api.corben.world/files/be1d916a-9fbf-4460-abf9-5497b470d63e/public">
|
||||||
Your browser cannot play this video.
|
|
||||||
</video>
|
</video>
|
||||||
<p class="cap">720×1280 · 8s · 3.3 MB</p>
|
<p class="cap">speaking · 8s · $0.40</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3>Butcher, on humanoid robots</h3>
|
<video class="player" controls playsinline preload="metadata" style="max-width:330px"
|
||||||
<p style="color:var(--muted);margin:0 0 20px">The dog, the speech and the mouth movement all come out of a single text prompt — no reference photo and no separate lip-sync pass. This is the unit the grid is built from.</p>
|
src="https://api.corben.world/files/3f7a93c8-d20e-4aec-a8f9-a3b35b538bf9/public">
|
||||||
<table>
|
</video>
|
||||||
<tr><th>Model</th><td><span class="k">google/veo-3.1-lite</span></td></tr>
|
<p class="cap">idle B-roll · 8s · reusable forever</p>
|
||||||
<tr><th>Route</th><td>OpenRouter video API</td></tr>
|
|
||||||
<tr><th>Mode</th><td>Text-to-video, native audio</td></tr>
|
|
||||||
<tr><th>Generation time</th><td>62 seconds</td></tr>
|
|
||||||
<tr><th>List price</th><td>$0.05 / second at 720p</td></tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<p style="color:var(--muted);max-width:66ch;margin:26px 0 0">The idle take is seeded from the <em>last frame</em> of the speaking take, which locks the same dog, room, lighting and framing — not merely a similar-looking room. Idle clips are generated once per character and reused in every future episode, so they are capex rather than per-episode cost.</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
|
|
@ -113,7 +108,7 @@
|
||||||
<div class="card"><span class="n">01</span><h3>The photo</h3><p>Breed, coat colour and markings are described in words. Naming the breed explicitly carries the likeness further than image resolution does.</p></div>
|
<div class="card"><span class="n">01</span><h3>The photo</h3><p>Breed, coat colour and markings are described in words. Naming the breed explicitly carries the likeness further than image resolution does.</p></div>
|
||||||
<div class="card"><span class="n">02</span><h3>The topic</h3><p>A real discussion — a thread, a podcast clip, an argument. The claim being made is preserved; only the stakes change.</p></div>
|
<div class="card"><span class="n">02</span><h3>The topic</h3><p>A real discussion — a thread, a podcast clip, an argument. The claim being made is preserved; only the stakes change.</p></div>
|
||||||
<div class="card"><span class="n">03</span><h3>Director notes</h3><p>The owner supplies the attitude. Loud and self-important, or flat and unimpressed. This is what makes it sound like <em>their</em> pet.</p></div>
|
<div class="card"><span class="n">03</span><h3>Director notes</h3><p>The owner supplies the attitude. Loud and self-important, or flat and unimpressed. This is what makes it sound like <em>their</em> pet.</p></div>
|
||||||
<div class="card"><span class="n">04</span><h3>The render</h3><p>Each character is generated alone, then the four are composited into one grid with captions and branding.</p></div>
|
<div class="card"><span class="n">04</span><h3>The render</h3><p>Each character is generated alone, twice — speaking and idle — then the four are composited into one grid with captions and branding.</p></div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
@ -121,18 +116,24 @@
|
||||||
<h2>Notes from the build</h2>
|
<h2>Notes from the build</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li><b>Native generation beats lip-sync retrofitting.</b> Post-hoc lip-sync tools are trained on human faces and track landmarks a muzzle does not have. Generating the animal already talking sidesteps the problem — the single most important finding so far.</li>
|
<li><b>Native generation beats lip-sync retrofitting.</b> Post-hoc lip-sync tools are trained on human faces and track landmarks a muzzle does not have. Generating the animal already talking sidesteps the problem — the single most important finding so far.</li>
|
||||||
<li><b>Composite, do not ask for a crowd.</b> Prompting one model for four characters on a call rendered the same dog in every panel. Four separate generations tiled in post gives four genuinely distinct dogs and exact control.</li>
|
<li><b>Composite, do not ask for a crowd.</b> Prompting one model for four characters on a call rendered the same dog in every panel. Four separate generations tiled in post gives four genuinely distinct dogs and exact control over who speaks when.</li>
|
||||||
<li><b>Describing the breed matters more than image quality.</b> A full-resolution character plate was reconstructed faithfully from a 150×150 thumbnail once the coat and markings were named in words.</li>
|
<li><b>Seed continuity from the last frame.</b> Growing the idle take out of the speaking take’s final frame guarantees an exact match. A shared background reference cannot do that, because it does not lock the animal.</li>
|
||||||
<li><b>Every line is verified, not assumed.</b> Generated audio is transcribed back with Whisper and checked against the script before a clip is accepted.</li>
|
<li><b>Every line is verified, not assumed.</b> Generated audio is transcribed back with Whisper and checked against the script before a clip is accepted. This caught a take where one character had absorbed another’s line.</li>
|
||||||
<li><b>Each shot gets a clean context.</b> Generating several clips in one conversation caused dialogue to bleed between characters — one had another’s line appended to its own.</li>
|
<li><b>Each shot gets a clean context.</b> Generating several clips in one conversation caused dialogue to bleed between characters.</li>
|
||||||
<li><b>Video needs remuxing before it will play in a page.</b> Model output puts the <span class="k">moov</span> index at the end of the file, so a browser shows a blank player until the whole thing downloads. A lossless faststart pass moves it to the front.</li>
|
<li><b>Video needs remuxing before it will play in a page.</b> Model output puts the <span class="k">moov</span> index at the end of the file, so a browser shows a blank player until the whole thing downloads. A lossless faststart pass moves it to the front.</li>
|
||||||
<li><b>Captions are burned in afterwards, not generated.</b> Video models render text unreliably; an overlay pass gives identical typography across every clip and costs nothing to restyle.</li>
|
<li><b>Captions are burned in afterwards, not generated.</b> Video models render text unreliably; an overlay pass gives identical typography across every clip and costs nothing to restyle.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<h2>Known rough edges</h2>
|
<h2>What it costs</h2>
|
||||||
<p class="note">Honest first pass, not a finished result. Moose’s line picked up a fragment of Butcher’s and needs regenerating in a clean context. The laptops still visible in each room are leftovers from an earlier approach and come out of the prompt next. Butcher’s coat also drifted tan-heavy on the single-shot version where the character is meant to be predominantly white.</p>
|
<table style="max-width:520px">
|
||||||
|
<tr><th>Model</th><td><span class="k">veo-3.1-lite</span>, 720p, native audio</td></tr>
|
||||||
|
<tr><th>Speaking clip</th><td>$0.40 per 8s</td></tr>
|
||||||
|
<tr><th>Idle B-roll</th><td>$0.40 per 8s — once per character, then reused</td></tr>
|
||||||
|
<tr><th>A four-dog short</th><td>$1.60 recurring, after a one-off $1.60 idle library</td></tr>
|
||||||
|
<tr><th>Generation time</th><td>41–62 seconds per clip</td></tr>
|
||||||
|
</table>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue