尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證AI CMO for solo founders — plans the week, drafts posts, clips your videos. You approve everything that goes out.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗An AI CMO for solo founders. Paste your website, and OpenCMO learns your business, plans the week, and drafts the work across three departments — you approve everything that goes out.
OpenCMO drafts and assists; it never posts, likes, follows or comments on its own.
The hosted version runs at opencmo.io. This repository is the full source of the web app, the editor and the video engine, released under the GNU AGPL-3.0.
Browser ──► Next.js app + /api/v1 (Vercel) ──► Supabase (Auth · Postgres/RLS · Storage · Realtime)
▲
Modal worker (Python + ffmpeg + Node exporter) ── claims queued tasks
Your Claude ──► MCP server (Modal) ──────────────────┘ same tools as the in-app Assistant
Every read runs under Row Level Security; every write goes through a Postgres RPC that checks ownership. The database schema is the contract between the web app, the worker and the MCP server.
opencmo/
├── apps/
│ └── web/ Next.js app: landing, workspace, AI CMO, clip editor, /api/v1
│ ├── app/ routes (App Router); app/api/v1 = the public API
│ ├── components/ UI, including the editor (components/editor)
│ ├── lib/
│ │ ├── agent/ the editor Assistant — its tools are editor-core operations
│ │ ├── cmo/ the AI CMO: onboarding, jobs, schedules and its agents
│ │ ├── generate/ AI image/video/voice generation, with prompt moderation
│ │ ├── mcp/ MCP auth: API keys → short-lived user tokens under RLS
│ │ └── supabase/ Supabase clients (admin.ts = service role, server-only)
│ ├── e2e/ Playwright end-to-end tests
│ └── e2e-compat/ Safari/Firefox compatibility tests
├── packages/
│ ├── engine/ Python engine: an upload → editor master + transcript, exports,
│ │ media generation, all via streaming ffmpeg;
│ │ Modal worker in production (modal_app.py)
│ ├── contracts/ JSON contracts shared by Python and TypeScript
│ │ (task kinds, AI model catalog, document schemas)
│ ├── clip-doc/ the clip document: zod schema, validation, migrations
│ ├── editor-core/ operations on the document — the only write path
│ │ (editor buttons, the API and the Assistant all use it)
│ ├── clip-render/ Canvas 2D renderer, shared by the browser preview and the exporter
│ ├── clip-export/ server export: document → MP4
│ ├── clip-motion/ explainer animations (Remotion), rendered on the worker
│ ├── clip-icons/ animated icon library
│ ├── clip-assets/ the editor media library: manifest, folders, rename/move/delete
│ ├── clip-media/ bundled fonts
│ ├── editor-parity/ golden-image tests that keep the renderer pixel-stable
│ ├── skills/ style skills: markdown + frontmatter → a generated index
│ └── mcp-server/ MCP server (Streamable HTTP, stateless) so your own Claude
│ can drive OpenCMO
├── supabase/
│ ├── migrations/ schema history, applied in order
│ ├── tests/ pgTAP tests, one per migration
│ ├── schema/current.sql generated snapshot of the current schema (read-only)
│ └── config.toml local stack config
├── scripts/ dev stack (dev.mjs), schema dump, document checks
└── docs/ design notes, build plans and research reports
Read ARCHITECTURE.md for the decisions behind this shape, including the hard budget every change must respect: peak RAM per job < 2 GB.
Requirements: Node 22+, Docker (for the local Supabase stack), the
Supabase CLI, uv,
and FFmpeg/ffprobe.
npm ci
uv venv --python 3.12 packages/engine/.venv312
uv pip install --python packages/engine/.venv312/bin/python -e 'packages/engine[worker,dev,face]'
cp apps/web/.env.example apps/web/.env.local # fill in what you need; most keys are optional
npm run dev # web on http://127.0.0.1:3000
npm run dev checks Docker, starts the local Supabase stack if needed, loads its keys, and
runs Next.js and the worker together. Without the worker, jobs sit in queued with no error.
Sign-in is Google OAuth. For local sign-in through the UI, create an OAuth client and set
SUPABASE_AUTH_GOOGLE_CLIENT_ID / SUPABASE_AUTH_GOOGLE_SECRET (see supabase/config.toml);
the test suites sign in with a password through the Auth API and need no Google setup.
AI features need three provider keys: Anthropic (agents and moderation),
fal (images, video, voice and sound, plus image safety checks) and ElevenLabs (transcripts). With OPENCMO_AGENT_FAKE=1 and OPENCMO_AI_FAKE=1 the app runs
with deterministic fake providers, which is what the tests use.
npm run db:reset && npm run db:test # migrations + pgTAP
cd packages/engine && .venv312/bin/python -m pytest -q && .venv312/bin/python -m ruff check .
cd ../.. && npm run typecheck && npm run build
npm run test:editor-core && npm run test:clip-doc && npm run test:clip-render
cd apps/web && npm run check:contracts && npm run test:e2e
See CONTRIBUTING.md for the full list and what each check covers.
Issues and pull requests are welcome — start with CONTRIBUTING.md and the Code of Conduct. Report security issues privately as described in SECURITY.md.
OpenCMO is licensed under the GNU Affero General Public License v3.0 only (LICENSE). If you run a modified version as a network service, the AGPL requires you to offer its source code to that service's users.
Bundled fonts, icons, emoji and animations keep their own licenses — see THIRD_PARTY_NOTICES.md.
The OpenCMO name and logo are trademarks of the OpenCMO project and are not licensed under the AGPL. Forks must use a different name and logo.