尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Create Hackathon demo videos to present projects
翻譯準備中
正在載入完整 README。
檢視完整 README ↗You built it. We'll make it impossible to ignore.
https://github.com/user-attachments/assets/e88bb7ea-4669-4621-be42-62bd48af867a
DemoForge turns a public GitHub repository into a 20–30 second vertical (9:16) promo video. It launches the app, films the real UI, writes a grounded summary and storyboard, generates cinematic scenes with Higgsfield, and cuts the result together with FFmpeg.
GitHub URL → clone → analyse (Gemini) → install → launch → discover routes → Playwright screenshots
→ summary.md + storyboard.json (validated) → Higgsfield MCP scenes → FFmpeg → final-demo.mp4
Requirements: Node 20+, FFmpeg/ffprobe on PATH, and a Chromium for Playwright (npx playwright install chromium). Docker is optional but recommended.
npm install
cp .env.example .env # add GEMINI_API_KEY and HF_CREDENTIALS (Higgsfield KEY_ID:KEY_SECRET)
npm run dev:all # web on :3000 + generation worker
Open http://localhost:3000, paste a repo URL and press Generate Demo. The worker can also run on its own (npm run dev + npm run worker).
On Windows, npm run service:install builds the app and registers a background service (a per-user Scheduled Task, started at logon) running the production web server and worker (npm run start:all), logging to outputs/service.log. Manage it with powershell -File scripts/service.ps1 status|stop|start|restart; remove it with npm run service:uninstall. Re-run service:install after pulling changes so it rebuilds.
To run one generation without the web UI:
npm run once -- https://github.com/owner/repo
npm run once -- --local tests/fixtures/launchpad # bundled fixture app, no cloning
| Variable | Purpose |
|---|---|
GEMINI_API_KEY | Gemini repository analysis, summary.md and storyboard. Without it, deterministic templates are used and labelled as such. |
GEMINI_MODEL | Defaults to gemini-3.5-flash. |
GEMINI_FALLBACK_MODEL | Optional. Retried when the main model is rate-limited or returns a server error, e.g. gemini-3.5-flash-lite. |
HF_CREDENTIALS | Recommended. Higgsfield developer API key pair from console.higgsfield.ai, as KEY_ID:KEY_SECRET. When set, it is used instead of MCP. Check it for free with npx tsx scripts/check-higgsfield.ts. |
HIGGSFIELD_MODEL | Text-to-video model path for the developer API. Default kling-video/v3.0/std/text-to-video; Seedance 2.5 is bytedance/seedance-2.5/text-to-video. |
HIGGSFIELD_API_BASE | Defaults to https://api.higgsfield.ai. |
HIGGSFIELD_END_FRAME_PARAM | Request field for the last frame when Blend screenshots is on (each animated screenshot morphs into the next). Default end_image_url. If the model rejects it, the clip is re-requested without a blend. |
HIGGSFIELD_MCP_URL | MCP fallback only. Defaults to https://mcp.higgsfield.ai/mcp. |
HIGGSFIELD_API_KEY | MCP fallback only: bearer token for the MCP server (the hosted server expects OAuth, so prefer HF_CREDENTIALS). Can also be set from /settings (stored server-side in data/secrets/). |
HIGGSFIELD_VIDEO_TOOL / HIGGSFIELD_STATUS_TOOL | Pin tool names if auto-discovery picks the wrong ones. |
HIGGSFIELD_MAX_SCENES | Cap Higgsfield calls per video (credits). Default 2. |
GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRET | Optional. GitHub OAuth App enabling Sign in with GitHub for private repos. Create it at github.com/settings/developers with callback URL http://localhost:3000/api/auth/github/callback. The token is stored in and only used to clone and read repo metadata. |
Secrets are only read server-side. They are never sent to the browser, never placed in Gemini prompts, and never passed to repository processes.
DemoForge ships an MCP server, so Claude Code, Claude Desktop or any MCP client can make videos for you: "make a 16:9 demo of github.com/owner/repo with a hype narrator".
It talks to the running app (DEMOFORGE_URL, default http://localhost:3000), so keep the service or npm run dev:all running.
Claude Code picks it up from .mcp.json when you open this project. For other clients, run it over stdio:
{ "mcpServers": { "demoforge": { "command": "node", "args": ["<repo>/node_modules/tsx/dist/cli.mjs", "<repo>/mcp/demoforge-server.ts"] } } }
| Tool | What it does |
|---|---|
generate_demo | Queue a video: repo URL plus the same options as the home page (aspect, length, scenes, camera, filter, blend, instructions, voice, tone). |
wait_for_job | Wait (up to 10 min per call) and return stages, notices, scenes and the video URL + local path. |
get_job / list_jobs | Inspect jobs. |
edit_scene | Change a scene's caption, length, transition, motion prompt or narration (optionally re-animate it), then re-render. |
regenerate_job / delete_job | Start over with the same settings / remove a job and its files. |
demoforge_status | Worker and integration health. |
src/
app/ Next.js UI + route handlers
api/generate POST: validate URL, enqueue job
api/jobs/[id] GET job state (polled by the UI)
api/jobs/[id]/files Serves video/screenshots/summary (Range support, traversal-safe)
api/jobs/[id]/scenes PATCH: edit a scene → re-render (optionally re-generate with Higgsfield)
api/settings/… Higgsfield token (server-side), connection test
lib/
github/ URL parsing/validation, shallow clone (symlinks disabled), repo metadata
agent/ heuristics.ts (static analysis: framework, PM, scripts, routes, env)
gemini.ts (Gemini enrichment with structured outputs; repo content treated as untrusted)
sandbox/ install + start (scrubbed env, timeouts, process-group kill) or Docker
browser/ Playwright route discovery + desktop/mobile screenshots
storyboard/ summary + storyboard (Gemini or template), Zod-validated and normalised
higgsfield/ MCP client: runtime tool discovery, schema-driven args, job polling, download
video/ FFmpeg: per-scene render, xfade transitions, typography, music, poster
storage/ file-based job store + worker heartbeat
pipeline.ts stage orchestration
workers/generation-worker.ts polls the job store and runs one job at a time
Jobs live in outputs/jobs/<id>/ (job.json, project-analysis.json, summary.md, storyboard.json, screenshots/, scenes/, final-demo.mp4, logs/). The UI polls real stage states (pending/running/completed/failed/skipped) and never shows invented percentages.
package.json. Commands are argv arrays, never shell strings.Developer API (default when HF_CREDENTIALS is set). src/lib/higgsfield/api.ts sends each generated scene to POST {HIGGSFIELD_API_BASE}/{HIGGSFIELD_MODEL} with Authorization: Key KEY_ID:KEY_SECRET, polls /requests/{id}/status and downloads video.url. Clips are requested at 4–15 s (the models' minimum) and trimmed to the scene. The key is never sent to the download host or to repo code.
MCP fallback. Used only when HF_CREDENTIALS is empty.
Higgsfield's hosted MCP tool catalogue varies, so DemoForge does not hard-code tool names. On each run it lists the server's tools and:
HIGGSFIELD_VIDEO_TOOL) and a job-status tool (or HIGGSFIELD_STATUS_TOOL).9:16 aspect, nearest allowed duration, defaults for other required fields).Settings → Test connection shows which tools were discovered. The official hosted server documents OAuth sign-in. DemoForge sends the configured token as Authorization: Bearer …. Whether a static token is accepted depends on your Higgsfield account and server, so check it with Test connection.
Repository code is untrusted. Current measures:
core.symlinks=false, no hooks, size limit.HOME, timeouts, and process-group cleanup.DEMOFORGE_SANDBOX=docker runs install and start in a container with memory, CPU and pid limits and no-new-privileges, publishing only to 127.0.0.1.This is a hackathon prototype, not a production-grade sandbox. Local mode is not a security boundary, so use docker mode (ideally on a dedicated VM with restricted egress) for repositories you don't trust.
npm run typecheck && npm run lint && npm test
npm run once -- --local tests/fixtures/launchpad
npm test covers URL validation, path traversal, storyboard validation and normalisation, README parsing, Higgsfield tool selection and argument building. It also runs integration tests of both Higgsfield clients (developer API and MCP) against local mock servers (test-only) covering submit → poll → download.
summary.md, validated storyboard.json, FFmpeg assembly with transitions, typography and musicFonts: Inter (SIL OFL 1.1) and JetBrains Mono (Apache 2.0), bundled in assets/fonts/.
data/secrets/github.jsonELEVENLABS_API_KEY | Optional. Enables the Voiceover toggle: one narration line per scene via ElevenLabs text-to-speech, mixed over the music. ELEVENLABS_VOICE_ID (default George, JBFqnCBsd6RMkjVDRZzb) and ELEVENLABS_MODEL (default eleven_multilingual_v2) are optional. |
DEMOFORGE_SANDBOX | local (default) or docker. |
DEMOFORGE_DOCKER_IMAGE | Image for docker mode. Default node:22-bookworm. |
MUSIC_PATH | Optional royalty-free track. Otherwise a procedural ambient bed is synthesised. |
WORKSPACE_ROOT, OUTPUT_ROOT, DATA_ROOT, FFMPEG_PATH, FFPROBE_PATH | Paths. |