個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證開源 AI 驅動的影片序列平台,使用 TanStack Start 建置
AI 翻譯
Open-source AI-powered video sequence platform built with TanStack Start
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Transform scripts into styled video productions using AI.
OpenStory takes a script and produces a sequence of AI-generated frames — images, motion video, audio — with consistent style across every scene. Teams collaborate on shared libraries of characters, locations, and visual styles, and the platform handles the heavy lifting of prompt engineering, generation, and compositing.檢視完整 README ↗OpenStory takes a script and produces a sequence of AI-generated frames — images, motion video, audio — with consistent style across every scene. Teams collaborate on shared libraries of characters, locations, and visual styles, and the platform handles the heavy lifting of prompt engineering, generation, and compositing.
| Category | Tools |
|---|---|
| Runtime | Bun |
| Framework | TanStack Start + TanStack Router + Vite |
| Database | Drizzle ORM + Cloudflare D1 (SQLite) |
| AI | TanStack AI + Fal.ai + OpenRouter + PostHog (LLM observability) |
| Workflows | Cloudflare Workflows (durable execution) |
| Realtime | Cloudflare Durable Objects (SSE progress updates) |
| Storage | Cloudflare R2 (S3-compatible) |
| Auth | Better Auth |
| Styling | Tailwind v4 + shadcn/ui |
| Quality | oxlint + oxfmt + tsgo + Lefthook + Knip |
| Testing | Vitest + Playwright |
| Deployment | Cloudflare Workers |
See AGENTS.md for full architecture documentation, server handler patterns, workflow patterns, and React conventions.
That's it. No Docker, no external database, no Cloudflare account — local dev runs the full stack (D1, R2, Workflows, Durable Objects, email) inside Workerd via Miniflare.
git clone https://github.com/openstory-so/openstory.git
cd openstory
bun install
bun dev
Open http://localhost:3000.
bun dev does everything: it generates .env.local (with auth/encryption secrets) on first run, migrates and seeds the local database, and starts the dev server.
To use AI generation features you need two API keys — run bun setup to add them interactively, or paste them into .env.local:
FAL_KEY — fal.ai for image, video & audio generationOPENROUTER_KEY — OpenRouter for LLM script analysisSee .env.example for all optional configuration (Google OAuth, Stripe, PostHog, remote R2).
| Command | Description |
|---|---|
bun dev | Bootstrap env, migrate + seed DB, start dev server |
bun setup | Interactive setup — add AI keys (--prod for deployments) |
bun tunnel:provision | Optional: 10 random public HTTPS names for ports 3000–3009 |
bun tunnel | Print this laptop's hostname map |
bun storybook | Start Storybook on port 6006 |
| Command | Description |
|---|---|
bun lint | Lint with oxlint (type-aware) |
bun lint:fix | Lint and auto-fix |
bun format | Format with oxfmt |
bun format:check | Check formatting without writing |
bun typecheck | Type-check with tsgo |
bun dead-code | Find unused exports with Knip |
| Command | Description |
|---|---|
bun run test | Run unit tests (Vitest) |
bun test:watch | Run tests in watch mode |
bun test:coverage | Run tests with coverage |
bun test:e2e | Run Playwright end-to-end tests |
bun test:e2e:ui | Run Playwright with interactive UI |
| Command | Description |
|---|---|
bun db:generate | Generate migrations from schema changes |
bun db:migrate:local | Apply migrations (also runs as part of bun dev) |
bun db:studio:local | Open Drizzle Studio against the local database |
| Command | Description |
|---|---|
bun run build | Build for production (note: not bun build) |
bun setup --prod | Interactive production setup + deploy |
bun cf:deploy:prd | Manual production deploy (build → migrate → deploy) |
The theatre player lives in packages/stitch and publishes as @openstory/stitch.
Run a local cut with npx. It prints an http://127.0.0.1 URL, opens that page, and runs until Ctrl+C.
npx @openstory/stitch --music score.mp3 shot.mp4
Install the OpenStory plugin for the agent skills. That install includes create-style, create-sequence, and stitch (/stitch). npx @openstory/stitch skill copies /stitch and stitch-player, the contract for embedding the React player. The plugin does not include stitch-player.
npx skills add openstory-so/skills
Grok, Claude Code, Codex, and the ChatGPT desktop app can add openstory-so/skills as a marketplace and install the OpenStory plugin. The per-client commands are in that repo.
The flags and the player API are in packages/stitch/README.md. That page is also in 中文, français, and español.
src/
components/ # React UI components (shadcn/ui based)
functions/ # Server functions (all business logic endpoints)
lib/ # Shared utilities, services, types
ai/ # AI model configs and prompt schemas
db/ # Database schema and clients (Drizzle)
services/ # Core business services
workflows/ # Cloudflare Workflows durable definitions
routes/ # TanStack Router file-based routes
api/ # Webhooks: workflows and auth only
_app/ # App shell (anonymous-browsable; actions gated behind login)
e2e/ # Playwright end-to-end tests
packages/stitch/ # Theatre player, the stitch command, and the stitch skills
scripts/ # CLI utilities and setup
See AGENTS.md for detailed architecture, data model, server handler patterns, and code conventions.
Cloudflare Workers — edge runtime, R2 storage, D1 database, global CDN.
The deploy button clones the repo into your Cloudflare account, provisions the resources declared in wrangler.jsonc, and sets up CI. For a guided setup from your own clone, run bun setup --prod.
CI/CD: Cloudflare Workers Builds auto-deploys on push to main — the same mechanism deploy-button clones use. Pull requests get GitHub Actions preview deployments with dedicated D1 databases.
See the Platform & Deployment section in AGENTS.md for environment variable configuration and platform detection.
We'd love your help building OpenStory! Whether it's fixing a bug, adding a feature, improving docs, or just sharing ideas — all contributions are welcome. Check out the issues labeled good first issue for a great place to start.
Read CONTRIBUTING.md for setup instructions, branch naming, code quality, and the pull request process.