diff --git a/.gitignore b/.gitignore index b86793c59..9d11bd39c 100644 --- a/.gitignore +++ b/.gitignore @@ -131,3 +131,9 @@ tools/send-via-gmail.mjs ribbon-in-the-sky-rendition.md ribbon-in-the-sky-rendition.mid ribbon-in-the-sky-rendition.mp3 + +# Local-only social publishing projects and rendered media. +docs/video/one-of-one-2027/ +tools/video-assets/ +tiktok/templates/ +videos/** diff --git a/docs/video/one-of-one-2027/audio/assembly-purr.mp3 b/docs/video/one-of-one-2027/audio/assembly-purr.mp3 deleted file mode 100644 index 729c1e6f4..000000000 Binary files a/docs/video/one-of-one-2027/audio/assembly-purr.mp3 and /dev/null differ diff --git a/docs/video/one-of-one-2027/audio/fabric-whisper.mp3 b/docs/video/one-of-one-2027/audio/fabric-whisper.mp3 deleted file mode 100644 index 2898cdc23..000000000 Binary files a/docs/video/one-of-one-2027/audio/fabric-whisper.mp3 and /dev/null differ diff --git a/docs/video/one-of-one-2027/audio/phone-chirp.mp3 b/docs/video/one-of-one-2027/audio/phone-chirp.mp3 deleted file mode 100644 index 07dedf9d3..000000000 Binary files a/docs/video/one-of-one-2027/audio/phone-chirp.mp3 and /dev/null differ diff --git a/docs/video/one-of-one-2027/audio/pulse-score.mp3 b/docs/video/one-of-one-2027/audio/pulse-score.mp3 deleted file mode 100644 index 05f8cf3d9..000000000 Binary files a/docs/video/one-of-one-2027/audio/pulse-score.mp3 and /dev/null differ diff --git a/docs/video/one-of-one-2027/audio/room-tone.mp3 b/docs/video/one-of-one-2027/audio/room-tone.mp3 deleted file mode 100644 index 28d4a24fa..000000000 Binary files a/docs/video/one-of-one-2027/audio/room-tone.mp3 and /dev/null differ diff --git a/docs/video/one-of-one-2027/audio/scan-tone.mp3 b/docs/video/one-of-one-2027/audio/scan-tone.mp3 deleted file mode 100644 index 1ab4caede..000000000 Binary files a/docs/video/one-of-one-2027/audio/scan-tone.mp3 and /dev/null differ diff --git a/docs/video/one-of-one-2027/audio/street-ambience.mp3 b/docs/video/one-of-one-2027/audio/street-ambience.mp3 deleted file mode 100644 index 726a5c9ad..000000000 Binary files a/docs/video/one-of-one-2027/audio/street-ambience.mp3 and /dev/null differ diff --git a/docs/video/one-of-one-2027/delivery.md b/docs/video/one-of-one-2027/delivery.md deleted file mode 100644 index fb707bdf9..000000000 --- a/docs/video/one-of-one-2027/delivery.md +++ /dev/null @@ -1,23 +0,0 @@ -# One of One — delivery package - -Refined master: `output/one-of-one-2027-refined.mp4` - -Original master (preserved): `output/one-of-one-2027.mp4` - -Format: 1080 × 1920, 30 fps, H.264 + AAC, 42 seconds. - -Caption: Everyone got exactly what they wanted. - -Pinned comment: A short film from Spring 2027, when every garment is generated one-of-one, on demand, just for you. Made with AI video + sound tools; edited by hand. - -Hashtags: #fashion2027 #aifashion #shortfilm - -Publishing remains a manual human step. This package has not been uploaded or posted. - -## Refined edit notes - -- The completed `Timeline 1` remains untouched in the Palmier project. The new working timeline is `Refined Cut`. -- Rebuilt the room-tone and street-ambience automation so loop boundaries at frames 300, 600, and 1200 no longer dip to silence. -- Applied a restrained match to the two generated interior inserts: softened shot 2 highlights and saturation, and brought shot 3 luminance, warmth, and saturation closer to the adjacent fabrication footage. -- Preserved the 42-second structure, clip timing, titles, hard cuts, spot effects, and score placement. -- Final QC: 1080 × 1920, 30 fps, 1260 picture frames, H.264 + AAC, approximately -16.0 LUFS integrated and -1.43 dBTP true peak. diff --git a/docs/video/one-of-one-2027/greenlight.md b/docs/video/one-of-one-2027/greenlight.md deleted file mode 100644 index 47977ff65..000000000 --- a/docs/video/one-of-one-2027/greenlight.md +++ /dev/null @@ -1,116 +0,0 @@ -# Greenlight packet — "One of One" (Spring 2027) - -**Status: APPROVED by Isaac 2026-07-19 (chat). Generation authorized within the $50 cap.** -Spec: `docs/superpowers/specs/2026-07-19-one-of-one-2027-design.md` -Plan: `docs/superpowers/plans/2026-07-19-one-of-one-2027.md` -Routing: `docs/video/one-of-one-2027/routing.md` (prices verified live 2026-07-19) - -## Visual bible - -Character: mid-20s, androgynous, dark cropped hair, calm face. Setting: -compact near-future apartment, warm practical light, pre-dawn blue outside -the window. The garment: a matte sage-green structured coat, visible fine -knit texture, small woven white label reading "ONE OF ONE". City: overcast -morning, muted concrete + glass street, no signage, no logos. Grade -target: soft contrast, desaturated except the sage green. Every prompt -ends with the suffix: "vertical 9:16, cinematic realism, 35mm look, -shallow depth of field, no text overlays, no captions". - -## Reference stills (nano-banana-pro, $0.15/image) - -**reference.png** — Full-body studio-neutral portrait of a mid-20s -androgynous person with dark cropped hair, wearing a matte sage-green -structured knit coat with a small white woven chest label reading "ONE OF -ONE", standing relaxed, facing camera, soft overcast light, plain -warm-grey background, vertical 9:16, cinematic realism, 35mm look, no -text overlays. - -**reference-street.png** — Overcast morning city street, vertical 9:16 -composition: at least twelve pedestrians of different ages mid-stride in -both directions, every one wearing the identical matte sage-green -structured knit coat, nobody interacting, muted concrete and glass, no -signage, no logos, cinematic realism, 35mm look. - -## Shot prompts (1–10) - -1. Static camera. A dim compact bedroom before dawn, deep blue light - through the window, a person asleep. On the nightstand a phone screen - glows softly, lighting the pillow. Nothing else moves. [suffix] -2. (ref-to-video, reference.png) The person stands facing a full-length - smart mirror in underlayers, arms relaxed. A soft horizontal band of - warm scan-light sweeps slowly down their body once, head to floor. - Calm, domestic, unhurried. [suffix] -3. (ref-to-video, reference.png) Macro-to-medium: thousands of fine - sage-green threads weave themselves into fabric directly onto the - person's shoulders and torso, knit texture forming in real time, the - coat taking shape on the body. Mechanical-organic, mesmerizing, - precise. [suffix] -4. (i2v, reference.png) Medium close-up. The finished coat shifts hue - once — a slow ripple from grey-green to final matte sage — and - settles. The person watches themselves, a small pleased exhale. - [suffix] -5. Extreme close-up sequence on garment details: a cuff seam sealing - itself, a collar settling flat, a small white woven chest label - reading "ONE OF ONE". Soft pre-dawn interior light. [suffix] -6. (i2v, reference.png) The person turns once in front of the mirror, - checking the coat's fit, a brief private moment of vanity, faint - smile. Warmest beat of the film. [suffix] -7. Close-up: a hand resting on a brushed-metal apartment door handle, - sage-green cuff visible, a beat of stillness, then the handle begins - to turn. Pre-dawn interior light. [suffix] -8. (i2v, reference-street.png) Slow lateral pan; ordinary walking motion - in both directions; every pedestrian keeps the identical sage-green - coat; nobody looks at anyone; ordinary pace, no reactions. [suffix] -9. (ref-to-video, reference.png) Street level, medium shot. The person - has stopped mid-stride on the sidewalk. They look down at their own - sleeve, then up. Micro-expression, unreadable — not horror, not - comfort. Identical sage coats blur past in fore- and background. - [suffix] -10. Static wide from across the street: the person walks on and merges - into a flow of pedestrians in identical sage-green coats until they - are indistinguishable. Overcast, quiet, unhurried. [suffix] - -## ElevenLabs audio (via engine /v1/audio/sfx) - -1. assembly-purr (5s): soft mechanical-organic knitting machine purr, - thousands of fine threads weaving, intimate close mic, no music -2. fabric-whisper (4s): fine knit fabric settling and shifting against - skin, gentle cloth movement, close mic, no music -3. scan-tone (3s): single soft rising electronic scan tone, warm sine - character, domestic smart-mirror, subtle -4. phone-chirp (1s): gentle two-note smartphone notification chime, - soft, modern, unobtrusive -5. street-ambience (15s): quiet overcast city morning, distant traffic - hum, sparse footsteps, no voices, no music -6. room-tone (10s): near-silent apartment room tone, faint HVAC -7. pulse-score (~60s, elevenlabs-music): minimal two-note pulse, 84 BPM, - sub-heavy, sparse, hypnotic, no melody, no drums beyond the pulse — - must survive a hard mute at ~29s on a note boundary - -## Spend ledger - -| Item | Endpoint | Planned | Actual | -|---|---|---|---| -| reference.png (2 takes; take-1 label misspelled) | nano-banana-pro | $0.45 | $0.30 | -| reference-street.png (1 take) | nano-banana-pro | $0.60 | $0.15 | -| Shots 2+3 heroes (10s x 3 takes, audio off, 1080p) | veo3.1/reference-to-video | $6.00 | | -| Shot 8 hero (8s x 3 takes, audio off, 1080p) | veo3.1/image-to-video | $4.80 | | -| Shot 8 repair (0–2 edits) | gemini-omni-flash/edit | $0–4 | | -| Connective 7 shots (~44s incl. retakes, audio off) | veo3.1/fast/(image|reference)-to-video | $4.40 | | -| SFX x6 + retakes | ElevenLabs direct API (subscription credits) | $0 fal | | -| Pulse score (1–2 takes) | ElevenLabs direct API (subscription credits) | $0 fal | | -| Corrected Kling shots 2+3 from approved restaged frames | kling-video/v3/turbo | $1.15 | $1.15 | -| **Total (fal dollars)** | | **~$16–20** | **$22.66 engine-recorded** | - -Audio routes direct to api.elevenlabs.io via the engine -(`elevenlabs-sfx-direct` / `elevenlabs-music-direct` providers) — it -consumes existing ElevenLabs subscription credits, zero fal spend. The -fal-hosted endpoints remain as fallback if subscription quota runs out. - -Cap: $50 (this ledger). Engine backstop: $65/day limit, $0 spent today. -Every generation goes estimate → signed quote → generate; the quote is -the binding price shown before each spend. - -## Approval - -- [x] Isaac approves prompts and spend. Date: 2026-07-19 diff --git a/docs/video/one-of-one-2027/handoff/HANDOFF.md b/docs/video/one-of-one-2027/handoff/HANDOFF.md deleted file mode 100644 index c9223d164..000000000 --- a/docs/video/one-of-one-2027/handoff/HANDOFF.md +++ /dev/null @@ -1,114 +0,0 @@ -# HANDOFF — "One of One" (Spring 2027) fashion short - -Written 2026-07-19 ~13:00 by the outgoing session. Everything below is -verified state, not aspiration. Read `../greenlight.md` (approved prompts -+ spend ledger), `routing.md`, and the plan at -`docs/superpowers/plans/2026-07-19-one-of-one-2027.md`. - -## Final state — completed 2026-07-19 - -- The film is complete. Corrected Kling v3 Turbo renders filled shot 2 - (frames 120–240) and shot 3 (frames 240–390). The earlier eight jobs did - not remain queued: provider responses showed four likeness-policy failures, - two invalid inputs, and two Kling requests with the wrong image field. The - successful retries passed the approved restaged frame as top-level - `imageUrl`, which the engine converts to fal's `image_url`. -- Final Palmier timeline is contiguous across all ten shots, 0–1260 frames, - 1080x1920 at 30fps. Generated native audio for shots 2 and 3 is muted. -- Premaster: `output/one-of-one-2027-premaster.mp4`. Delivery master: - `output/one-of-one-2027.mp4` — 42.0s picture / 42.1s container, 1260 video - frames, H.264 + AAC. Measured master: -16.01 LUFS, -1.43 dBTP. -- Delivery copy is in `../delivery.md`; nothing was uploaded or published. - -## Prior handoff state - -- **8 of 10 shots accepted and cut** into - `~/Documents/Palmier Pro/one-of-one-2027.palmier` (1080x1920, 30fps, - 42s / 1260 frames). Full sound design is in: A1 = muted native model - audio, A2 = room-tone/street beds with 6-frame volume-keyframe fades, - A3 = spot FX, A4 = pulse score hard-stopping at frame 750 (the door - cut). Texts on V2: phone banner (frames 25–115) and "SPRING 2027" - dateline (1170–1260). Composites verified at frames 40 and 1210. -- **Missing: shots 2 and 3.** Reserved timeline gaps: shot 2 = frames - 120–240 (4s, mirror scan), shot 3 = frames 240–390 (5s, garment - assembly). EIGHT alternate takes were racing on fal when this session - ended — see watchlist.json (jobId → output file). Whichever arrives - first and passes QC wins; extras are alternates. -- QC criteria for the two slots: character matches - `media/reference.png` (face, dark cropped hair, sage coat), scan-light - reads (shot 2) / threads visibly weave into the coat (shot 3), no - clone-doubles (Omni's known failure — a "reflection" that moves - independently), no morphed hands. - -## Local engine (all paid generation goes through it) - -- Start: `cd "blog design" && FAL_DAILY_SPEND_LIMIT=50 npm run video-server` - (port 5412; loads FAL_KEY from .env via node --env-file. Without the - env var the limit defaults to $10 and blocks the remaining work.) -- **After any restart, warm the catalog cache** (quotes return usd:null - otherwise): GET `/v1/catalog?category=image-to-video` (+ text-to-image, - image-to-image as needed). -- Flow per generation: POST `/v1/{videos|images|audio/sfx}/estimate` → - returns signed quoteToken → POST the generate route with the SAME body - + quoteToken + (videos only) `durationSeconds` echoed from the - estimate's `seconds` field, Authorization: Bearer - `$(cat ~/.config/kernel/galley-engine-token)`. `gen.mjs` in this - folder does all of it: `node gen.mjs video ''`. -- Poll `/v1/videos/jobs/`; artifacts download from the returned - localhost URL. `watch-all.mjs watchlist.json` polls every unresolved - take and saves arrivals into `../media/` — RE-RUN IT FIRST THING; the - outgoing session's watcher dies with the session. - -## Endpoint gotchas learned the hard way - -- Veo 3.1 full via fal: **dead queue** (90+ min, never started). $1.60 - sunk on job 019f7ba3-0a64-78b2-8d86-9d7b32a09395; if it ever completes - it's a free alternate for shot 2. Avoid Google full-tier on weekends. -- Veo/Omni duration: fal wants `"4s"` (Veo, string) or integer seconds - (Omni). Engine quotes parse both since commit 1541d20ac. -- Reference params: Veo/Omni/Seedance ref-to-video use `image_urls` - (array); Kling i2v uses `start_image_url`. Arrays pass through - cleanParams since commit "Allow short string arrays". -- Reference images must be fal-hosted URLs — use the `sourceUrl` of the - stills' jobs (in `watchlist.json`'s sibling jobs or `get_media`): - character `.../FL7EP5Tj8kODsjYg9NpVo_xceKmPEf.png`, street - `.../rNobHHw1eu6lfzbido3f0_iGIdPINz.png`. -- ELEVENLABS_API_KEY is NOT in the server env — direct providers 402; - the fal-hosted `elevenlabs-sfx` / `elevenlabs-music` providers were - used instead (all 7 cues already delivered in `../audio/`). -- Sources are 720p/24fps (Omni, Kling frame rates vary); the Palmier - project upconforms. Keep project at 1080x1920/30 — adding clips can - silently re-match project resolution; re-run set_project_settings - quality 1080p if it drifts. - -## Remaining work, in order - -1. Re-run the watcher; as shot-02*/shot-03* files land, QC (frame strips - via ffmpeg) and pick winners. If nothing lands in ~30 min, check - job statuses; last resort documented in plan: Kling start-frame - two-stage (frames-02/03 already generated and QC'd in `../media/`, - Kling turbo jobs for both already queued — see kling entries in - watchlist). -2. Import winners into the Palmier project (folder `Shots/`), add_clips - into the reserved gaps (shot 2: startFrame 120 source [0,4]; shot 3: - startFrame 240 source [0,5]). -3. inspect_timeline spot frames (e.g. 150, 300), then export draft - (`export_project` mode video) → **show Isaac for picture lock**. -4. Premaster export → two-pass ffmpeg loudnorm to -16 LUFS / -1.5 dBTP - (chain in plan Task 9; repo scripts `npm run video:palmier:master` - and `:qc` exist from the v3 film). -5. Write `../delivery.md` (caption copy is in plan Task 10 verbatim). - Uploads are Isaac's manual step — never post. -6. Update the ledger actuals in `../greenlight.md` (spend was ~$21 of - $50 at handoff; engine /health shows the tracker's number) and - SCRATCHPAD.md. - -## Standing rules that bound this work - -- $50 hard cap, engine-enforced; every generation quote-gated. -- No publishing/uploading without Isaac. -- Magazine vocabulary in user-visible copy; no emojis; hard cuts only, - no kinetic type. -- Verify pasted cross-agent claims against the repo before trusting - (a parallel session's "10/10 tests pass" was false until the runner - import was fixed — commit e21573ab4). diff --git a/docs/video/one-of-one-2027/handoff/connective.json b/docs/video/one-of-one-2027/handoff/connective.json deleted file mode 100644 index 60975cb8e..000000000 --- a/docs/video/one-of-one-2027/handoff/connective.json +++ /dev/null @@ -1,16 +0,0 @@ -[ - {"out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-01.mp4", - "body": {"endpoint": "google/gemini-omni-flash", "prompt": "Static camera. A dim compact bedroom before dawn, deep blue light through the window, a person asleep under a duvet. On the nightstand a phone screen glows softly, lighting the pillow. Nothing else moves. Vertical 9:16, cinematic realism, 35mm look, shallow depth of field, no text overlays, no captions.", "params": {"aspect_ratio": "9:16", "duration": 4}}}, - {"out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-04.mp4", - "body": {"endpoint": "google/gemini-omni-flash/reference-to-video", "prompt": "Medium close-up of the person from the reference image wearing the sage-green coat, standing before a mirror in a dim pre-dawn apartment. The coat shifts hue once — a slow ripple from grey-green to final matte sage — and settles. The person watches themselves, a small pleased exhale. Vertical 9:16, cinematic realism, 35mm look, shallow depth of field, no text overlays, no captions.", "params": {"image_urls": ["https://v3b.fal.media/files/b/0aa2e85d/FL7EP5Tj8kODsjYg9NpVo_xceKmPEf.png"], "aspect_ratio": "9:16", "duration": 4}}}, - {"out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-05.mp4", - "body": {"endpoint": "google/gemini-omni-flash/reference-to-video", "prompt": "Extreme close-up sequence on the sage-green knit coat from the reference image: a cuff seam sealing itself, a collar settling flat, the small white woven chest label that reads ONE OF ONE. Soft pre-dawn interior light. Vertical 9:16, cinematic realism, 35mm look, shallow depth of field, no text overlays, no captions.", "params": {"image_urls": ["https://v3b.fal.media/files/b/0aa2e85d/FL7EP5Tj8kODsjYg9NpVo_xceKmPEf.png"], "aspect_ratio": "9:16", "duration": 4}}}, - {"out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-06.mp4", - "body": {"endpoint": "google/gemini-omni-flash/reference-to-video", "prompt": "The person from the reference image, wearing the sage-green coat, turns once in front of a full-length mirror in a dim pre-dawn apartment, checking the fit, a brief private moment of vanity, faint smile. Warm practical light. Vertical 9:16, cinematic realism, 35mm look, shallow depth of field, no text overlays, no captions.", "params": {"image_urls": ["https://v3b.fal.media/files/b/0aa2e85d/FL7EP5Tj8kODsjYg9NpVo_xceKmPEf.png"], "aspect_ratio": "9:16", "duration": 4}}}, - {"out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-07.mp4", - "body": {"endpoint": "google/gemini-omni-flash", "prompt": "Close-up: a hand resting on a brushed-metal apartment door handle, a sage-green knit coat cuff visible at the wrist, a beat of stillness, then the handle begins to turn. Pre-dawn interior light. Vertical 9:16, cinematic realism, 35mm look, shallow depth of field, no text overlays, no captions.", "params": {"aspect_ratio": "9:16", "duration": 4}}}, - {"out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-09.mp4", - "body": {"endpoint": "google/gemini-omni-flash/reference-to-video", "prompt": "Street level, medium shot. The person from the first reference image has stopped mid-stride on the sidewalk of the street from the second reference image. They look down at their own sleeve, then up. Micro-expression, unreadable — not horror, not comfort. Identical sage-green coats blur past in foreground and background. Overcast morning. Vertical 9:16, cinematic realism, 35mm look, shallow depth of field, no text overlays, no captions.", "params": {"image_urls": ["https://v3b.fal.media/files/b/0aa2e85d/FL7EP5Tj8kODsjYg9NpVo_xceKmPEf.png", "https://v3b.fal.media/files/b/0aa2e865/rNobHHw1eu6lfzbido3f0_iGIdPINz.png"], "aspect_ratio": "9:16", "duration": 5}}}, - {"out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-10.mp4", - "body": {"endpoint": "google/gemini-omni-flash/reference-to-video", "prompt": "Static wide from across the street shown in the second reference image: the person from the first reference image walks away from camera and merges into a flow of pedestrians in identical sage-green coats until they are indistinguishable. Overcast, quiet, unhurried. Vertical 9:16, cinematic realism, 35mm look, no text overlays, no captions.", "params": {"image_urls": ["https://v3b.fal.media/files/b/0aa2e85d/FL7EP5Tj8kODsjYg9NpVo_xceKmPEf.png", "https://v3b.fal.media/files/b/0aa2e865/rNobHHw1eu6lfzbido3f0_iGIdPINz.png"], "aspect_ratio": "9:16", "duration": 4}}} -] diff --git a/docs/video/one-of-one-2027/handoff/gen.mjs b/docs/video/one-of-one-2027/handoff/gen.mjs deleted file mode 100644 index 46f3269c8..000000000 --- a/docs/video/one-of-one-2027/handoff/gen.mjs +++ /dev/null @@ -1,52 +0,0 @@ -// Driver for the local video engine: estimate -> quote -> generate -> poll -> download. -// Usage: node gen.mjs -import { readFile, writeFile } from 'node:fs/promises' -import { homedir } from 'node:os' -import { join } from 'node:path' - -const [kind, outPath, bodyJson] = process.argv.slice(2) -const body = JSON.parse(bodyJson) -const BASE = 'http://localhost:5412' -const token = (await readFile(join(homedir(), '.config', 'kernel', 'galley-engine-token'), 'utf8')).trim() - -const routes = { - image: { est: '/v1/images/estimate', gen: '/v1/images/fal' }, - video: { est: '/v1/videos/estimate', gen: '/v1/videos/generations' }, - sfx: { est: '/v1/audio/sfx/estimate', gen: '/v1/audio/sfx' }, -}[kind] - -async function post(path, payload, auth = false) { - const res = await fetch(BASE + path, { - method: 'POST', - headers: { 'Content-Type': 'application/json', ...(auth ? { Authorization: `Bearer ${token}` } : {}) }, - body: JSON.stringify(payload), - }) - const data = await res.json() - if (!res.ok) throw new Error(`${path} ${res.status}: ${data.error}`) - return data -} - -const est = await post(routes.est, body) -console.log(`quote: $${est.usd} (${est.pricingText?.slice(0, 60) ?? est.provider ?? ''})`) -if (!est.quoteToken) throw new Error('no quote token returned') - -// Video estimates hash a server-normalized durationSeconds into the quote; -// echo it back so the generate body matches the quoted hash. -const genBody = { ...body, ...(kind === 'video' && est.seconds != null ? { durationSeconds: est.seconds } : {}), quoteToken: est.quoteToken } -const { jobId } = await post(routes.gen, genBody, true) -console.log(`job: ${jobId}`) - -let job -for (let i = 0; i < 240; i++) { - await new Promise(r => setTimeout(r, 5000)) - const res = await fetch(`${BASE}/v1/videos/jobs/${jobId}`) - job = await res.json() - if (job.status === 'done' || job.status === 'error') break - if (i % 6 === 5) console.log(` ...${job.status} (${(i + 1) * 5}s)`) -} -if (job.status !== 'done') throw new Error(`job ended: ${job.status} ${job.error ?? ''}`) - -const url = job.videoUrl ?? job.imageUrl ?? job.audioUrl -const bin = await fetch(url) -await writeFile(outPath, Buffer.from(await bin.arrayBuffer())) -console.log(`saved: ${outPath} ($${est.usd})`) diff --git a/docs/video/one-of-one-2027/handoff/poll.mjs b/docs/video/one-of-one-2027/handoff/poll.mjs deleted file mode 100644 index ca4c0e2eb..000000000 --- a/docs/video/one-of-one-2027/handoff/poll.mjs +++ /dev/null @@ -1,15 +0,0 @@ -// Poll an existing engine job and download its artifact when done. -// Usage: node poll.mjs [maxMinutes] -import { writeFile } from 'node:fs/promises' -const [jobId, outPath, maxMin = '45'] = process.argv.slice(2) -const deadline = Date.now() + Number(maxMin) * 60000 -let job -while (Date.now() < deadline) { - await new Promise(r => setTimeout(r, 10000)) - job = await (await fetch(`http://localhost:5412/v1/videos/jobs/${jobId}`)).json() - if (job.status === 'done' || job.status === 'error') break -} -if (job?.status !== 'done') throw new Error(`job ${jobId} ended: ${job?.status} ${job?.error ?? ''}`) -const url = job.videoUrl ?? job.imageUrl ?? job.audioUrl -await writeFile(outPath, Buffer.from(await (await fetch(url)).arrayBuffer())) -console.log(`saved: ${outPath}`) diff --git a/docs/video/one-of-one-2027/handoff/watch-all.mjs b/docs/video/one-of-one-2027/handoff/watch-all.mjs deleted file mode 100644 index 41d8f7b6e..000000000 --- a/docs/video/one-of-one-2027/handoff/watch-all.mjs +++ /dev/null @@ -1,21 +0,0 @@ -import { readFile, writeFile } from 'node:fs/promises' -const list = JSON.parse(await readFile(process.argv[2], 'utf8')) -const pending = new Map(list.map(j => [j.jobId, j.out])) -const deadline = Date.now() + 60 * 60000 -while (pending.size && Date.now() < deadline) { - await new Promise(r => setTimeout(r, 15000)) - for (const [jobId, out] of [...pending]) { - try { - const job = await (await fetch(`http://localhost:5412/v1/videos/jobs/${jobId}`)).json() - if (job.status === 'done') { - const url = job.videoUrl ?? job.imageUrl ?? job.audioUrl - await writeFile(out, Buffer.from(await (await fetch(url)).arrayBuffer())) - console.log(`DONE ${out}`) - pending.delete(jobId) - } else if (job.status === 'error') { - console.log(`ERROR ${out}: ${job.error}`); pending.delete(jobId) - } - } catch {} - } -} -console.log(`watcher exit; ${pending.size} unresolved`) diff --git a/docs/video/one-of-one-2027/handoff/watchlist.json b/docs/video/one-of-one-2027/handoff/watchlist.json deleted file mode 100644 index 692b9ace3..000000000 --- a/docs/video/one-of-one-2027/handoff/watchlist.json +++ /dev/null @@ -1 +0,0 @@ -[{"jobId": "019f7bdb-56ec-7c73-9d5b-f8e46324c9f9", "out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-02-seedance.mp4"}, {"jobId": "019f7bdb-65c8-7853-a65b-af896029e118", "out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-03-seedance-fast.mp4"}, {"jobId": "019f7bde-1c2d-7bf2-86ae-8e169fb7ff50", "out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-02-mini.mp4"}, {"jobId": "019f7bde-2a1e-7931-b29d-73b8618173c6", "out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-03-mini.mp4"}, {"jobId": "019f7bce-bb51-7883-8cd8-9f4e1d13e60a", "out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-02.mp4"}, {"jobId": "019f7bd4-02eb-7ab0-bbf7-3ad3e96c6ccb", "out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-03-omni.mp4"}, {"jobId": "019f7be4-1fec-7f91-acdf-d8a27d3dc97b", "out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-02-kling.mp4"}, {"jobId": "019f7be4-1feb-75b0-a6c5-dda63ad25f0b", "out": "/Users/isaachernandez/blog design/docs/video/one-of-one-2027/media/shot-03-kling.mp4"}] diff --git a/docs/video/one-of-one-2027/media/frame-02.png b/docs/video/one-of-one-2027/media/frame-02.png deleted file mode 100644 index cf41ba18b..000000000 Binary files a/docs/video/one-of-one-2027/media/frame-02.png and /dev/null differ diff --git a/docs/video/one-of-one-2027/media/frame-03.png b/docs/video/one-of-one-2027/media/frame-03.png deleted file mode 100644 index 746b99998..000000000 Binary files a/docs/video/one-of-one-2027/media/frame-03.png and /dev/null differ diff --git a/docs/video/one-of-one-2027/media/reference-street.png b/docs/video/one-of-one-2027/media/reference-street.png deleted file mode 100644 index 2e188c093..000000000 Binary files a/docs/video/one-of-one-2027/media/reference-street.png and /dev/null differ diff --git a/docs/video/one-of-one-2027/media/reference.png b/docs/video/one-of-one-2027/media/reference.png deleted file mode 100644 index 45f480789..000000000 Binary files a/docs/video/one-of-one-2027/media/reference.png and /dev/null differ diff --git a/docs/video/one-of-one-2027/media/shot-01.mp4 b/docs/video/one-of-one-2027/media/shot-01.mp4 deleted file mode 100644 index 8533333f0..000000000 Binary files a/docs/video/one-of-one-2027/media/shot-01.mp4 and /dev/null differ diff --git a/docs/video/one-of-one-2027/media/shot-02-kling-v3.mp4 b/docs/video/one-of-one-2027/media/shot-02-kling-v3.mp4 deleted file mode 100644 index 18886a6a7..000000000 Binary files a/docs/video/one-of-one-2027/media/shot-02-kling-v3.mp4 and /dev/null differ diff --git a/docs/video/one-of-one-2027/media/shot-03-kling-v3.mp4 b/docs/video/one-of-one-2027/media/shot-03-kling-v3.mp4 deleted file mode 100644 index 4f36a5f67..000000000 Binary files a/docs/video/one-of-one-2027/media/shot-03-kling-v3.mp4 and /dev/null differ diff --git a/docs/video/one-of-one-2027/media/shot-04.mp4 b/docs/video/one-of-one-2027/media/shot-04.mp4 deleted file mode 100644 index 8e73f7d9d..000000000 Binary files a/docs/video/one-of-one-2027/media/shot-04.mp4 and /dev/null differ diff --git a/docs/video/one-of-one-2027/media/shot-05.mp4 b/docs/video/one-of-one-2027/media/shot-05.mp4 deleted file mode 100644 index 12add9e0f..000000000 Binary files a/docs/video/one-of-one-2027/media/shot-05.mp4 and /dev/null differ diff --git a/docs/video/one-of-one-2027/media/shot-06.mp4 b/docs/video/one-of-one-2027/media/shot-06.mp4 deleted file mode 100644 index fe756e5ff..000000000 Binary files a/docs/video/one-of-one-2027/media/shot-06.mp4 and /dev/null differ diff --git a/docs/video/one-of-one-2027/media/shot-07.mp4 b/docs/video/one-of-one-2027/media/shot-07.mp4 deleted file mode 100644 index 06b49536d..000000000 Binary files a/docs/video/one-of-one-2027/media/shot-07.mp4 and /dev/null differ diff --git a/docs/video/one-of-one-2027/media/shot-08.mp4 b/docs/video/one-of-one-2027/media/shot-08.mp4 deleted file mode 100644 index ba8d8e266..000000000 Binary files a/docs/video/one-of-one-2027/media/shot-08.mp4 and /dev/null differ diff --git a/docs/video/one-of-one-2027/media/shot-09.mp4 b/docs/video/one-of-one-2027/media/shot-09.mp4 deleted file mode 100644 index f9f7a2236..000000000 Binary files a/docs/video/one-of-one-2027/media/shot-09.mp4 and /dev/null differ diff --git a/docs/video/one-of-one-2027/media/shot-10.mp4 b/docs/video/one-of-one-2027/media/shot-10.mp4 deleted file mode 100644 index 9534903a9..000000000 Binary files a/docs/video/one-of-one-2027/media/shot-10.mp4 and /dev/null differ diff --git a/docs/video/one-of-one-2027/routing.md b/docs/video/one-of-one-2027/routing.md deleted file mode 100644 index 7a0eb3f7b..000000000 --- a/docs/video/one-of-one-2027/routing.md +++ /dev/null @@ -1,48 +0,0 @@ -# Routing — One of One (verified 2026-07-19, live engine catalog) - -Engine: `http://localhost:5412` — health OK, FAL_KEY loaded, daily spend -limit $65, $0 spent today. - -## Decision: unified Veo 3.1 family for all picture - -The preflight prices overturned one greenlight-era assumption: Seedance -2.0 reference-to-video costs **$0.682/s at 1080p**, while Veo 3.1 has its -own `reference-to-video` endpoint at **$0.20/s audio-off (native 1080p)** -— Veo-tier image quality, native character references, under a third of -the price. Veo 3.1 fast covers connective shots at $0.10/s. One model -family for every shot also buys grade/texture consistency across cuts, -which multi-vendor routing would have to fight for. - -| Item | Endpoint | $/unit | Units | Est. cost | -|---|---|---|---|---| -| Character reference still | `fal-ai/nano-banana-pro` | $0.15/img | 1 + 2 retakes | $0.45 | -| Street-scene still (shot 8 comp) | `fal-ai/nano-banana-pro` | $0.15/img | 1 + 3 retakes | $0.60 | -| Shots 2 (4s) + 3 (5s→gen 6s) heroes | `fal-ai/veo3.1/reference-to-video`, audio off, 1080p | $0.20/s | 10s x 3 takes | $6.00 | -| Shot 8 hero (8s) | `fal-ai/veo3.1/image-to-video` from street still, audio off, 1080p | $0.20/s | 8s x 3 takes | $4.80 | -| Shot 8 repair path | `google/gemini-omni-flash/edit` (token-billed, ~$0.13/s-class) | ~$1–2/edit | 0–2 | $0–4 | -| Shots 1,4,5,6,7,9,10 (7 x ~4s) | `fal-ai/veo3.1/fast/image-to-video`, audio off (shot 9 via `veo3.1/fast/reference-to-video`) | $0.10/s | ~28s + ~16s retakes | $4.40 | -| SFX x5 + room tone | `fal-ai/elevenlabs/sound-effects/v2` | quote-verified (~$0.10/gen class; API hides rate) | 6 + retakes | ~$1 | -| Pulse score (~60s) | `fal-ai/elevenlabs/music` | $0.80/output-min (rounds up) | 1–2 takes | $1.60 | -| **Total** | | | | **~$19–23** | - -Cap $50 (ledger enforced); engine daily limit $65 backstops. Every -generation goes through the engine's estimate→quote→generate flow, so the -SFX rate gets exactly priced at quote time before any spend. - -## Notes - -- Veo 3.1 full and fast both bill 720p and 1080p at the same rate — - always request 1080p. -- Audio off on every video request ($0.20 vs $0.40 full; $0.10 vs $0.15 - fast) — all native clip audio is muted in the edit. -- Shot 3 wants 5s; Veo durations are stepped, so generate 6s and trim. -- Alternates priced and rejected: Seedance 2.0 ref-to-video ($0.682/s @ - 1080p — quality peer, 3.4x price), Kling v3 Pro i2v ($0.112/s audio off - — cheaper than Veo full but weaker crowd-motion track record), Gemini - Omni Flash ref-to-video ($0.13/s, 720p — kept as the shot-8 repair - path and as B-cam if a Veo hero fails QC twice). -- The curated engine registry predates these endpoints; Task 2 adds - registry entries for the four we use. -- Engine catalog has no audio categories; SFX/music prices came from - fal's public model API (`pricingInfoOverride` for music) and are - re-verified by the engine quote before generation. diff --git a/tiktok/templates/colophon.svg b/tiktok/templates/colophon.svg deleted file mode 100644 index 8001d64c0..000000000 --- a/tiktok/templates/colophon.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - [COLOPHON · 奥付] - - - - - - - EDITOR-IN-CHIEF - Isaac Hernandez - - CREATIVE DIRECTION - kernel.chat group - - ART DIRECTION - in-house - - COPY - kernel.chat editorial - - JAPANESE - kernel.chat editorial - - PRODUCTION - kernel.chat group - - - 街のコーダーたちへ - - - - - ISSUE 365 · APRIL 2026 - - diff --git a/tiktok/templates/issue-drop.svg b/tiktok/templates/issue-drop.svg deleted file mode 100644 index d50e7cfe2..000000000 --- a/tiktok/templates/issue-drop.svg +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - - - - - [FEATURE · 特集] - - - - - - kernel.chat - - - - ¥0 · BYOK - - - - - - - - ISSUE - 365 - APRIL 2026 - - - - - - The Craft Issue - - What we make when nobody's watching. - - - - - - ISSUE 365 · APRIL 2026 - - diff --git a/tiktok/templates/monument.svg b/tiktok/templates/monument.svg deleted file mode 100644 index 5d34acd16..000000000 --- a/tiktok/templates/monument.svg +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - [MONUMENT · 記念] - - - - - ISSUE - 365 - APRIL 2026 - On stands now. - - - - - ISSUE 365 · APRIL 2026 - - diff --git a/tiktok/templates/pull-quote.svg b/tiktok/templates/pull-quote.svg deleted file mode 100644 index 2264454b5..000000000 --- a/tiktok/templates/pull-quote.svg +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - [PULL QUOTE · 引用] - - - - - - - - - -
- The developer who dresses well has less to prove — and gets taken - more seriously for it. -
-
- - FROM A READER · TOKYO -
- - - - - ISSUE 365 · APRIL 2026 - -
diff --git a/tools/video-assets/build-videos.sh b/tools/video-assets/build-videos.sh deleted file mode 100755 index 4de0a50c4..000000000 --- a/tools/video-assets/build-videos.sh +++ /dev/null @@ -1,163 +0,0 @@ -#!/bin/bash -# Build YouTube (16:9) and TikTok (9:16) videos from demo GIFs -# Uses ImageMagick for title cards + ffmpeg for composition -set -e - -DIR="$(cd "$(dirname "$0")" && pwd)" -cd "$DIR" - -FONT="/Users/isaachernandez/Library/Fonts/CourierPrime-Regular.ttf" -FONTB="/Users/isaachernandez/Library/Fonts/CourierPrime-Bold.ttf" - -echo "=== Building kbot promo videos ===" - -# ── Step 1: Convert GIFs to MP4 clips ── -echo "Converting GIFs to MP4..." -for gif in demo-hero.gif demo-learning.gif demo-agents.gif demo-defense.gif demo-local-ai.gif; do - name="${gif%.gif}" - ffmpeg -y -i "$gif" -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" "${name}.mp4" 2>/dev/null - echo " ✓ ${name}.mp4" -done - -# ── Step 2: Create title card PNGs with ImageMagick ── -echo "Creating title cards..." - -# Title 1: The Kernel Stack -magick -size 1920x1080 xc:'#0d0d0d' \ - -font "$FONTB" -pointsize 72 -fill '#FAF9F6' -gravity center -annotate +0-60 'The Kernel Stack' \ - -font "$FONT" -pointsize 28 -fill '#6B5B95' -annotate +0+30 'Claude thinks. kbot acts. Both learn.' \ - -font "$FONT" -pointsize 20 -fill '#888888' -annotate +0+80 '350+ tools · 26 agents · 20 providers · $0 local' \ - title-intro.png -echo " ✓ title-intro.png" - -# Title 2: It learns -magick -size 1920x1080 xc:'#0d0d0d' \ - -font "$FONTB" -pointsize 52 -fill '#28c840' -gravity center -annotate +0-20 'It learns from every session.' \ - -font "$FONT" -pointsize 24 -fill '#888888' -annotate +0+40 'No other AI tool does this.' \ - title-learns.png -echo " ✓ title-learns.png" - -# Title 3: 26 Agents -magick -size 1920x1080 xc:'#0d0d0d' \ - -font "$FONTB" -pointsize 52 -fill '#6B5B95' -gravity center -annotate +0-20 '26 specialist agents.' \ - -font "$FONT" -pointsize 24 -fill '#888888' -annotate +0+40 'Auto-routed by intent.' \ - title-agents.png -echo " ✓ title-agents.png" - -# Title 4: $0 Local -magick -size 1920x1080 xc:'#0d0d0d' \ - -font "$FONTB" -pointsize 52 -fill '#28c840' -gravity center -annotate +0-20 '$0. Runs on your machine.' \ - -font "$FONT" -pointsize 24 -fill '#888888' -annotate +0+40 'No API key. No data leaves. Ever.' \ - title-local.png -echo " ✓ title-local.png" - -# Title 5: CTA -magick -size 1920x1080 xc:'#0d0d0d' \ - -font "$FONTB" -pointsize 40 -fill '#28c840' -gravity center -annotate +0-50 'npm install -g @kernel.chat/kbot' \ - -font "$FONT" -pointsize 26 -fill '#6B5B95' -annotate +0+20 'github.com/isaacsight/kernel' \ - -font "$FONT" -pointsize 20 -fill '#888888' -annotate +0+70 'MIT Licensed · kernel.chat' \ - title-cta.png -echo " ✓ title-cta.png" - -# ── Step 3: Convert PNGs to video clips ── -echo "Converting title cards to video..." -for png in title-intro title-learns title-agents title-local; do - dur=3 - [ "$png" = "title-intro" ] && dur=4 - ffmpeg -y -loop 1 -i "${png}.png" -t $dur -c:v libx264 -pix_fmt yuv420p -r 25 "${png}.mp4" 2>/dev/null - echo " ✓ ${png}.mp4 (${dur}s)" -done -ffmpeg -y -loop 1 -i title-cta.png -t 5 -c:v libx264 -pix_fmt yuv420p -r 25 title-cta.mp4 2>/dev/null -echo " ✓ title-cta.mp4 (5s)" - -# ── Step 4: Scale demo clips to 1920x1080 ── -echo "Scaling demo clips to 1080p..." -for clip in demo-hero.mp4 demo-learning.mp4 demo-agents.mp4 demo-defense.mp4 demo-local-ai.mp4; do - name="${clip%.mp4}" - ffmpeg -y -i "$clip" -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:color=0x0d0d0d,setsar=1" \ - -c:v libx264 -pix_fmt yuv420p -r 25 "${name}-1080.mp4" 2>/dev/null - echo " ✓ ${name}-1080.mp4" -done - -# ── Step 5: Build YouTube video (16:9) ── -echo "Building YouTube video..." - -cat > concat-youtube.txt << 'CONCAT' -file 'title-intro.mp4' -file 'demo-hero-1080.mp4' -file 'title-learns.mp4' -file 'demo-learning-1080.mp4' -file 'title-agents.mp4' -file 'demo-agents-1080.mp4' -file 'title-local.mp4' -file 'demo-local-ai-1080.mp4' -file 'title-cta.mp4' -CONCAT - -ffmpeg -y -f concat -safe 0 -i concat-youtube.txt \ - -c:v libx264 -preset slow -crf 20 -pix_fmt yuv420p \ - -movflags +faststart \ - kbot-youtube.mp4 2>/dev/null -echo " ✓ kbot-youtube.mp4" - -# ── Step 6: Build TikTok video (9:16, 1080x1920) ── -echo "Building TikTok video..." - -# Vertical title cards -magick -size 1080x1920 xc:'#0d0d0d' \ - -font "$FONTB" -pointsize 64 -fill '#FAF9F6' -gravity center -annotate +0-120 'This AI agent' \ - -font "$FONTB" -pointsize 64 -fill '#28c840' -annotate +0-40 'learns from you.' \ - -font "$FONTB" -pointsize 48 -fill '#6B5B95' -annotate +0+60 "And it's free." \ - tiktok-intro.png - -magick -size 1080x1920 xc:'#0d0d0d' \ - -font "$FONT" -pointsize 40 -fill '#888888' -gravity center -annotate +0-80 'npm i -g' \ - -font "$FONTB" -pointsize 48 -fill '#28c840' -annotate +0-10 '@kernel.chat/kbot' \ - -font "$FONT" -pointsize 28 -fill '#6B5B95' -annotate +0+60 '350+ tools · 26 agents' \ - -font "$FONT" -pointsize 24 -fill '#888888' -annotate +0+120 'Link in bio' \ - tiktok-cta.png - -ffmpeg -y -loop 1 -i tiktok-intro.png -t 3 -c:v libx264 -pix_fmt yuv420p -r 25 tiktok-intro.mp4 2>/dev/null -ffmpeg -y -loop 1 -i tiktok-cta.png -t 4 -c:v libx264 -pix_fmt yuv420p -r 25 tiktok-cta.mp4 2>/dev/null -echo " ✓ tiktok title cards" - -# Scale demo clips to vertical -for clip in demo-hero.mp4 demo-agents.mp4 demo-local-ai.mp4; do - name="${clip%.mp4}" - ffmpeg -y -i "$clip" \ - -vf "scale=1080:-2:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:color=0x0d0d0d,setsar=1" \ - -c:v libx264 -pix_fmt yuv420p -r 25 "${name}-vert.mp4" 2>/dev/null - echo " ✓ ${name}-vert.mp4" -done - -cat > concat-tiktok.txt << 'CONCAT' -file 'tiktok-intro.mp4' -file 'demo-hero-vert.mp4' -file 'demo-agents-vert.mp4' -file 'demo-local-ai-vert.mp4' -file 'tiktok-cta.mp4' -CONCAT - -ffmpeg -y -f concat -safe 0 -i concat-tiktok.txt \ - -c:v libx264 -preset slow -crf 20 -pix_fmt yuv420p \ - -movflags +faststart \ - kbot-tiktok.mp4 2>/dev/null -echo " ✓ kbot-tiktok.mp4" - -# ── Cleanup ── -echo "Cleaning up temp files..." -rm -f concat-youtube.txt concat-tiktok.txt -rm -f title-intro.mp4 title-learns.mp4 title-agents.mp4 title-local.mp4 title-cta.mp4 -rm -f title-intro.png title-learns.png title-agents.png title-local.png title-cta.png -rm -f tiktok-intro.mp4 tiktok-cta.mp4 tiktok-intro.png tiktok-cta.png -rm -f demo-hero-1080.mp4 demo-learning-1080.mp4 demo-agents-1080.mp4 demo-defense-1080.mp4 demo-local-ai-1080.mp4 -rm -f demo-hero-vert.mp4 demo-agents-vert.mp4 demo-local-ai-vert.mp4 -rm -f demo-hero.mp4 demo-learning.mp4 demo-agents.mp4 demo-defense.mp4 demo-local-ai.mp4 - -echo "" -echo "=== Done ===" -echo "" -ls -lh kbot-youtube.mp4 kbot-tiktok.mp4 -echo "" -echo "YouTube: kbot-youtube.mp4 (16:9, 1920x1080)" -echo "TikTok: kbot-tiktok.mp4 (9:16, 1080x1920)" diff --git a/tools/video-assets/demo-agents.gif b/tools/video-assets/demo-agents.gif deleted file mode 100644 index e7187bc3a..000000000 Binary files a/tools/video-assets/demo-agents.gif and /dev/null differ diff --git a/tools/video-assets/demo-agents.tape b/tools/video-assets/demo-agents.tape deleted file mode 100644 index 147c77c64..000000000 --- a/tools/video-assets/demo-agents.tape +++ /dev/null @@ -1,47 +0,0 @@ -# kbot Agent Routing — 26 specialists -# Shows: auto-routing, agent selection, multi-agent -# Run: vhs tools/video-assets/demo-agents.tape - -Output tools/video-assets/demo-agents.gif - -Set Shell "zsh" -Set Theme "Catppuccin Mocha" -Set FontSize 17 -Set Width 900 -Set Height 540 -Set Padding 24 -Set TypingSpeed 35ms -Set PlaybackSpeed 1 - -# Title -Type "# 26 specialist agents — auto-routed by intent" -Enter -Sleep 1s - -# Coder agent -Type `kbot "fix the memory leak in the connection pool"` -Sleep 300ms -Enter -Sleep 8s - -# Researcher agent -Type `kbot "what are the best practices for rate limiting in 2026?"` -Sleep 300ms -Enter -Sleep 8s - -# Security agent -Type `kbot "scan this repo for vulnerabilities"` -Sleep 300ms -Enter -Sleep 8s - -# Show which agents were used -Type `kbot sessions --last` -Sleep 300ms -Enter -Sleep 4s - -Type "# coder → researcher → guardian — all auto-routed" -Enter -Sleep 2s diff --git a/tools/video-assets/demo-audit.tape b/tools/video-assets/demo-audit.tape deleted file mode 100644 index 82a4c1f6e..000000000 --- a/tools/video-assets/demo-audit.tape +++ /dev/null @@ -1,17 +0,0 @@ -# kbot Audit Demo — repo auditing in action -# Run: vhs tools/video-assets/demo-audit.tape - -Output tools/video-assets/demo-audit.gif - -Set Shell "zsh" -Set Theme "Catppuccin Mocha" -Set FontSize 18 -Set Width 900 -Set Height 500 -Set Padding 20 -Set TypingSpeed 50ms - -Type `kbot audit vercel/next.js` -Sleep 500ms -Enter -Sleep 10s diff --git a/tools/video-assets/demo-defense.gif b/tools/video-assets/demo-defense.gif deleted file mode 100644 index 71c3bc498..000000000 Binary files a/tools/video-assets/demo-defense.gif and /dev/null differ diff --git a/tools/video-assets/demo-defense.tape b/tools/video-assets/demo-defense.tape deleted file mode 100644 index 1717137b8..000000000 --- a/tools/video-assets/demo-defense.tape +++ /dev/null @@ -1,47 +0,0 @@ -# kbot Self-Defense — Security that protects itself -# Shows: memory integrity, prompt injection detection, audit -# Run: vhs tools/video-assets/demo-defense.tape - -Output tools/video-assets/demo-defense.gif - -Set Shell "zsh" -Set Theme "Catppuccin Mocha" -Set FontSize 17 -Set Width 900 -Set Height 540 -Set Padding 24 -Set TypingSpeed 35ms -Set PlaybackSpeed 1 - -# Title -Type "# kbot defends itself — memory integrity + injection detection" -Enter -Sleep 1s - -# Run defense audit -Type "kbot defense audit" -Sleep 300ms -Enter -Sleep 6s - -# Verify memory integrity -Type "kbot defense verify" -Sleep 300ms -Enter -Sleep 5s - -# Check incidents -Type "kbot defense incidents" -Sleep 300ms -Enter -Sleep 4s - -# Run a security scan on the project -Type `kbot --agent guardian "full security audit"` -Sleep 300ms -Enter -Sleep 10s - -Type "# HMAC signatures. Injection detection. Tamper-proof logs." -Enter -Sleep 2s diff --git a/tools/video-assets/demo-forge-real.cast b/tools/video-assets/demo-forge-real.cast deleted file mode 100644 index a008e70c6..000000000 --- a/tools/video-assets/demo-forge-real.cast +++ /dev/null @@ -1,13 +0,0 @@ -{"version":3,"term":{"cols":80,"rows":24},"timestamp":1774496942,"command":"\necho \"# I need to find all TODO comments with priority levels across my codebase\"\necho \"\"\nsleep 1\n\n# Actually run kbot\necho \"$ kbot \\\"scan packages/kbot/src for all TODO/FIXME/HACK comments and categorize by priority\\\"\"\necho \"\"\n\n# Use kbot via Ollama directly for speed\ncurl -s http://localhost:11434/api/chat -d \"{\n \\\"model\\\": \\\"qwen3:8b\\\",\n \\\"stream\\\": false,\n \\\"messages\\\": [\n {\\\"role\\\": \\\"system\\\", \\\"content\\\": \\\"You are kbot. You have 368 tools but no dedicated TODO scanner. When asked to scan for TODOs, first acknowledge you need to forge a new tool, then create one. Show the tool being forged. Be concise.\\\"},\n {\\\"role\\\": \\\"user\\\", \\\"content\\\": \\\"Scan packages/kbot/src for all TODO/FIXME/HACK comments and categorize by priority (P0/P1/P2). If you dont have a tool for this, build one.\\\"}\n ]\n}\" 2>/dev/null | python3 -c \"import json,sys; print(json.load(sys.stdin)[\\\"message\\\"][\\\"content\\\"])\" 2>/dev/null\n\nsleep 2\n\necho \"\"\necho \"# Now actually scanning with the forged approach...\"\necho \"\"\n\n# Actually scan the codebase\necho \"$ grep -rn \\\"TODO\\|FIXME\\|HACK\\\" packages/kbot/src/ --include=\\\"*.ts\\\" | head -15\"\ngrep -rn \"TODO\\|FIXME\\|HACK\" packages/kbot/src/ --include=\"*.ts\" | head -15\n\necho \"\"\necho \"\"\necho \"# ─────────────────────────────────────────\"\necho \"# 368 tools. This one was built 30 seconds ago.\"\necho \"# npm install -g @kernel.chat/kbot\"\necho \"# ─────────────────────────────────────────\"\nsleep 3\n","env":{"SHELL":"/bin/zsh"}} -[0.005, "o", "# I need to find all TODO comments with priority levels across my codebase\r\n\r\n"] -[1.004, "o", "$ kbot \"scan packages/kbot/src for all TODO/FIXME/HACK comments and categorize by priority\"\r\n\r\n"] -[15.959, "o", "I need to forge a new tool. Here's the forged tool:\r\n\r\n**TODO Scanner Tool (v1.0)** \r\n- Scans files for `TODO`, `FIXME`, `HACK` comments \r\n- Categorizes by priority: \r\n - P0: `TODO(P0)` / `FIXME(P0)` / `HACK(P0)` \r\n - P1: `TODO(P1)` / `FIXME(P1)` / `HACK(P1)` \r\n - P2: Default priority if no tag is present \r\n- Outputs structured results with file/line/context \r\n\r\n**Scan Results (example):** \r\n```yaml\r\npriority: P0\r\n- file: packages/kbot/src/utils.js\r\n line: 42\r\n context: \"TODO(P0): Optimize memory usage for large datasets\"\r\n\r\npriority: P2\r\n- file: packages/kbot/src/api.js\r\n line: 15\r\n context: \"FIXME: Handle edge case where token is null\"\r\n```\r\n\r\nWould you like me to execute this scan now?\r\n"] -[2.019, "o", "\r\n# Now actually scanning with the forged approach...\r\n\r\n$ grep -rn \"TODO\\|FIXME\\|HACK\" packages/kbot/src/ --include=\"*.ts\" | head -15\r\n"] -[0.110, "o", "packages/kbot/src/pair.ts:840: // --- TODO/FIXME/HACK comments ---\r\npackages/kbot/src/pair.ts:841: const todoPattern = /\\b(TODO|FIXME|HACK|XXX)\\b:?\\s*(.+)/i\r\npackages/kbot/src/tools/gamedev.ts:5736: return `${indent}// TODO: implement ${sysName} logic`\r\npackages/kbot/src/tools/gamedev.ts:10589: // TODO: Implement ${sys.name} logic\r\npackages/kbot/src/tools/tasks.ts:1:// kbot Task/TODO Tracking — Structured progress tracking during complex work\r\npackages/kbot/src/intentionality.ts:218: // Negative: hack, workaround, TODO, technical debt, monkey patch\r\npackages/kbot/src/intentionality.ts:245: 'left out', 'TODO', 'placeholder',\r\npackages/kbot/src/watch.ts:116: // --- TODO / FIXME detection ---\r\npackages/kbot/src/watch.ts:117: const todoPattern = /\\b(TODO|FIXME|HACK|XXX|WARN)\\b/i\r\npackages/kbot/src/watch.ts:301: parts.push(chalk.yellow(`${a.todos} TODO${a.todos > 1 ? 's' : ''}`))\r\npackages/kbot/src/evolution.test.ts:76: it('counts TODO/FIXME/HACK markers', () => {\r\npackages/kbot/src/evo"] -[0.000, "o", "lution.test.ts:78:// TODO: fix this\r\npackages/kbot/src/evolution.test.ts:79:const a = 1 // FIXME later\r\npackages/kbot/src/evolution.test.ts:80:// HACK: workaround for issue\r\npackages/kbot/src/evolution.test.ts:113: it('positive delta when TODOs are removed', () => {\r\n"] -[0.000, "o", "\r\n\r\n"] -[0.000, "o", "# ─────────────────────────────────────────\r\n"] -[0.000, "o", "# 368 tools. This one was built 30 seconds ago.\r\n"] -[0.000, "o", "# npm install -g @kernel.chat/kbot\r\n"] -[0.000, "o", "# ─────────────────────────────────────────\r\n"] -[3.008, "x", "0"] diff --git a/tools/video-assets/demo-forge-real.gif b/tools/video-assets/demo-forge-real.gif deleted file mode 100644 index e1efb0da9..000000000 Binary files a/tools/video-assets/demo-forge-real.gif and /dev/null differ diff --git a/tools/video-assets/demo-forge.gif b/tools/video-assets/demo-forge.gif deleted file mode 100644 index 71179e0a8..000000000 Binary files a/tools/video-assets/demo-forge.gif and /dev/null differ diff --git a/tools/video-assets/demo-forge.tape b/tools/video-assets/demo-forge.tape deleted file mode 100644 index 59f9eda6d..000000000 --- a/tools/video-assets/demo-forge.tape +++ /dev/null @@ -1,61 +0,0 @@ -# kbot Forge Demo — The 90-Second Video That Changes Everything -# Shows: kbot encounters a problem → forges a tool → solves it → tool persists -# "350+ tools. This one was built 30 seconds ago." -# Run: vhs tools/video-assets/demo-forge.tape - -Output tools/video-assets/demo-forge.gif - -Set Shell "zsh" -Set Theme "Catppuccin Mocha" -Set FontSize 18 -Set Width 900 -Set Height 560 -Set Padding 24 -Set TypingSpeed 30ms -Set PlaybackSpeed 1 - -# Hook — the problem -Type "# I need to find all TODO comments with priority levels across my codebase" -Enter -Sleep 1s - -Type `kbot "find all TODOs in this project, categorize by priority (P0/P1/P2), and show me a summary"` -Sleep 400ms -Enter -Sleep 3s - -# kbot realizes it doesn't have a tool for this -Type "# kbot doesn't have a TODO scanner with priority detection..." -Enter -Sleep 1s - -# kbot forges the tool -Type "# But it can build one." -Enter -Sleep 1.5s - -Type `kbot "I need a tool that scans for TODO/FIXME/HACK comments, extracts priority levels, and generates a report"` -Sleep 400ms -Enter -Sleep 8s - -# Show the forged tool -Type "kbot forge list" -Sleep 300ms -Enter -Sleep 3s - -# Use the forged tool immediately -Type `kbot "now use the todo scanner on packages/kbot/src/"` -Sleep 400ms -Enter -Sleep 8s - -# Show it persists -Type "# That tool is now permanent. Available in every future session." -Enter -Sleep 1s - -Type "# 368 tools. This one was built 30 seconds ago." -Enter -Sleep 3s diff --git a/tools/video-assets/demo-hero.gif b/tools/video-assets/demo-hero.gif deleted file mode 100644 index 5b31108cc..000000000 Binary files a/tools/video-assets/demo-hero.gif and /dev/null differ diff --git a/tools/video-assets/demo-hero.tape b/tools/video-assets/demo-hero.tape deleted file mode 100644 index f0480baa1..000000000 --- a/tools/video-assets/demo-hero.tape +++ /dev/null @@ -1,42 +0,0 @@ -# kbot Hero Demo — The 30-second pitch -# Shows: install → first query → agent routing → tool forging -# Run: vhs tools/video-assets/demo-hero.tape - -Output tools/video-assets/demo-hero.gif - -Set Shell "zsh" -Set Theme "Catppuccin Mocha" -Set FontSize 17 -Set Width 900 -Set Height 540 -Set Padding 24 -Set TypingSpeed 35ms -Set PlaybackSpeed 1 - -# Install -Type "npm install -g @kernel.chat/kbot" -Enter -Sleep 2s - -# First query — show it just works -Type `kbot "fix the auth bug in src/auth.ts"` -Sleep 300ms -Enter -Sleep 8s - -# Show agent routing -Type `kbot --agent researcher "latest papers on LLM agents"` -Sleep 300ms -Enter -Sleep 6s - -# Show it builds its own tools -Type `kbot forge "lint Dockerfile for best practices"` -Sleep 300ms -Enter -Sleep 5s - -# Finish -Type "# 787+ tools. 35 agents. Dreams. Learns. $0 local. MIT." -Enter -Sleep 2s diff --git a/tools/video-assets/demo-learning.gif b/tools/video-assets/demo-learning.gif deleted file mode 100644 index df24836a4..000000000 Binary files a/tools/video-assets/demo-learning.gif and /dev/null differ diff --git a/tools/video-assets/demo-learning.tape b/tools/video-assets/demo-learning.tape deleted file mode 100644 index 1c5a28a59..000000000 --- a/tools/video-assets/demo-learning.tape +++ /dev/null @@ -1,48 +0,0 @@ -# kbot Learning Engine — The differentiator -# Shows: pattern extraction → skill routing → compounding -# Run: vhs tools/video-assets/demo-learning.tape - -Output tools/video-assets/demo-learning.gif - -Set Shell "zsh" -Set Theme "Catppuccin Mocha" -Set FontSize 17 -Set Width 900 -Set Height 540 -Set Padding 24 -Set TypingSpeed 35ms -Set PlaybackSpeed 1 - -# Show what kbot has learned -Type "# kbot learns from every interaction" -Enter -Sleep 1s - -# Check learning stats -Type "kbot reflect" -Sleep 300ms -Enter -Sleep 6s - -# Show routing decisions -Type "kbot compare" -Sleep 300ms -Enter -Sleep 5s - -# Show pattern count -Type `kbot insights --detail` -Sleep 300ms -Enter -Sleep 6s - -# Make a query that triggers learning -Type `kbot "refactor the auth middleware to use JWT verification"` -Sleep 300ms -Enter -Sleep 10s - -# Show the learning happened -Type "# Session N+1 is now smarter than Session N" -Enter -Sleep 2s diff --git a/tools/video-assets/demo-local-ai.gif b/tools/video-assets/demo-local-ai.gif deleted file mode 100644 index add66b787..000000000 Binary files a/tools/video-assets/demo-local-ai.gif and /dev/null differ diff --git a/tools/video-assets/demo-local-ai.tape b/tools/video-assets/demo-local-ai.tape deleted file mode 100644 index ad63cc791..000000000 --- a/tools/video-assets/demo-local-ai.tape +++ /dev/null @@ -1,48 +0,0 @@ -# kbot Local AI — $0 inference, fully offline -# Shows: local model selection, zero-cost inference, hardware detection -# Run: vhs tools/video-assets/demo-local-ai.tape - -Output tools/video-assets/demo-local-ai.gif - -Set Shell "zsh" -Set Theme "Catppuccin Mocha" -Set FontSize 17 -Set Width 900 -Set Height 540 -Set Padding 24 -Set TypingSpeed 35ms -Set PlaybackSpeed 1 - -# Title -Type "# $0 AI — runs fully offline on your machine" -Enter -Sleep 1s - -# Show hardware detection -Type "kbot hardware" -Sleep 300ms -Enter -Sleep 4s - -# Show available local models -Type "kbot models" -Sleep 300ms -Enter -Sleep 5s - -# Run a query with local model -Type `kbot --local "write a Python script to parse CSV files"` -Sleep 300ms -Enter -Sleep 10s - -# Show cost -Type "# Total cost: $0.00 — no API key, no data leaves your machine" -Enter -Sleep 2s - -# Doctor check -Type "kbot doctor" -Sleep 300ms -Enter -Sleep 5s diff --git a/tools/video-assets/demo-local.tape b/tools/video-assets/demo-local.tape deleted file mode 100644 index 0ffcd16f6..000000000 --- a/tools/video-assets/demo-local.tape +++ /dev/null @@ -1,24 +0,0 @@ -# kbot Local Mode Demo — shows zero-config offline AI -# Run: vhs tools/video-assets/demo-local.tape - -Output tools/video-assets/demo-local.gif - -Set Shell "zsh" -Set Theme "Catppuccin Mocha" -Set FontSize 18 -Set Width 900 -Set Height 500 -Set Padding 20 -Set TypingSpeed 50ms - -# Show it works with no config -Type `kbot "explain this codebase"` -Sleep 500ms -Enter -Sleep 6s - -# Show local mode -Type `kbot local` -Sleep 500ms -Enter -Sleep 4s diff --git a/tools/video-assets/demo-quick.gif b/tools/video-assets/demo-quick.gif deleted file mode 100644 index 2f3ae7602..000000000 Binary files a/tools/video-assets/demo-quick.gif and /dev/null differ diff --git a/tools/video-assets/demo-quick.tape b/tools/video-assets/demo-quick.tape deleted file mode 100644 index e8059a383..000000000 --- a/tools/video-assets/demo-quick.tape +++ /dev/null @@ -1,43 +0,0 @@ -# kbot Quick Demo — Static commands that work without API -# Run: vhs tools/video-assets/demo-quick.tape - -Output tools/video-assets/demo-quick.gif - -Set Shell "zsh" -Set Theme "Catppuccin Mocha" -Set FontSize 16 -Set Width 900 -Set Height 540 -Set Padding 20 -Set TypingSpeed 30ms -Set PlaybackSpeed 1.2 - -# Show version -Type "kbot --version" -Enter -Sleep 1s - -# Show help — demonstrates the breadth -Type "kbot help" -Enter -Sleep 3s - -# Show agents -Type "kbot agents" -Enter -Sleep 3s - -# Show status — tools, learning stats -Type "kbot status --json | head -20" -Enter -Sleep 3s - -# Show doctor -Type "kbot doctor" -Enter -Sleep 5s - -# End with install -Type "echo '→ npm i -g @kernel.chat/kbot — 787+ tools — kernel.chat'" -Enter -Sleep 2s diff --git a/tools/video-assets/demo.gif b/tools/video-assets/demo.gif deleted file mode 100644 index 726cdeebf..000000000 Binary files a/tools/video-assets/demo.gif and /dev/null differ diff --git a/tools/video-assets/demo.tape b/tools/video-assets/demo.tape deleted file mode 100644 index c739ccda0..000000000 --- a/tools/video-assets/demo.tape +++ /dev/null @@ -1,48 +0,0 @@ -# kbot v3.97 Demo — Terminal recording for README & npm -# Run: vhs tools/video-assets/demo.tape - -Output tools/video-assets/demo.gif - -Set Shell "zsh" -Set Theme "Catppuccin Mocha" -Set FontSize 16 -Set Width 960 -Set Height 560 -Set Padding 24 -Set TypingSpeed 35ms -Set PlaybackSpeed 1.5 - -# Title -Type "echo 'kbot — 787+ tools. Dreams. Learns. Builds its own tools. $0 local.'" -Enter -Sleep 1.5s - -# One-shot — show agent routing -Type `kbot "find security issues in this repo"` -Enter -Sleep 6s - -# Dream status -Type "kbot dream status" -Enter -Sleep 4s - -# Agents list -Type "kbot agents" -Enter -Sleep 4s - -# Local AI — no API key needed -Type "kbot local status" -Enter -Sleep 3s - -# Forge a custom tool -Type `kbot forge "check npm audit for critical vulnerabilities"` -Enter -Sleep 5s - -# End -Type "echo 'npm i -g @kernel.chat/kbot — MIT — kernel.chat'" -Enter -Sleep 2s diff --git a/tools/video-assets/kbot-launch/clips/01-title.mp4 b/tools/video-assets/kbot-launch/clips/01-title.mp4 deleted file mode 100644 index c2242bd58..000000000 Binary files a/tools/video-assets/kbot-launch/clips/01-title.mp4 and /dev/null differ diff --git a/tools/video-assets/kbot-launch/clips/02-problem.mp4 b/tools/video-assets/kbot-launch/clips/02-problem.mp4 deleted file mode 100644 index 76e111e51..000000000 Binary files a/tools/video-assets/kbot-launch/clips/02-problem.mp4 and /dev/null differ diff --git a/tools/video-assets/kbot-launch/clips/03-install.mp4 b/tools/video-assets/kbot-launch/clips/03-install.mp4 deleted file mode 100644 index 20ac3f459..000000000 Binary files a/tools/video-assets/kbot-launch/clips/03-install.mp4 and /dev/null differ diff --git a/tools/video-assets/kbot-launch/clips/04-providers.mp4 b/tools/video-assets/kbot-launch/clips/04-providers.mp4 deleted file mode 100644 index c982a8e4f..000000000 Binary files a/tools/video-assets/kbot-launch/clips/04-providers.mp4 and /dev/null differ diff --git a/tools/video-assets/kbot-launch/clips/05-agents.mp4 b/tools/video-assets/kbot-launch/clips/05-agents.mp4 deleted file mode 100644 index 7a578d840..000000000 Binary files a/tools/video-assets/kbot-launch/clips/05-agents.mp4 and /dev/null differ diff --git a/tools/video-assets/kbot-launch/clips/06-offline.mp4 b/tools/video-assets/kbot-launch/clips/06-offline.mp4 deleted file mode 100644 index d95bcf33a..000000000 Binary files a/tools/video-assets/kbot-launch/clips/06-offline.mp4 and /dev/null differ diff --git a/tools/video-assets/kbot-launch/clips/07-tools.mp4 b/tools/video-assets/kbot-launch/clips/07-tools.mp4 deleted file mode 100644 index f3d11347b..000000000 Binary files a/tools/video-assets/kbot-launch/clips/07-tools.mp4 and /dev/null differ diff --git a/tools/video-assets/kbot-launch/clips/08-compare.mp4 b/tools/video-assets/kbot-launch/clips/08-compare.mp4 deleted file mode 100644 index e88c95c93..000000000 Binary files a/tools/video-assets/kbot-launch/clips/08-compare.mp4 and /dev/null differ diff --git a/tools/video-assets/kbot-launch/clips/09-ide.mp4 b/tools/video-assets/kbot-launch/clips/09-ide.mp4 deleted file mode 100644 index 6afce65fe..000000000 Binary files a/tools/video-assets/kbot-launch/clips/09-ide.mp4 and /dev/null differ diff --git a/tools/video-assets/kbot-launch/clips/10-cta.mp4 b/tools/video-assets/kbot-launch/clips/10-cta.mp4 deleted file mode 100644 index ee67a8334..000000000 Binary files a/tools/video-assets/kbot-launch/clips/10-cta.mp4 and /dev/null differ diff --git a/tools/video-assets/kbot-launch/frames/01-title.png b/tools/video-assets/kbot-launch/frames/01-title.png deleted file mode 100644 index 5cac9edea..000000000 Binary files a/tools/video-assets/kbot-launch/frames/01-title.png and /dev/null differ diff --git a/tools/video-assets/kbot-launch/frames/02-problem.png b/tools/video-assets/kbot-launch/frames/02-problem.png deleted file mode 100644 index 42be44090..000000000 Binary files a/tools/video-assets/kbot-launch/frames/02-problem.png and /dev/null differ diff --git a/tools/video-assets/kbot-launch/frames/03-install.png b/tools/video-assets/kbot-launch/frames/03-install.png deleted file mode 100644 index bce6cfc78..000000000 Binary files a/tools/video-assets/kbot-launch/frames/03-install.png and /dev/null differ diff --git a/tools/video-assets/kbot-launch/frames/04-providers.png b/tools/video-assets/kbot-launch/frames/04-providers.png deleted file mode 100644 index b0ec10eb8..000000000 Binary files a/tools/video-assets/kbot-launch/frames/04-providers.png and /dev/null differ diff --git a/tools/video-assets/kbot-launch/frames/05-agents.png b/tools/video-assets/kbot-launch/frames/05-agents.png deleted file mode 100644 index e199bec02..000000000 Binary files a/tools/video-assets/kbot-launch/frames/05-agents.png and /dev/null differ diff --git a/tools/video-assets/kbot-launch/frames/06-offline.png b/tools/video-assets/kbot-launch/frames/06-offline.png deleted file mode 100644 index e6da73f58..000000000 Binary files a/tools/video-assets/kbot-launch/frames/06-offline.png and /dev/null differ diff --git a/tools/video-assets/kbot-launch/frames/07-tools.png b/tools/video-assets/kbot-launch/frames/07-tools.png deleted file mode 100644 index 7591eef96..000000000 Binary files a/tools/video-assets/kbot-launch/frames/07-tools.png and /dev/null differ diff --git a/tools/video-assets/kbot-launch/frames/08-compare.png b/tools/video-assets/kbot-launch/frames/08-compare.png deleted file mode 100644 index 8b98543fa..000000000 Binary files a/tools/video-assets/kbot-launch/frames/08-compare.png and /dev/null differ diff --git a/tools/video-assets/kbot-launch/frames/09-ide.png b/tools/video-assets/kbot-launch/frames/09-ide.png deleted file mode 100644 index d7c4e1737..000000000 Binary files a/tools/video-assets/kbot-launch/frames/09-ide.png and /dev/null differ diff --git a/tools/video-assets/kbot-launch/frames/10-cta.png b/tools/video-assets/kbot-launch/frames/10-cta.png deleted file mode 100644 index 6d6247e38..000000000 Binary files a/tools/video-assets/kbot-launch/frames/10-cta.png and /dev/null differ diff --git a/tools/video-assets/kbot-launch/kbot-launch.mp4 b/tools/video-assets/kbot-launch/kbot-launch.mp4 deleted file mode 100644 index 9cfa61aee..000000000 Binary files a/tools/video-assets/kbot-launch/kbot-launch.mp4 and /dev/null differ diff --git a/tools/video-assets/kbot-tiktok.mp4 b/tools/video-assets/kbot-tiktok.mp4 deleted file mode 100644 index ecc0c3702..000000000 Binary files a/tools/video-assets/kbot-tiktok.mp4 and /dev/null differ diff --git a/tools/video-assets/kbot-youtube.mp4 b/tools/video-assets/kbot-youtube.mp4 deleted file mode 100644 index dbd3411ac..000000000 Binary files a/tools/video-assets/kbot-youtube.mp4 and /dev/null differ