<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>silenceper – Articles</title><link>https://silenceper.com/en/article/</link><description>Recent content in Articles on silenceper</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><atom:link href="https://silenceper.com/en/article/index.xml" rel="self" type="application/rss+xml"/><item><title>open-slide: A Slide Framework Built for AI Agents</title><link>https://silenceper.com/en/article/2026-05-07-open-slide-agent-slide-framework/</link><pubDate>Thu, 07 May 2026 19:47:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-07-open-slide-agent-slide-framework/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260507/open-slide-github-cover.png" alt="open-slide GitHub README cover" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;One-line positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;open-slide is a React slide framework built for AI agents: you describe what the deck should be, the agent writes React pages, and open-slide handles the canvas, preview, presentation mode, export, and iteration loop.&lt;/p&gt;
&lt;h2&gt;Basic information&lt;span class="hx-absolute -hx-mt-20" id="basic-information"&gt;&lt;/span&gt;
&lt;a href="#basic-information" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;open-slide&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Author&lt;/td&gt;
&lt;td&gt;1weiho&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;Agent-native slide framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stack&lt;/td&gt;
&lt;td&gt;TypeScript, React, Vite, pnpm, Turbo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latest version&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@open-slide/core@1.0.6&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub popularity&lt;/td&gt;
&lt;td&gt;2.1k+ stars / 143 forks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Website&lt;/td&gt;
&lt;td&gt;&lt;a href="https://open-slide.dev" target="_blank" rel="noopener"&gt;https://open-slide.dev&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Init command&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npx @open-slide/cli init my-slide&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What problem does it solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The traditional slide-making workflow usually happens in Keynote, PowerPoint, Figma, or a browser-based editor. You drag elements around, adjust styles, and manually polish layout details.&lt;/p&gt;
&lt;p&gt;But a lot of that work can now be handled by AI agents: structure, copy, visual hierarchy, colors, and even code implementation. The idea behind open-slide is simple: &lt;strong&gt;if slides are visual code, let agents write that code directly.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;open-slide provides a stable slide runtime:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each page is a React component.&lt;/li&gt;
&lt;li&gt;Every slide is rendered into a fixed &lt;code&gt;1920 × 1080&lt;/code&gt; canvas.&lt;/li&gt;
&lt;li&gt;The framework supports preview, hot reload, presentation mode, and export.&lt;/li&gt;
&lt;li&gt;Agents can follow built-in skills and rules to generate and edit decks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This means you do not need to set up React, Vite, rendering, and export logic from scratch. You describe the deck you want, the agent writes the pages, and open-slide turns those pages into a presentable and iterable deck.&lt;/p&gt;
&lt;h2&gt;Core features&lt;span class="hx-absolute -hx-mt-20" id="core-features"&gt;&lt;/span&gt;
&lt;a href="#core-features" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Agent-native authoring&lt;span class="hx-absolute -hx-mt-20" id="1-agent-native-authoring"&gt;&lt;/span&gt;
&lt;a href="#1-agent-native-authoring" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The main selling point of open-slide is that it is designed around agents writing slides.&lt;/p&gt;
&lt;p&gt;It can work with coding agents such as Claude Code, Codex, and Cursor. A scaffolded workspace ships with agent-facing skills, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/create-slide&lt;/code&gt;: drafts a deck end to end, starting from topic, aesthetic, page count, text density, and motion preference.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/slide-authoring&lt;/code&gt;: gives the agent technical rules for the &lt;code&gt;1920 × 1080&lt;/code&gt; canvas, type scale, palette, and layout constraints.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In other words, open-slide is not just a slide component library. It also defines how an agent should author and revise a deck.&lt;/p&gt;
&lt;h3&gt;2. React-first: every slide is code&lt;span class="hx-absolute -hx-mt-20" id="2-react-first-every-slide-is-code"&gt;&lt;/span&gt;
&lt;a href="#2-react-first-every-slide-is-code" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;open-slide does not introduce a constrained slide DSL. Each slide page is just an arbitrary React component.&lt;/p&gt;
&lt;p&gt;That means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can write normal TSX.&lt;/li&gt;
&lt;li&gt;Layout, styling, animation, and component structure are fully controllable.&lt;/li&gt;
&lt;li&gt;Slides can be versioned with Git.&lt;/li&gt;
&lt;li&gt;Agents can edit the source directly.&lt;/li&gt;
&lt;li&gt;The deck can be reviewed like a regular frontend codebase.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The website summarizes this well: &lt;strong&gt;A slide is a file. Just React, nothing else.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;3. Fixed 1920 × 1080 canvas&lt;span class="hx-absolute -hx-mt-20" id="3-fixed-1920--1080-canvas"&gt;&lt;/span&gt;
&lt;a href="#3-fixed-1920--1080-canvas" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Every slide renders into a fixed &lt;code&gt;1920 × 1080&lt;/code&gt; canvas.&lt;/p&gt;
&lt;p&gt;This matters for agent-generated slides because it gives the agent a clear visual boundary. Font sizes, layout, element positions, and proportions can all be designed around a stable canvas.&lt;/p&gt;
&lt;p&gt;Compared with a responsive web page, this fixed canvas is closer to a real presentation deck and is easier to export and present.&lt;/p&gt;
&lt;h3&gt;4. In-browser inspector&lt;span class="hx-absolute -hx-mt-20" id="4-in-browser-inspector"&gt;&lt;/span&gt;
&lt;a href="#4-in-browser-inspector" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;open-slide also provides an interesting iteration flow. In the dev server, you can click an element and leave a comment on it.&lt;/p&gt;
&lt;p&gt;For example, you can click a heading and write:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“make this red”&lt;/li&gt;
&lt;li&gt;“shrink the headline”&lt;/li&gt;
&lt;li&gt;“change the copy to Open Slide Rocks”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those comments are persisted as &lt;code&gt;@slide-comment&lt;/code&gt; markers in the source. Then &lt;code&gt;/apply-comments&lt;/code&gt; lets the agent read pending comments, update the code, and clear the markers.&lt;/p&gt;
&lt;p&gt;This creates a useful loop: let the agent generate the first version, click to leave human feedback, and let the agent apply the next round of changes.&lt;/p&gt;
&lt;h3&gt;5. Asset manager and logo search&lt;span class="hx-absolute -hx-mt-20" id="5-asset-manager-and-logo-search"&gt;&lt;/span&gt;
&lt;a href="#5-asset-manager-and-logo-search" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;open-slide includes an assets panel for managing images, videos, and fonts per deck.&lt;/p&gt;
&lt;p&gt;It also integrates the &lt;a href="https://svgl.app/" target="_blank" rel="noopener"&gt;svgl&lt;/a&gt; logo catalogue, so you can search for and insert brand logos without hunting for SVG files manually. This is especially useful for product decks, pitches, and technical talks.&lt;/p&gt;
&lt;h3&gt;6. Professional presentation mode&lt;span class="hx-absolute -hx-mt-20" id="6-professional-presentation-mode"&gt;&lt;/span&gt;
&lt;a href="#6-professional-presentation-mode" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;open-slide is not limited to dev preview. It includes a proper present mode with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fullscreen playback&lt;/li&gt;
&lt;li&gt;keyboard navigation&lt;/li&gt;
&lt;li&gt;current and next slide preview&lt;/li&gt;
&lt;li&gt;speaker notes&lt;/li&gt;
&lt;li&gt;timer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The result is not just a browser page. It can be used as an actual presentation deck.&lt;/p&gt;
&lt;h3&gt;7. Export to static HTML and PDF&lt;span class="hx-absolute -hx-mt-20" id="7-export-to-static-html-and-pdf"&gt;&lt;/span&gt;
&lt;a href="#7-export-to-static-html-and-pdf" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;open-slide can export a deck as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;self-contained static HTML&lt;/li&gt;
&lt;li&gt;print-ready PDF&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The static HTML output can be deployed to Vercel, Cloudflare Pages, Netlify, Zeabur, or any static hosting service. It works for both local presenting and online sharing.&lt;/p&gt;
&lt;h3&gt;8. Slide manager&lt;span class="hx-absolute -hx-mt-20" id="8-slide-manager"&gt;&lt;/span&gt;
&lt;a href="#8-slide-manager" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project also includes a slide manager for organizing multiple decks with folders, custom emoji, and drag-and-drop reordering.&lt;/p&gt;
&lt;p&gt;Once you have more than a few generated decks, that management layer becomes useful.&lt;/p&gt;
&lt;h2&gt;Who is it for?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;open-slide is a good fit for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;People who want to generate decks quickly with Claude Code, Codex, or Cursor.&lt;/li&gt;
&lt;li&gt;Developers who prefer “slides as code.”&lt;/li&gt;
&lt;li&gt;Teams that need presentable decks for technical plans, product demos, or project updates.&lt;/li&gt;
&lt;li&gt;Users who want slide decks to be versioned, reviewable, and automatable.&lt;/li&gt;
&lt;li&gt;Anyone tired of manually dragging elements around in traditional slide tools.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is especially suitable for technical content: architecture explanations, product demos, roadmaps, open-source project introductions, and engineering talks.&lt;/p&gt;
&lt;h2&gt;Quick start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Initialize a project:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx @open-slide/cli init my-slide
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; my-slide
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The generated workspace includes the open-slide runtime and agent-related rules. You can ask an agent to generate a deck through &lt;code&gt;/create-slide&lt;/code&gt;, or directly edit:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;slides/&amp;lt;id&amp;gt;/index.tsx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you want to work on open-slide itself, the repository is a pnpm + Turbo monorepo:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm install
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm build
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm check
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm lint&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Main directories:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;packages/core&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Core runtime, including home page, slide viewer, present mode, inspector, Vite plugin, and dev/build/preview CLI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;packages/cli&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Scaffolder for &lt;code&gt;npx @open-slide/cli init&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;apps/demo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Demo workspace used for local development and examples&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;open-slide points to a natural new workflow: &lt;strong&gt;instead of asking AI to generate a static PowerPoint file, let an agent write a runnable, iterable, and version-controlled slide codebase.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It combines React, a fixed canvas, presentation mode, inspector comments, asset management, and export into a stable runtime for agent-authored decks.&lt;/p&gt;
&lt;p&gt;If you already use Claude Code, Codex, or Cursor for content and code generation, open-slide is a good project to try for agent-generated presentations.&lt;/p&gt;</description></item><item><title>OpenLess: An Open-Source AI Voice Input Tool That Turns Speech into Polished Text</title><link>https://silenceper.com/en/article/2026-05-07-openless-ai-voice-input/</link><pubDate>Thu, 07 May 2026 11:26:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-07-openless-ai-voice-input/</guid><description>
&lt;h2&gt;One-line positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;OpenLess is an open-source desktop voice input tool: hold a hotkey, speak, release it, and AI-polished text appears at your current cursor.&lt;/p&gt;
&lt;h2&gt;Basic information&lt;span class="hx-absolute -hx-mt-20" id="basic-information"&gt;&lt;/span&gt;
&lt;a href="#basic-information" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;OpenLess&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/appergb/openless" target="_blank" rel="noopener"&gt;https://github.com/appergb/openless&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Website&lt;/td&gt;
&lt;td&gt;&lt;a href="https://openless.top" target="_blank" rel="noopener"&gt;https://openless.top&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;Open-source voice input plus AI text polishing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Platforms&lt;/td&gt;
&lt;td&gt;macOS 12+, Windows 10+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stack&lt;/td&gt;
&lt;td&gt;Tauri 2, Rust, React, TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current version&lt;/td&gt;
&lt;td&gt;v1.2.21-tauri&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub popularity&lt;/td&gt;
&lt;td&gt;900+ stars&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What problem does it solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Many voice input tools only produce a literal transcript. The result often still needs manual cleanup: removing filler words, fixing punctuation, and restructuring the text.&lt;/p&gt;
&lt;p&gt;OpenLess focuses on a more practical goal: &lt;strong&gt;turning spoken language directly into usable written text&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The workflow is straightforward. Put your cursor in ChatGPT, Claude, Cursor, Notion, an email draft, WeChat, Slack, or almost any other text field. Press a global hotkey and speak. OpenLess records your voice, transcribes it, polishes the text with AI, and inserts the result at the cursor. If direct insertion is blocked, it falls back to copying the output to the clipboard so your dictation is not lost.&lt;/p&gt;
&lt;p&gt;Its most distinctive mode is the &lt;strong&gt;AI prompt mode&lt;/strong&gt;. You can speak loosely, and OpenLess turns your words into a structured prompt with clearer context and constraints, ready to send to ChatGPT, Claude, or Cursor.&lt;/p&gt;
&lt;p&gt;For example, you might say:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I want ChatGPT to write a SQL query from the orders table, get last month&amp;rsquo;s orders, group by customer, sort by amount descending, and return the top ten.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;OpenLess can turn that into:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please write a SQL query that:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Pulls orders from last month from the `orders` table.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Groups by customer.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Sorts by total amount, descending.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Returns the top 10 rows only.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In this workflow, OpenLess is not just a dictation tool. It turns spoken thoughts into text that is easier to send, ask, or submit.&lt;/p&gt;
&lt;h2&gt;Core features&lt;span class="hx-absolute -hx-mt-20" id="core-features"&gt;&lt;/span&gt;
&lt;a href="#core-features" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Global-hotkey voice input&lt;span class="hx-absolute -hx-mt-20" id="1-global-hotkey-voice-input"&gt;&lt;/span&gt;
&lt;a href="#1-global-hotkey-voice-input" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OpenLess lets you trigger recording with a global hotkey. You can place your cursor in any input field and start speaking. The project currently supports both push-to-talk and toggle recording modes, and &lt;code&gt;Esc&lt;/code&gt; can cancel the current session.&lt;/p&gt;
&lt;h3&gt;2. Multiple output modes&lt;span class="hx-absolute -hx-mt-20" id="2-multiple-output-modes"&gt;&lt;/span&gt;
&lt;a href="#2-multiple-output-modes" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OpenLess does not stop at raw transcription. It provides several output modes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Raw&lt;/strong&gt;: output the transcript directly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Light polish&lt;/strong&gt;: fix filler words, punctuation, and obvious wording issues while preserving meaning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structured&lt;/strong&gt;: turn loose speech into a structured AI prompt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Formal&lt;/strong&gt;: rewrite spoken text into a more formal written style.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The structured mode is the key differentiator, especially for people who frequently write AI prompts.&lt;/p&gt;
&lt;h3&gt;3. Insert text at the current cursor&lt;span class="hx-absolute -hx-mt-20" id="3-insert-text-at-the-current-cursor"&gt;&lt;/span&gt;
&lt;a href="#3-insert-text-at-the-current-cursor" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OpenLess is not trying to become another note-taking app. Its purpose is to reduce input friction. The polished text is inserted directly into the app you are already using, such as a browser, chat app, editor, or document tool.&lt;/p&gt;
&lt;p&gt;If an app blocks direct insertion, OpenLess falls back to the clipboard, and you can paste the result manually.&lt;/p&gt;
&lt;h3&gt;4. Dictionary and hotwords&lt;span class="hx-absolute -hx-mt-20" id="4-dictionary-and-hotwords"&gt;&lt;/span&gt;
&lt;a href="#4-dictionary-and-hotwords" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project includes a dictionary feature for product names, people names, and technical terms. Enabled entries are used as hotwords during speech recognition and as semantic hints during polishing.&lt;/p&gt;
&lt;p&gt;This is useful if you often dictate English product names, technical terms, or internal team vocabulary.&lt;/p&gt;
&lt;h3&gt;5. History and settings&lt;span class="hx-absolute -hx-mt-20" id="5-history-and-settings"&gt;&lt;/span&gt;
&lt;a href="#5-history-and-settings" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OpenLess provides a main window for overview, history, dictionary, style, and settings. You can review the original transcript and polished output for previous recordings, and you can adjust language, hotkeys, and model credentials.&lt;/p&gt;
&lt;h3&gt;6. Local-first and bring-your-own credentials&lt;span class="hx-absolute -hx-mt-20" id="6-local-first-and-bring-your-own-credentials"&gt;&lt;/span&gt;
&lt;a href="#6-local-first-and-bring-your-own-credentials" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Many similar tools are closed-source subscription products where your data, dictionary, and model calls stay inside the vendor&amp;rsquo;s account system.&lt;/p&gt;
&lt;p&gt;OpenLess takes a different approach: the app is open source, data is kept primarily on your own machine, and you configure the speech recognition and text polishing services yourself. It currently supports Volcengine ASR, OpenAI Whisper-compatible batch ASR, and Ark / DeepSeek / OpenAI-compatible Chat Completions.&lt;/p&gt;
&lt;h2&gt;Who is it for?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;OpenLess is a good fit for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;People who frequently write prompts for ChatGPT, Claude, Cursor, or Gemini.&lt;/li&gt;
&lt;li&gt;Users who write emails, specs, and long messages but do not want to type everything manually.&lt;/li&gt;
&lt;li&gt;Developers who want to dictate code comments, commit messages, or PR descriptions.&lt;/li&gt;
&lt;li&gt;Users who prefer an open-source option over fully closed subscription voice input tools.&lt;/li&gt;
&lt;li&gt;Heavy macOS or Windows desktop users.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your daily work involves turning thoughts into written text, OpenLess can fit naturally into that workflow.&lt;/p&gt;
&lt;h2&gt;Quick start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;End users can download installers from GitHub Releases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS: &lt;code&gt;OpenLess_&amp;lt;version&amp;gt;_aarch64.dmg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Windows: &lt;code&gt;OpenLess_&amp;lt;version&amp;gt;_x64-setup.exe&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On first launch, you need to grant the required permissions.&lt;/p&gt;
&lt;p&gt;For macOS:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Grant microphone access.&lt;/li&gt;
&lt;li&gt;Grant accessibility access.&lt;/li&gt;
&lt;li&gt;Quit and reopen OpenLess.&lt;/li&gt;
&lt;li&gt;Fill in ASR and LLM credentials in Settings.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For Windows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Grant microphone access.&lt;/li&gt;
&lt;li&gt;Check that the global hotkey listener is active in Settings.&lt;/li&gt;
&lt;li&gt;Fill in ASR and LLM credentials.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Developers can run it from source with:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git submodule update --init --recursive
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; openless-all/app
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm ci
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm run tauri dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The active app lives in &lt;code&gt;openless-all/app/&lt;/code&gt;. The desktop client is built with Tauri 2, a Rust backend, and a React / TypeScript frontend.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;OpenLess can be understood as an open-source AI voice input assistant.&lt;/p&gt;
&lt;p&gt;It does not answer questions, execute tasks, or try to become another AI client. It focuses on one job: &lt;strong&gt;turning what you say into clearer text that is ready to send, ask, or paste into the current input field&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;For people who frequently write prompts, long messages, emails, specs, or code-related descriptions, this is a practical direction. Open source, bring-your-own credentials, local-first storage, and AI-prompt-oriented restructuring are the main reasons OpenLess is worth watching.&lt;/p&gt;</description></item><item><title>Petdex: Find an Animated Companion for Codex</title><link>https://silenceper.com/en/article/2026-05-06-petdex-codex-pets/</link><pubDate>Wed, 06 May 2026 23:20:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-06-petdex-codex-pets/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260506/petdex-home.png" alt="Petdex homepage screenshot" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;One-line Positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Petdex is a public gallery of animated companions for Codex. It lets you browse, preview, collect, and install pixel-style companions so your local Codex experience feels a little more personal and playful.&lt;/p&gt;
&lt;h2&gt;Basic Info&lt;span class="hx-absolute -hx-mt-20" id="basic-info"&gt;&lt;/span&gt;
&lt;a href="#basic-info" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Info&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Website&lt;/td&gt;
&lt;td&gt;&lt;a href="https://petdex.crafter.run/" target="_blank" rel="noopener"&gt;https://petdex.crafter.run/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/crafter-station/petdex" target="_blank" rel="noopener"&gt;https://github.com/crafter-station/petdex&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;Codex-compatible animated pets public gallery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current scale&lt;/td&gt;
&lt;td&gt;870+ pets shown on the homepage, with 600+ GitHub stars&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick install example&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npx petdex install boba&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What Problem Does It Solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Command-line tools like Codex are efficient, but they can also feel a bit cold: text, tasks, logs, and results fill the window, while the environment itself has very little personality.&lt;/p&gt;
&lt;p&gt;Petdex does something simple and charming. It turns animated Codex companions into a public gallery, so users can browse it like an avatar library or sticker collection and pick a pet for their own Codex setup.&lt;/p&gt;
&lt;p&gt;It solves three small but real problems:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Centralized discovery&lt;/strong&gt;: instead of hunting for pet packs across scattered links, you can browse them in one place.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preview before installing&lt;/strong&gt;: each companion has visuals, states, descriptions, tags, and metadata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clear installation path&lt;/strong&gt;: the site gives you a direct install command, making the first try low-friction.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is not a tool for making the model more capable. It is a small layer of personality and ritual around a developer workflow.&lt;/p&gt;
&lt;h2&gt;Core Features&lt;span class="hx-absolute -hx-mt-20" id="core-features"&gt;&lt;/span&gt;
&lt;a href="#core-features" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Browse the Pet Gallery&lt;span class="hx-absolute -hx-mt-20" id="1-browse-the-pet-gallery"&gt;&lt;/span&gt;
&lt;a href="#1-browse-the-pet-gallery" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The homepage presents a large set of companion cards. Each card includes details such as number, name, category, description, tags, author, and install data.&lt;/p&gt;
&lt;p&gt;For example, Boba is a tiny otter sipping bubble tea. Duo, Doraemon, Noir Webling, and other companions are presented in pixel-art or chibi-style forms.&lt;/p&gt;
&lt;p&gt;That makes Petdex feel more like a living pet index than a plain file directory.&lt;/p&gt;
&lt;h3&gt;2. Install with One Command&lt;span class="hx-absolute -hx-mt-20" id="2-install-with-one-command"&gt;&lt;/span&gt;
&lt;a href="#2-install-with-one-command" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The homepage shows a direct install example:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx petdex install boba&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The interaction is straightforward: find a companion you like, copy the command, and install it.&lt;/p&gt;
&lt;h3&gt;3. Featured Collections&lt;span class="hx-absolute -hx-mt-20" id="3-featured-collections"&gt;&lt;/span&gt;
&lt;a href="#3-featured-collections" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Petdex also includes collections, with featured sets on the homepage. Examples include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GRAYCRAFT: an original mech-style character set&lt;/li&gt;
&lt;li&gt;Meme Lords: meme-inspired characters such as Pepe, Wojak, and Doodlebob&lt;/li&gt;
&lt;li&gt;Anime Heroes: anime-inspired companion designs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Collections make browsing more thematic and give creators a way to present related designs together.&lt;/p&gt;
&lt;h3&gt;4. Community Submission&lt;span class="hx-absolute -hx-mt-20" id="4-community-submission"&gt;&lt;/span&gt;
&lt;a href="#4-community-submission" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Petdex includes a Submit entry point. Its README also mentions browser-based validation and submission for community pet packages.&lt;/p&gt;
&lt;p&gt;That means Petdex is not just a read-only catalog. It is designed to grow through community contributions.&lt;/p&gt;
&lt;h3&gt;5. Open-source Maintenance&lt;span class="hx-absolute -hx-mt-20" id="5-open-source-maintenance"&gt;&lt;/span&gt;
&lt;a href="#5-open-source-maintenance" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The Petdex GitHub repository is public. The README describes it as a Codex-compatible animated pets gallery and lists several core capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Browse approved pet packs&lt;/li&gt;
&lt;li&gt;Preview every animation state&lt;/li&gt;
&lt;li&gt;Download individual ZIP packages&lt;/li&gt;
&lt;li&gt;Download the full gallery pack&lt;/li&gt;
&lt;li&gt;Validate and submit community pet packages in the browser&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From the repository structure, pet packages live under &lt;code&gt;public/pets&lt;/code&gt;, while downloadable archives are generated under &lt;code&gt;public/packs&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Who Is It For?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Petdex is a good fit for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;people who use Codex often and want a more personal local environment;&lt;/li&gt;
&lt;li&gt;developers who like pixel art, chibi characters, and desktop-pet-style details;&lt;/li&gt;
&lt;li&gt;users who want their toolchain to feel a little less sterile;&lt;/li&gt;
&lt;li&gt;creators who want to design and share Codex companions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you only care about model quality, task success rate, or engineering automation, Petdex is not essential. But if you spend a lot of time working with Codex in a terminal, it can make that daily experience feel lighter.&lt;/p&gt;
&lt;h2&gt;Quick Start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Open the website:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://petdex.crafter.run/" target="_blank" rel="noopener"&gt;https://petdex.crafter.run/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pick a companion, such as Boba, and run:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx petdex install boba&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can also keep exploring more pets, collections, and creators on the site.&lt;/p&gt;
&lt;p&gt;To learn more about the project itself, visit the GitHub repository:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/crafter-station/petdex" target="_blank" rel="noopener"&gt;https://github.com/crafter-station/petdex&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Petdex is not a large or complicated tool. It is more like a playful entry point in the Codex ecosystem: a public index where companions can be browsed, previewed, installed, and submitted.&lt;/p&gt;
&lt;p&gt;Its value is not in making Codex smarter. Its value is in making the experience of using Codex more personal, lighter, and more like a workspace that the community can decorate together.&lt;/p&gt;</description></item><item><title>Keep Codex Fast: A Safe Maintenance Skill for Keeping Local Codex State Lightweight</title><link>https://silenceper.com/en/article/2026-05-04-keep-codex-fast/</link><pubDate>Mon, 04 May 2026 15:49:45 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-04-keep-codex-fast/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260504/keep-codex-fast-cover.png" alt="Keep Codex Fast" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;One-line Positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Keep Codex Fast is a local-state maintenance skill for heavy Codex users. It inspects first, creates handoff notes, backs up important state, and then safely archives old sessions, logs, and temporary workspaces that can make the local experience feel heavier over time.&lt;/p&gt;
&lt;h2&gt;Basic Info&lt;span class="hx-absolute -hx-mt-20" id="basic-info"&gt;&lt;/span&gt;
&lt;a href="#basic-info" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Info&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/vibeforge1111/keep-codex-fast" target="_blank" rel="noopener"&gt;https://github.com/vibeforge1111/keep-codex-fast&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Author&lt;/td&gt;
&lt;td&gt;vibeforge1111&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main language&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Default branch&lt;/td&gt;
&lt;td&gt;main&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;Codex local-state inspection and safe maintenance skill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current traction&lt;/td&gt;
&lt;td&gt;About 559 stars and 29 forks, checked on 2026-05-04&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What Problem Does It Solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;After using Codex for a long time, many users run into a kind of &amp;ldquo;heaviness&amp;rdquo; that is hard to pin down:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Long conversations keep accumulating.&lt;/li&gt;
&lt;li&gt;Old threads are frequently resumed.&lt;/li&gt;
&lt;li&gt;Multiple repositories are active at the same time.&lt;/li&gt;
&lt;li&gt;Local terminals, dev servers, logs, and workspaces keep piling up.&lt;/li&gt;
&lt;li&gt;You want to clean things up, but worry about deleting useful context.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Keep Codex Fast is not about making the model answer faster. It is about organizing the local runtime state Codex leaves on your machine. Its core principle is intentionally conservative:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Make handoffs first. Archive, don&amp;rsquo;t delete. Apply changes only when you are ready.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In other words: write continuity notes first, archive instead of deleting, and only apply changes after you have confirmed that you are ready.&lt;/p&gt;
&lt;p&gt;This is practical for people who use Codex for real development work. The part that makes cleanup hard is usually not the files themselves. It is the project decisions, debugging paths, failed commands, and next-step plans hidden inside older chats. Keep Codex Fast turns &amp;ldquo;cleanup&amp;rdquo; into a safer workflow: inspect first, preserve recoverable context, then archive.&lt;/p&gt;
&lt;h2&gt;Core Workflow&lt;span class="hx-absolute -hx-mt-20" id="core-workflow"&gt;&lt;/span&gt;
&lt;a href="#core-workflow" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;pre class="mermaid hx-mt-6"&gt;
flowchart TD
A[Codex local state becomes heavy] --&amp;gt; B[Read-only inspection]
B --&amp;gt; C[Generate maintenance report]
C --&amp;gt; D{Any important old sessions?}
D -- Yes --&amp;gt; E[Create handoff notes]
E --&amp;gt; F[Back up important state]
D -- No --&amp;gt; F
F --&amp;gt; G[Archive old sessions and workspaces]
G --&amp;gt; H[Rotate large logs]
H --&amp;gt; I[Prune stale project references]
I --&amp;gt; J[Inspect again and confirm results]
&lt;/pre&gt;&lt;p&gt;The most important part of this flow is the first step: read-only inspection by default. Keep Codex Fast does not immediately move files or delete history. It first reports what local state exists and where the weight is coming from.&lt;/p&gt;
&lt;h3&gt;1. Read-only Report by Default&lt;span class="hx-absolute -hx-mt-20" id="1-read-only-report-by-default"&gt;&lt;/span&gt;
&lt;a href="#1-read-only-report-by-default" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project README makes the default mode clear: it only reports. It does not write files, create backups, move directories, or mutate local Codex state. It helps you see which areas are growing, including active sessions, archived sessions, logs, old workspaces, stale project references, and heavy Node or dev processes.&lt;/p&gt;
&lt;p&gt;That makes the first run low-risk. You can treat it as a health check rather than a cleanup operation.&lt;/p&gt;
&lt;h3&gt;2. Handoffs First&lt;span class="hx-absolute -hx-mt-20" id="2-handoffs-first"&gt;&lt;/span&gt;
&lt;a href="#2-handoffs-first" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Keep Codex Fast puts special emphasis on handoff notes. A handoff is a small continuity document that records:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what you are working on;&lt;/li&gt;
&lt;li&gt;what has already changed;&lt;/li&gt;
&lt;li&gt;which files matter;&lt;/li&gt;
&lt;li&gt;which commands or checks have already been run;&lt;/li&gt;
&lt;li&gt;what errors, warnings, or open problems remain;&lt;/li&gt;
&lt;li&gt;what should happen next.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With that document in place, you can archive a heavy old chat and continue from a fresh Codex session without relying on a growing historical thread.&lt;/p&gt;
&lt;h3&gt;3. Back Up First, Archive Instead of Deleting&lt;span class="hx-absolute -hx-mt-20" id="3-back-up-first-archive-instead-of-deleting"&gt;&lt;/span&gt;
&lt;a href="#3-back-up-first-archive-instead-of-deleting" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;When it actually performs maintenance, Keep Codex Fast still takes the conservative path: back up important state first, then move old sessions, stale workspaces, and large logs into an archive location. It removes items from the hot path instead of permanently deleting them.&lt;/p&gt;
&lt;p&gt;According to the project description, it can handle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;old non-pinned active sessions;&lt;/li&gt;
&lt;li&gt;expired worktrees;&lt;/li&gt;
&lt;li&gt;large &lt;code&gt;logs_2.sqlite*&lt;/code&gt; log files;&lt;/li&gt;
&lt;li&gt;stale or temporary project references in &lt;code&gt;config.toml&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;extended Windows path inconsistencies such as &lt;code&gt;\\?\C:\...&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;reports for heavy Node or dev processes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4. Manual Application, Not Automatic Cleanup&lt;span class="hx-absolute -hx-mt-20" id="4-manual-application-not-automatic-cleanup"&gt;&lt;/span&gt;
&lt;a href="#4-manual-application-not-automatic-cleanup" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project also draws an important boundary: scheduled maintenance is better suited for reminders and reports, not automatic cleanup. The reason is simple. Automation cannot know which old sessions are still important, or whether a handoff is good enough.&lt;/p&gt;
&lt;p&gt;A safer workflow is to inspect regularly, confirm manually, and only apply maintenance after Codex is closed or after explicitly waiting for Codex to exit.&lt;/p&gt;
&lt;h2&gt;Who Is It For?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Keep Codex Fast is most useful for Codex users who:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;use Codex for development every day;&lt;/li&gt;
&lt;li&gt;work across multiple repositories;&lt;/li&gt;
&lt;li&gt;keep long chat histories;&lt;/li&gt;
&lt;li&gt;often resume old threads for debugging or implementation;&lt;/li&gt;
&lt;li&gt;run multiple local terminals, services, or worktrees;&lt;/li&gt;
&lt;li&gt;want to clean local Codex state without losing useful context.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you only open Codex occasionally for small questions, you may not feel the value yet. But once Codex becomes part of your daily development workflow, this kind of local-state maintenance becomes increasingly important.&lt;/p&gt;
&lt;h2&gt;Quick Start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Inside Codex, you can ask it to install the skill directly:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Install the keep-codex-fast skill from https://github.com/vibeforge1111/keep-codex-fast&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After installation, start with a read-only inspection:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Use $keep-codex-fast to inspect my Codex local state and recommend a safe maintenance plan.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If the report shows old sessions worth archiving, create a handoff for any project that may continue:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Create a comprehensive handoff document for this repo/session before I archive Codex history.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Include:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- repo/path and branch
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- current goal
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- what we already completed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- files touched or investigated
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- commands/tests already run
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- known errors, warnings, or failing checks
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- open decisions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- constraints, user preferences, and do-not-touch areas
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- the next 3-7 concrete steps
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Also include a reactivation prompt I can paste into a fresh Codex chat so it can continue from this handoff without relying on the old chat context.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After important sessions have handoff notes, you can consider safe maintenance:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Use $keep-codex-fast to apply safe Codex maintenance.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Before changing anything, confirm that important active repo chats have handoff docs or do not need them.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Then back up first, archive instead of deleting, move stale worktrees, rotate large logs, prune dead config references, and verify the result.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;If Codex is currently running, do not mutate local state. Tell me to close Codex first.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you prefer running the script directly, the project also provides a CLI path:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python scripts/keep_codex_fast.py&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Beyond the read-only report, you can use options such as:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python scripts/keep_codex_fast.py --details
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python scripts/keep_codex_fast.py --backup-only
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python scripts/keep_codex_fast.py --apply --archive-older-than-days &lt;span class="m"&gt;10&lt;/span&gt; --worktree-older-than-days &lt;span class="m"&gt;7&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python scripts/keep_codex_fast.py --apply --wait-for-codex-exit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The value of Keep Codex Fast is not aggressive cleanup. Its value is turning Codex local maintenance into a controlled process: report first, hand off first, back up first, then archive.&lt;/p&gt;
&lt;p&gt;For heavy Codex users, old sessions and local state are both a burden and an asset. The project&amp;rsquo;s approach is practical: extract truly valuable context into handoff notes, move state that does not need to stay on the hot path, and let new Codex sessions start light again.&lt;/p&gt;
&lt;p&gt;If your local Codex experience already feels heavier, Keep Codex Fast is worth running in read-only mode first. Even if you do not apply cleanup immediately, it can show which local state is growing and how to handle it safely later.&lt;/p&gt;</description></item><item><title>HyperFrames: An Open-source Rendering Framework for Generating Video with HTML</title><link>https://silenceper.com/en/article/2026-05-02-hyperframes-html-video-rendering/</link><pubDate>Sat, 02 May 2026 10:39:18 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-02-hyperframes-html-video-rendering/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260502/hyperframes-demo.gif" alt="HyperFrames demo" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;One-line Positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;HyperFrames is HeyGen&amp;rsquo;s open-source HTML video rendering framework. It lets you define video scenes, timelines, and animations the same way you write web pages, then preview them in a browser and render them to MP4.&lt;/p&gt;
&lt;h2&gt;Basic Info&lt;span class="hx-absolute -hx-mt-20" id="basic-info"&gt;&lt;/span&gt;
&lt;a href="#basic-info" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Info&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/heygen-com/hyperframes" target="_blank" rel="noopener"&gt;https://github.com/heygen-com/hyperframes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hyperframes.heygen.com/introduction" target="_blank" rel="noopener"&gt;https://hyperframes.heygen.com/introduction&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NPM package&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hyperframes&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main language&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current version&lt;/td&gt;
&lt;td&gt;0.4.41&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requirements&lt;/td&gt;
&lt;td&gt;Node.js &amp;gt;= 22, FFmpeg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;HTML-native, AI-first, deterministic video rendering&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What Problem Does It Solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;There are usually two common paths for video automation. One is to use traditional editing tools, which are great for manual production but not ideal for batch generation. The other is to use code-based video frameworks, which are automation-friendly but often require developers to enter a specific component system or DSL.&lt;/p&gt;
&lt;p&gt;HyperFrames takes a route that feels closer to normal web development: the video itself is HTML.&lt;/p&gt;
&lt;p&gt;It puts clips, subtitles, images, audio, timing, and track relationships into HTML elements and &lt;code&gt;data-*&lt;/code&gt; attributes. You can organize scenes like a web page, animate them with familiar frontend tools such as CSS, GSAP, Lottie, and Three.js, then render the result to MP4 from the command line.&lt;/p&gt;
&lt;p&gt;This approach is also friendly to AI agents. Large language models are already good at generating HTML, CSS, and simple scripts. HyperFrames adds skills, plugins, and CLI workflows for agents, so an agent can go from &amp;ldquo;describe a video&amp;rdquo; to &amp;ldquo;create the project, preview it, inspect it, and render it.&amp;rdquo;&lt;/p&gt;
&lt;h2&gt;Core Features&lt;span class="hx-absolute -hx-mt-20" id="core-features"&gt;&lt;/span&gt;
&lt;a href="#core-features" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Describe Video Structure with HTML&lt;span class="hx-absolute -hx-mt-20" id="1-describe-video-structure-with-html"&gt;&lt;/span&gt;
&lt;a href="#1-describe-video-structure-with-html" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The core input to HyperFrames is an HTML document. Each element uses attributes such as &lt;code&gt;data-start&lt;/code&gt;, &lt;code&gt;data-duration&lt;/code&gt;, and &lt;code&gt;data-track-index&lt;/code&gt; to describe when it appears, how long it lasts, and where it sits in the timeline.&lt;/p&gt;
&lt;p&gt;A simple video can be composed from ordinary HTML elements such as video clips, titles, images, and background music:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;stage&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-composition-id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;my-video&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1920&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1080&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;video&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;clip-1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-track-index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;intro.mp4&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;muted&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;playsinline&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;video&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;clip&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;4&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-track-index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Welcome to HyperFrames
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;audio&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-track-index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0.5&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;music.wav&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;audio&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The benefit is a low learning curve. You do not need to learn a new video-editing format first, and you do not have to rewrite everything as React components.&lt;/p&gt;
&lt;h3&gt;2. Browser Preview, Local MP4 Rendering&lt;span class="hx-absolute -hx-mt-20" id="2-browser-preview-local-mp4-rendering"&gt;&lt;/span&gt;
&lt;a href="#2-browser-preview-local-mp4-rendering" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;HyperFrames provides a CLI for project initialization, preview, and rendering:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes init my-video
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; my-video
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes preview
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes render&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;During preview, you inspect the composition in a browser. During rendering, headless Chrome captures frames and passes them to FFmpeg to produce the final video. The official docs emphasize deterministic rendering: the same input should produce the same output, which matters for automation pipelines.&lt;/p&gt;
&lt;h3&gt;3. AI-agent-oriented Workflow&lt;span class="hx-absolute -hx-mt-20" id="3-ai-agent-oriented-workflow"&gt;&lt;/span&gt;
&lt;a href="#3-ai-agent-oriented-workflow" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;HyperFrames is not just a CLI. It also provides supporting workflows for AI coding tools. The project README recommends installing skills first:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx skills add heygen-com/hyperframes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;These skills teach agents how to write valid compositions, GSAP timelines, Tailwind v4 browser-runtime styles, and adapters for different animation runtimes.&lt;/p&gt;
&lt;p&gt;The project also provides instructions or plugin entry points for tools such as Claude Code, Cursor, Codex, and Gemini CLI. In other words, &amp;ldquo;AI support&amp;rdquo; is not just a marketing phrase. Agent-friendly initialization, linting, previewing, and rendering are part of the framework&amp;rsquo;s design.&lt;/p&gt;
&lt;h3&gt;4. Support for Multiple Animation and Asset Runtimes&lt;span class="hx-absolute -hx-mt-20" id="4-support-for-multiple-animation-and-asset-runtimes"&gt;&lt;/span&gt;
&lt;a href="#4-support-for-multiple-animation-and-asset-runtimes" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;HyperFrames uses a Frame Adapter pattern to integrate animation runtimes. You can build animations with GSAP, Lottie, CSS animation, Three.js, or the Web Animations API, as long as they can seek frame by frame and participate in deterministic rendering.&lt;/p&gt;
&lt;p&gt;This matters for video automation. Video is not just screen recording. You need a deterministic frame at a specific timestamp. HyperFrames abstracts the relationship between &amp;ldquo;how the page plays&amp;rdquo; and &amp;ldquo;how the renderer captures frames&amp;rdquo;, allowing different animation technologies to enter the same video-generation pipeline.&lt;/p&gt;
&lt;h3&gt;5. Built-in Component Registry and Multiple Packages&lt;span class="hx-absolute -hx-mt-20" id="5-built-in-component-registry-and-multiple-packages"&gt;&lt;/span&gt;
&lt;a href="#5-built-in-component-registry-and-multiple-packages" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project provides 50+ ready-to-use blocks and components, such as social-media overlays, shader transitions, data visualization, and cinematic effects. They can be added through commands:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes add flash-through-white
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes add instagram-follow
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes add data-chart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;From the repository structure, HyperFrames is a monorepo with several key packages:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Package&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;hyperframes&lt;/code&gt; / &lt;code&gt;@hyperframes/cli&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CLI for init, preview, lint, and render&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@hyperframes/core&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Types, parser, generator, linter, runtime, and frame adapters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@hyperframes/engine&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Puppeteer + FFmpeg based page-to-video rendering engine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@hyperframes/producer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full rendering pipeline, including capture, encoding, and audio mixing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@hyperframes/studio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Browser-side composition editor UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@hyperframes/player&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Embeddable &lt;code&gt;&amp;lt;hyperframes-player&amp;gt;&lt;/code&gt; Web Component&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@hyperframes/shader-transitions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WebGL shader transitions for compositions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Official Video Examples&lt;span class="hx-absolute -hx-mt-20" id="official-video-examples"&gt;&lt;/span&gt;
&lt;a href="#official-video-examples" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes init my-video --example warm-grain&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Video link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Warm Grain&lt;/td&gt;
&lt;td&gt;Brand / lifestyle&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/warm-grain.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/warm-grain.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Play Mode&lt;/td&gt;
&lt;td&gt;Social media / product launch&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/play-mode.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/play-mode.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Swiss Grid&lt;/td&gt;
&lt;td&gt;Enterprise / technology / data&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/swiss-grid.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/swiss-grid.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kinetic Type&lt;/td&gt;
&lt;td&gt;Title card / promo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/kinetic-type.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/kinetic-type.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Decision Tree&lt;/td&gt;
&lt;td&gt;Explainer video / tutorial&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/decision-tree.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/decision-tree.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product Promo&lt;/td&gt;
&lt;td&gt;Product showcase&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/product-promo.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/product-promo.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NYT Graph&lt;/td&gt;
&lt;td&gt;Data story / chart video&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/nyt-graph.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/nyt-graph.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vignelli&lt;/td&gt;
&lt;td&gt;Vertical title / announcement&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/vignelli.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/vignelli.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Who Is It For?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;HyperFrames is a good fit for several scenarios:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Frontend developers who want to generate video with code&lt;/strong&gt;&lt;br&gt;
If you already know HTML, CSS, and JavaScript, the mental model is easy to pick up.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Teams that need batch-generated marketing, tutorial, or data videos&lt;/strong&gt;&lt;br&gt;
For example, turning CSV files into animated charts, product docs into short videos, or templates into many personalized variants.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;People building AI-agent content production workflows&lt;/strong&gt;&lt;br&gt;
Its CLI, skills, and plugin design all lean toward automation, making it suitable as an execution layer for agent-generated video.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Teams that need reproducible video generation pipelines&lt;/strong&gt;&lt;br&gt;
Compared with manual editing tools, HyperFrames is easier to run from scripts, CI, Docker, or backend jobs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Quick Start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you want an AI agent to participate in video generation, the official recommendation is to install the skills first:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx skills add heygen-com/hyperframes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Then you can ask the agent to create a video with &lt;code&gt;/hyperframes&lt;/code&gt; context, for example:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Using /hyperframes, create a 10-second product intro with a fade-in title, a background video, and background music.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you want to create a project manually, use the CLI:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes init my-video
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; my-video
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes preview
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes render --output output.mp4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Prepare these locally:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node.js &amp;gt;= 22&lt;/li&gt;
&lt;li&gt;FFmpeg&lt;/li&gt;
&lt;li&gt;an environment that can run Chromium / Puppeteer&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The core value of HyperFrames is not &amp;ldquo;another video editor.&amp;rdquo; It brings video generation back into the web stack: HTML handles structure, CSS and animation libraries handle presentation, the browser handles rendering, and FFmpeg handles output.&lt;/p&gt;
&lt;p&gt;For developers, that means videos can be generated, versioned, and automated like web pages. For AI agents, it provides a target format that is easier to understand and operate.&lt;/p&gt;
&lt;p&gt;If you are working on content automation, batch video generation, data videos, or text-to-renderable-video workflows for AI agents, HyperFrames is an open-source project worth watching.&lt;/p&gt;</description></item></channel></rss>