尚未检测到更新。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.