Openframe is an AI-powered desktop studio for turning scripts into characters, scenes, storyboards, shots, and production-ready videos.
- End-to-end workflow: project -> script -> character/prop/scene -> shots -> production/export
- Script editor with AI toolkit:
- autocomplete
- generate script from idea
- adapt script from novel excerpt
- scene expand / rewrite / dialogue polish / pacing / continuity check
- Character relation graph with script-driven extraction and optimization
- Language-aware extraction for core entities (character / prop / scene / shot)
- Scene image generation constrained to environment-only output (no people)
- Shot generation supports target shot count input (higher count -> richer, smoother output)
- Thumbnail full-image preview in character / prop / scene / shot panels
- First-launch Driver.js style onboarding tour
- Project & Episode Management
- Create and organize projects and episodes
- Open dedicated studio window for episode production
- Script Workspace
- Rich editor powered by TipTap
- AI tools available directly in editor toolbar
- Real-time content save and generation workflow integration
- Character / Prop / Scene Libraries
- Script-based extraction and regeneration
- AI-assisted enhancement for cards
- Turnaround-style image generation
- Full-image preview by clicking thumbnails
- Character Relations
- Build relation topology from project scripts
- Optimize relation graph based on current script context
- Shot Design & Production
- Generate shots from script with scene/character/prop references
- Control target shot count before generation
- Shot image generation and production frames/video workflow
- Export merged video, FCPXML timeline, and EDL
- Data & Settings
- Configurable AI providers/models (including custom providers)
- Storage usage panel and cleanup for unused media
- Language/theme and local data directory settings
- Monorepo:
pnpm workspace - Desktop app:
Electron + React + Vite + TypeScript - UI:
Tailwind CSS + daisyUI + lucide-react - Editor:
TipTap - Data layer:
SQLite + better-sqlite3 + Drizzle schema - Reactive local state:
TanStack DB - AI integration:
Vercel AI SDK + custom REST providers - Vector search:
sqlite-vec
openframe/
apps/
desktop/ # main Electron app
electron/ # main process, IPC handlers
src/ # renderer process (React)
packages/
db/ # shared DB schema
providers/ # AI provider/model definitions
- Node.js (LTS recommended)
pnpm@9.12.2- Desktop OS: macOS / Windows / Linux
pnpm install
pnpm devapps/desktop runs electron-rebuild for better-sqlite3 during postinstall.
# root
pnpm dev
pnpm build
pnpm lint
pnpm test
pnpm db:generate
pnpm db:migrate
# app type check
pnpm -C apps/desktop exec tsc --noEmit
# single file lint
pnpm -C apps/desktop exec eslint src/components/ScriptEditor.tsx- Renderer must not access DB/filesystem directly.
- Persistence and local file operations must go through
window.*APIfromelectron/preload.ts. - For any new entity, update this chain together:
packages/db/schema.tsapps/desktop/electron/handlers/*.tsapps/desktop/electron/preload.tsapps/desktop/electron/electron-env.d.tsapps/desktop/src/db/*_collection.ts
- Handler SQL uses raw
better-sqlite3. - Do not manually edit
apps/desktop/src/routeTree.gen.ts.
- Runtime DB path:
app.getPath('userData')/app.db - Migration folder:
apps/desktop/electron/migrations/
After schema changes:
pnpm -C apps/desktop db:generateKeep locale files aligned:
apps/desktop/src/i18n/locales/en.tsapps/desktop/src/i18n/locales/zh.ts
No default text model configured: configure and enable a text model in Settings.- Native dependency build issues: rerun
pnpm installand verifyelectron-rebuildsuccess. - AI or media export issues: verify provider config, model availability, and local media toolchain.
- Push a tag matching
v*(for example,v0.7.0) to trigger release workflow. - GitHub Actions builds desktop packages for macOS / Windows / Linux and uploads artifacts to GitHub Release.
- Release notes are auto-generated (
generate_release_notesin.github/workflows/release-build.yml).