How to Use the Web Video Presentation Skill in Garden-Skills
The web video presentation skill transforms written articles or narration scripts into a click-driven, cinematic 1920×1080 web presentation that can be recorded as high-quality video using a Vite + React + TypeScript stack.
This skill, maintained in the ConardLi/garden-skills repository, provides a complete framework for converting text into step-by-step visual presentations. Each narration beat becomes a full-screen "step" within a themed, scalable stage that hides UI chrome during recording to ensure clean output.
Core Architecture
The skill's engine is composed of several tightly coupled TypeScript components that manage the presentation lifecycle:
Stage Rendering and Scaling
The Stage.tsx component (templates/src/components/Stage.tsx) enforces a 16:9 aspect ratio and scales the canvas to fit the viewport. All chapter content renders inside this container, ensuring consistent 1920×1080 output regardless of screen size.
Step Navigation State
Navigation is handled by the useStepper.ts hook (templates/src/hooks/useStepper.ts). It manages the (chapter, step) cursor, persists the current position in localStorage, and exposes next() and prev() helpers that advance the presentation on click or keyboard events.
Audio Synchronization
The useAudioPlayer.ts hook (templates/src/hooks/useAudioPlayer.ts) loads per-step audio files and synchronizes playback with visual transitions. It integrates with the TTS provider contract to play synthesized narration when available.
Project Scaffolding
The scaffold.sh script (scripts/scaffold.sh) automates project creation. It copies token files, creates the presentation/ directory structure, installs dependencies, and applies a selected theme from the 23 available options in the themes/ folder.
Theme System
Each theme resides in themes/*/ and supplies a tokens.css and theme.json file. These define semantic design tokens (colors, fonts, grid systems) that the presentation reads at runtime, allowing complete visual overhauls by swapping a single folder.
Step-by-Step Workflow
According to the source code in SKILL.md and README.md, the skill enforces a method-driven workflow:
-
Identify input – Convert your article into a structured narration script.
-
Generate an outline – Create
outline.mdand obtain agent approval before proceeding. -
Scaffold the project – Run the scaffold script with your chosen theme to generate the Vite project structure.
-
Synthesize audio (optional) – Generate narration audio using the TTS provider scripts.
-
Record the presentation – Run the development server and record; UI controls (progress bars, auto-toggle) hide automatically unless hovered.
Setting Up a New Presentation
To initialize a presentation, use the scaffold script from the repository root:
# Scaffold a new presentation with the paper-press theme
bash skills/web-video-presentation/scripts/scaffold.sh ./presentation --theme=paper-press
List all 23 built-in themes before deciding:
bash skills/web-video-presentation/scripts/scaffold.sh --list-themes
After scaffolding, install dependencies and start the development server:
cd presentation
npm install
npm run dev
The application boots from src/main.tsx, which registers the global step hook and loads the chapter registry from src/registry/chapters.ts.
Building Chapter Components
Chapters export React components that consume the stepper hook to advance the presentation. Here is the pattern used in src/chapters/01-example/Example.tsx:
import { useStepper } from '../hooks/useStepper';
export const Example = () => {
const { next } = useStepper();
return (
<div onClick={next} className="stage-step">
<h1>Hello, world!</h1>
{/* Additional visual content for this narration beat */}
</div>
);
};
Register each chapter in src/registry/chapters.ts to include it in the presentation flow.
Adding Narration Audio
The skill supports multiple TTS backends through a provider contract located in templates/scripts/tts-providers/. Supported providers include MiniMax, OpenAI, and ElevenLabs.
To synthesize audio for all steps:
# Requires API key configuration
bash skills/web-video-presentation/templates/scripts/synthesize-audio.sh
The useAudioPlayer hook automatically detects and plays the generated audio files when advancing steps, maintaining sync between narration and visuals.
Summary
- The web video presentation skill uses a Vite + React + TypeScript stack to generate 1920×1080 cinematic presentations.
- Navigation is managed through the
useStepperhook, which persists state and providesnext()/prev()methods. - The
Stage.tsxcomponent enforces 16:9 scaling while hiding UI elements during recording. - Projects are initialized via
scaffold.sh, which supports 23 built-in themes defined bytokens.cssandtheme.json. - Audio narration integrates via the
useAudioPlayerhook and TTS provider scripts intemplates/scripts/tts-providers/.
Frequently Asked Questions
What output resolution does the web video presentation skill support?
The skill outputs a fixed 1920×1080 (16:9) resolution. The Stage.tsx component scales the canvas to fit the viewport while maintaining this aspect ratio, ensuring consistent HD video output regardless of the recording device's screen size.
How do I navigate between steps during a presentation?
Navigation is handled by the useStepper hook in templates/src/hooks/useStepper.ts. It exposes next() and prev() functions that advance or retreat through the (chapter, step) cursor. These can be triggered by click events, keyboard input, or programmatically within chapter components.
Can I create custom themes for my presentations?
Yes. The theme system in themes/*/ allows custom visual designs by creating a new folder containing a tokens.css file for CSS variables and a theme.json for semantic tokens. The presentation reads these at runtime, enabling complete visual overhauls without modifying component code.
How do I add synthesized voice narration to steps?
Use the TTS provider scripts located in templates/scripts/tts-providers/. Run synthesize-audio.sh after configuring your API keys for MiniMax, OpenAI, or ElevenLabs. The useAudioPlayer.ts hook automatically loads and plays the generated audio files corresponding to each step index.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →