All notable changes are recorded here. The project follows semantic versioning.
- Re-voicing workflow (
scripts/match-timing.py): when the narration text is locked but the voice (or model) changes, snapshot the approvedmanifests/chapters.jsonwith--lock, then align the new synthesis back to it — per-chapter pitch-preservingatempo, standard-gap re-join, loudness re-normalization and word-timing rescale. Chapter starts, scene guards and sound frames do not move; rebuild semantic captions afterwards. Verified on a 4996-frame / 22-chapter production across three voice passes.
- Case-insensitive visual-asset hashes:
validate-visual-plannow accepts uppercasesha256digests (e.g. fromGet-FileHash) instead of rejecting them as mismatches.
- Long-film path (
references/remotion-architecture.md): for newly authored long films keepTIMELINE_SCALE = 1and setDURATIONto the total delivery frame count with all timing authored in delivery frames; notes the bundled template ships a 1126-frame timeline. - Bundler authoring pitfall (
references/remotion-architecture.md): documents the observed misparse of adjacent generic-annotated arrow components after dense JSX (error misreported on the following line) with verified workarounds. - Re-voicing procedure (
references/tts-audio.md): lock → synthesize → speed-post → match → rebuild-captions sequence.
- Elastic Glyph Wave Typography (4段双轴弹性波浪跳字与点亮系统):
- Tibo-style 4-Stage Overshoot JumpInText: fully ported and tuned the physical spring wave trajectory (
waveY: [14px, -6px, 1.5px, 0px],waveX: [3px, -1px, 0px, 0px],rotX: [40deg, -5deg, 0deg]), delivering tactile bounce and per-glyph ignition color transition (activeColor -> ink). - Caveat Latin Handwriting Sub-system: integrated
Caveat-Latin.woff2hand-drawn annotation stickers (lonely code,start small,packaging,ongoing triage,always by your side) for rich multi-tier typographic hierarchy. - Zero-Overlap & Zero-Flicker Transitions: implemented strict lifecycle boundary isolation (
396~412fexit,416fmount) eliminating the 14s transition collision; replaced floating Module overlays with smoothStaggered Stack Insetfile lists, completely curing 16s flicker and 17s card-header collisions. - Canonical Tri-Aspect Rendering Engine: cleanly unified responsive rendering across all 3 official 2K canvases (16:9
2560×1440, 4:31920×1440, 3:41440×1920) with dedicated layout compositions (NotebookVideoFilm-16x9,NotebookVideoFilm-4x3,NotebookVideoFilm-3x4).
- Tibo-style 4-Stage Overshoot JumpInText: fully ported and tuned the physical spring wave trajectory (
- Cinematic Motion & Audio System (质感与音效体系大版本跃迁):
- Tibo-style 3D Mechanical RollDigit: added
RollDigitcomponent utilizing projection-compressedrotateX3D flipping withcosperspective scaling, replacing plain pop-in transitions for numerical and version releases (v1.0->v1.1release with greenRELEASEDbadge). - Idle Life & Micro-Interactions: upgraded mascot with sinusoidal breathing motion (
1 + 0.016*sin(f*0.16)) and natural arm-waving lifespans. - Curated Audio & Lo-Fi BGM System: integrated ambient Lo-Fi background track (
bgm.mp3) with gentle fade-in and decay at volume0.08(voice-safe), accompanied by high-frequency CC0 UI feedback audio cues (toggle.oggmechanical flip,click.oggstep trigger,drop.oggcard magnetic snap-in). - Three-Canvas Demo Suite Refreshed: fully re-rendered 2K demos and animated WebP previews across all three delivery formats — 16:9 (
notebook-video-demo.mp4/.webp), 4:3 (notebook-video-demo-43.mp4/.webp), and 3:4 portrait (notebook-video-demo-34.mp4/.webp). - Native Browser Rendering Engine: configured direct native Chrome/Edge binary binding for instant multi-threaded zero-download rendering.
- Tibo-style 3D Mechanical RollDigit: added
- Premium motion upgrade (质感升级固化): the lecture template is now a cinematic-quality baseline that any future skill video inherits:
- CameraRig dual-canvas camera: per-canvas keyframe tables (16:9 landscape and 3:4 portrait), Tibo-style exponential lag follow-focus, per-chapter slow push-ins.
- JumpInText / WaveText: per-glyph 3D flip-in (rotateX + stagger + spring) for chapter and scene titles; per-letter wave typing with color gradient for the CTA latin string.
- Subtitle redesign: torn-paper bar removed, pure centered text pinned near the bottom, per-word/per-character fade-slide with a 180ms lead; word spacing only at CJK<->Latin boundaries.
- Globe intro: multi-keyframe rotate-in (150deg to 360deg with a mid-scale bulge) replacing the plain pop-in.
- Palette softened: lighter ivory paper, reduced grid/texture/vignette, soft layered card shadows and thinner outlines.
- Typography: unified to LXGW WenKai Lite (SIL OFL 1.1; Regular + Medium) for all CJK copy, with Clash Display / Space Grotesk Latin accents. Legacy Smiley Sans / Source Han Sans assets, font-faces and license files are removed; the example-project is unified to the same stack.
- MiMo narration: the 30s demo timeline was re-voiced through the MiMo TTS adapter (37.55s), and the whole scene timeline was remapped word-by-word to 1126 frames (new scene starts 0/213/416/682; caption cues rebuilt to 16 semantic lines). Narration audio stays unbundled per repository convention.
- Demo assets:
assets/demo/notebook-video-demo.mp4and its animated webp are refreshed for 16:9 only; the 4:3 and 3:4 previews keep the previous renders.
- Widen Dependency Compatibility (拓宽依赖与通用兼容):
- Widen React & ReactDOM dependency range to
^18.2.0 || ^19.0.0across example projects and lecture templates, eliminating peer dependency lockups and enabling seamless execution on both React 18 and React 19 environments. - Widen Remotion dependency range to
^4.0.0(remotion,@remotion/cli,@remotion/media), allowing automatic minor/patch upgrades without breaking style locks. - Relax Node.js engine requirement to
>=18. - Refactor
validate-official-example.pyandvalidate-skill-consistency.pyto validate semantic version ranges rather than brittle exact string equality. - Bump
browserslisttransitive dependency to4.28.8to resolve high severity advisory (GHSA-c83g-rgw3-j3cx).
- Widen React & ReactDOM dependency range to
- Background redesigned to a full-canvas paper surface (
Backgroundin the lecture template): the warm radial desk band outside the page, the 1.7px page outline and the offset page shadow are removed. The ivory surface (C.paperBase) now covers the whole canvas; the 54px grid and static dot texture stay inside the inner rule. On narrow/phone frames the paper is no longer surrounded by nested rails and rings. - Card text alignment fixes in the lecture template: node card labels (
仓库/Star/Issue/Fork/PR) are drawn inside the card whitespace instead of hanging below the card edge, and the step list in the contribution scene is compacted (item height 56→48, gap 12→8, containertop/bottom120/96→116/104) so the bottomgithub-oss-contributepill no longer overlaps the fourth step. - TTS adapter (
tts-openai-compatible.py): thevoicefield is now omitted when empty instead of sending"voice": ""— MiMo voicedesign models reject the empty string with HTTP 400. - Demo assets replaced:
assets/demo/notebook-video-demo.mp4(1280×720) andnotebook-video-demo.webpare fresh renders of the updated template with chapter-synced narration, no black/letterbox frames and the new full-canvas background. New canvas variants were added:notebook-video-demo-43.mp4(4:3) andnotebook-video-demo-34.mp4(3:4 portrait) with matching animated webp previews, and the READMEs now show a three-canvas demo gallery.
- One template, three canvases: the lecture template ships a
CANVASswitch ('16:9' | '4:3' | '3:4') insrc/index.tsx. Composition, film wrapper, subtitle strip, chrome and safe-width values come from the locked per-mode table; the 4:3 landscape reuses the landscape scene set inside a scaled wrapper, and the 3:4 portrait film uses its own single-column*Pscene set (verified in the rendered demo). The template caption data set was refreshed to the 30s chapter-synced timeline (scene cuts 216/396/600).
references/visual-system.mdbackground section andreferences/locked-style-contract.jsonbackground tokens updated to the full-canvas contract (outer_gradient/page_outline/page_shadownownull,page_bounds= full canvas).
references/tts-audio.mdand the SKILL.md TTS step add a polyphone (多音字) handling rule: rewrite easily-misread polyphones into reading-unambiguous, meaning-equivalent phrases directly innarration.txt(and mirror them intomanifests/semantic-caption-lines.txt) instead of relying on TTS context or SSML. The adapter feeds plain text with no pinyin channel and the narration doubles as subtitle text, so a wrong reading can only be prevented at the source; keeping replacements close in character count means chapter frames barely shift. Ships a table of production-verified rewrites (重装→重新装, 批量重命名→批量重新命名, 输一行命令→输入一条命令, 钉在屏幕上→贴在屏幕上, 一模一样→长得一样) and a reminder to update matching on-screen card text.
references/portrait-illustration-system.mdgains a "choosing the vehicle" section: illustration-first is about role, not a mandate to draw everything — pick text-forward panels/checklists for definitions, lists, comparisons, sources and shock numbers, and illustration for scenes/processes, with every beat legible from the text alone or the animation alone. Two guardrails added: an inline icon must render smaller than its container box (or it spills over the corners), and stacked panels/lines need ≥50px vertical gaps to avoid a phone-screen overlap.
references/portrait-illustration-system.md: the illustration-first grammar for 3:4 portrait, verified on a produced pilot. Codifies the text-vs-graphic role split (in-scene text is a short label; full narration lives in the subtitle strip), a reusable code-drawn figure cast with subtle idle motion, a persistent faint Ambient scatter layer that removes empty negative space, a text-emphasis kit (highlighter marker, hand-drawn underline, contrast label pair, fast pop count-up), the three-band scene structure (heading / hero illustration / payoff), and proven process/checklist/end beat patterns.- Guardrails carried into the doc: author strictly in the 1080×1440 design space (coordinates beyond 1080 clip), keep chapter-chrome
stageboundaries identical to the scene-cut frames, and check the contact sheet for any transient mostly-background frame or a0-dwelling counter.
- SKILL.md portrait kickoff now points to
references/portrait-illustration-system.mdalongsidecanvas-modes.md.
- Third locked canvas: 3:4 portrait (1440×1920 delivery, 1080×1440 design space) for portrait feeds such as Douyin. Full parameter column in
references/canvas-modes.mdplus a portrait authoring procedure: single-column stacked zones, subtitle strip at the bottom (margins 50, bottom 40, height 104), Smiley subtitle at 40px with a 900px width gate. Verified on a produced pilot; 9:16 was tested and rejected (dead lower band under platform UI). validate-videoaccepts the 1440×1920 container;validate-visual-plancanvas gate now knows all three modes and additionally cross-checks the design-space height and the subtitle strip bottom offset.references/locked-style-contract.jsondefines the 3:4 mode (bounds, safe width, per-mode subtitle font sizes).
- SKILL.md kickoff question offers three canvases; canvas-modes.md consolidated per-mode subtitle sizes (44 landscape / 40 portrait) that v1.4.0 left stated only for landscape.
- Standard delivery pace: the lecture template now ships
scripts/speed-post.py, a deterministic post-synthesis step (atempo=1.10, pitch unchanged, loudness re-normalized) that also scales every timestamp innarration.mp3.jsonandmanifests/chapters.jsonby the same factor. Documented inreferences/tts-audio.md; raw teaching-tone synthesis measures ~305 chars/min and prompt wording cannot hit a target pace reliably, so 336 chars/min is fixed in post. - Save-hook ending contract in
references/pacing-rhythm.md: knowledge-genre closing cards ask for a save with a concrete future moment (algorithms weight saves above completion for this genre), pair it with a code-drawn star animation, and keep platform references to the compliant wording without account names or links. - Full-canvas vertical budget in
references/canvas-modes.md: card bottoms reach ~40px above the subtitle strip; an empty lower quarter is a layout defect on phone screens. - Three new pre-render self-check items in
references/lecture-composition.md: body copy is pure ink (muted reserved for decorative kickers), cards consume the vertical budget, and SVG elements keep 24px clearance with no label over a graphic.
- Subtitle strip refined: font switches to bundled Smiley Sans (designed for video subtitles, SIL OFL) at 44px with 1.2px tracking; the meaning-free blue ring decoration is removed while the orange locator bar stays. Template, caption width gate and
references/locked-style-contract.jsonupdated together. Verified on a produced pilot and a full episode.
validate-visual-plannow cross-checks canvas-mode consistency insidesrc/index.tsx: theCompositionwidth (2560 or 1920) must agree with the film wrapper design width,subtitleSafeWidthand the subtitle strip margins. A mixed-mode file — for example a 4:3 film keeping the 16:9 subtitle margins, which shipped once and misplaced the subtitle strip — now fails validation with a precise error instead of passing silently.references/canvas-modes.mdmarks the four 4:3 values as change-together and adds the pre-rendervalidate-visual-planstep.
references/canvas-modes.md: two delivery canvases now coexist — 16:9 (2560×1440, default) and 4:3 (1920×1440, taller mobile presence). The mode is asked once at kickoff and decides every layout coordinate; the reference carries the full parameter table (design space, subtitle strip margins, subtitle safe width, two-column budgets), a mechanical 4:3 re-layout procedure and the mobile-readability font floor. Both modes were verified on full-length productions.references/pacing-rhythm.md: the energy-curve contract — hammer frames (one full-screen quotable line per 60–90 seconds), fast/slow chapter alternation with per-segment TTS pace instructions, breathing gaps between chapters, reduced density at the close, plus a pre-render pacing gate.- Three proven first-sentence templates in
references/narrative-hook.md(result first / curiosity gap / conflict-contrast) with an action-density gate for the first 3 seconds, and a ban on audience-labeling or roadmap openers.
SKILL.mdkickoff now asks the canvas mode (16:9 or 4:3) once per production and binds the copywriting step to the cold-open and pacing contracts.validate-videoaccepts both locked canvases (2560×1440 and 1920×1440); the locked style contract defines both modes including subtitle bounds.- Lecture template font floor raised for phone readability: body 26 / label 22 / footnote 18 (titles and subtitles unchanged).
assets/lecture-template/, the new default project template: a fully validated 30-second lecture-composition film with layered source (locked core, reusable component library, clearly marked content layer) proven across a produced multi-episode series.references/lecture-composition.md: the default multi-zone code-drawn visual route — six binding rules (pure SVG graphics, multi-zone layout, text/graphic co-stars, cue-frame speech sync, demonstrative animation, series component reuse), a mechanical cue-to-frame procedure and a pre-render self-check list, written so weaker models can reproduce the established style by imitation.scripts/tts-openai-compatible.pyinside the template: a provider-neutral, chapter-segmented TTS adapter for any OpenAI-compatible chat TTS endpoint, configured only through environment variables; measures real segment durations so chapter boundaries never drift, writesmanifests/chapters.json, and caches segments by text hash.new-project ./dir --classicto copy the original visual-director exemplar for productions that accepted the image add-on.
- Lecture composition is now the default visual route; image generation became an optional add-on offered to the user once per production, with an explicit note that its result depends on the current tool's image quality and that Codex's built-in image generation is the best-suited environment for it.
new-projectcopies the lecture template by default; smoke tests cover both routes.SKILL.md, both landing pages andreferences/tts-audio.mdupdated for the default-route/add-on split and the recommended chapter-segmented TTS adapter (Edge Read Aloud remains the zero-key fallback).
- A provider-neutral visual-director stage that selects
image-text,pure-textorpure-graphicfor every scene from the narration meaning. - Optional Codex image-generation enhancement with complete fallbacks for other agents and local environments.
- Generated-image prompt, crop, provenance and redistribution records through
manifests/visual-assets.json. validate-visual-planfor scene modes, start-inclusive/end-exclusive lifetimes, raster existence, SHA-256 integrity and provenance.- An official Remotion image-plus-text example with the bitmap, callouts and exact labels animated as independent layers.
- Microsoft Edge Read Aloud as the preferred zero-key Mandarin TTS adapter when available and appropriate.
- Upgraded the official style contract from v8 performance to v9 visual director while preserving 2K/30fps rendering, semantic subtitles, declarative audio, complete exits and automated QA.
- Updated the skill metadata, English/Chinese landing pages and project scaffolding for image-generation-aware production.
- Corrected contributor attribution so GitHub recognizes the Codex collaborator instead of the unrelated
noreplyaccount. - Clarified the current naming: ChatGPT is the desktop application, while Codex remains its coding mode and GitHub contributor identity.
- A real 30-second animated showcase and four-scene preview rendered by the official engine.
- Direct release, ZIP, HTTPS, SSH, GitHub CLI and raw-contract download paths.
- Verified user-level and repository-level installation examples for Codex, Claude Code and Cursor.
- A five-minute first-run example and an AI-assisted installation prompt.
- Rewrote the English and Chinese landing pages around the output, shortest install path and real evidence.
- Refined repository description, topics and tracked release metadata for discoverability.
- CI now checks Python syntax without creating forbidden
__pycache__files. - GitHub Actions upgraded to pinned v7 commits with the current runtime.
- CI installs its declared FFmpeg/FFprobe system dependency before validation.
- Dependabot no longer proposes unreviewed changes to the style-locked Remotion engine.
- Cross-platform Node launcher for the full notebook-video workflow.
- Official 2K/30fps Remotion example with synchronized narration, semantic captions and licensed fonts.
- Automated skill, layering, caption, render and packaging validation.
- English and Simplified Chinese project documentation.
- Apache License 2.0 project licensing and third-party notices.
- Provider-neutral TTS audio and word-timing adapter contract.
- Locked 900-frame asset manifest aligned with the canonical 30-second composition.
- Repository ignores credentials, private keys, caches, generated renders and local environment files.