stemedb/applications/video-renderer/README.md
jordan 157dbbb9eb feat: Complete Aphoria Phase 8-9 + UAT suite (90/90 tests passing)
## Phase 8: Enterprise Extractor Improvements 
- 14 security extractors (TLS, JWT, SQL injection, XSS, etc.)
- 10 framework-specific extractors (Spring, Django, Rails, etc.)
- Config file security detection (YAML, TOML)

## Phase 9: Autonomous Extractor Generation 
- Shadow mode executor with TP/FP tracking
- Graduation pipeline with confidence thresholds
- Auto-rollback on regression detection
- Cross-project pattern syncing

## UAT Suite Complete (14 scripts, 90 tests)
- test-core-detection.sh (6 tests)
- test-declarative-extractors.sh (5 tests)
- test-domain-frameworks.sh (5 tests)
- test-domain-unreal.sh (3 tests)
- test-llm-extraction.sh (6 tests)
- test-eval-harness.sh (5 tests)
- test-cross-language.sh (3 tests)
- test-precommit-performance.sh (4 tests)
- test-output-formats.sh (8 tests)
- test-drift-detection.sh (6 tests)
- test-exit-codes.sh (12 tests)
+ 3 more scripts

## Other Changes
- Updated roadmap to mark Phase 8-9 complete
- Added .gitignore entries for build artifacts
- Updated pre-commit: 800 line limit, exclude tests/data/cmd

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 22:50:55 -07:00

115 lines
2.7 KiB
Markdown

# Video Renderer
Remotion-based video renderer for StemeDB marketing and pitch videos.
## Compositions
| Composition | Purpose | Aspect Ratio |
|-------------|---------|--------------|
| `ExpertConversation` | TikTok/Reels style product discovery videos | 9:16 |
| `PitchVideo` | Pitch presentations with slide → app demo transitions | 16:9 |
## Quick Start
```bash
# Install dependencies
pnpm install
# Open Remotion Studio (preview/edit)
pnpm studio
# Render PitchVideo
pnpm render:pitch
```
## Pitch Video Structure
The pitch video is built from "blocks" - each with its own MP3 audio file:
| Block Type | Visual | Example |
|------------|--------|---------|
| `stat` | Big number with count-up animation | "79% of FDA Warning Letters..." |
| `slide` | Full-screen headline with optional subheadline | "With AI making more decisions..." |
| `problem` | Problem statement with icon | "Sources disagree" |
| `feature` | Feature card with icon and description | "Conflict Visibility" |
| `app-demo` | Dashboard screenshot with animated callouts | Skeptic Query page |
| `closing` | CTA with animated button | "Schedule a Demo" |
## Assets
### Audio Files
Place MP3 voiceover files in `public/audio/`:
```
public/audio/
├── 01-hook-stat.mp3
├── 02-hook-reveal.mp3
├── 03-problem-1.mp3
...
├── 30-close.mp3
└── background-music.mp3 (optional)
```
### Screenshots
Place dashboard screenshots in `public/screenshots/`:
```
public/screenshots/
├── skeptic-query.png
├── weight-distribution.png
├── audit-trail.png
├── sources-page.png
├── impact-preview.png
├── quarantine-source.png
├── time-travel.png
└── circuit-breaker.png
```
Capture at 1920x1080 for 16:9 aspect ratio.
## Scripts
| Script | Description |
|--------|-------------|
| `pnpm studio` | Open Remotion Studio for preview |
| `pnpm render:pitch` | Render full pitch video to `out/stemedb-pitch.mp4` |
| `pnpm render:pitch:preview` | Render lower quality preview (faster) |
| `pnpm render:pitch:api` | Programmatic render with custom script |
## Customizing the Script
Edit `src/data/stemedb-pitch.ts` to modify:
- Block order and content
- Audio file paths and durations
- Callout positions and timing
- Captions and headlines
## Audio Sync
Each block's duration is determined by its `audio.durationMs` value. Update these values after generating audio:
```typescript
{
id: 'hook-stat',
type: 'stat',
audio: {
src: 'audio/01-hook-stat.mp3',
durationMs: 5000, // Update to actual audio duration
},
content: { ... }
}
```
## Development
```bash
# Type check
npx tsc --noEmit
# Preview specific composition
pnpm studio # Then select composition in UI
```