塑造个人品牌,发现细分市场,构建可持续盈利的产品
I share how to build a personal brand, discover niche markets, and create sustainably profitable products. I also share everything about AI.
AI translation
You built it. We'll make it impossible to ignore.
MarketingTypeScript · CSSGitHub @Shiro8223OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Create Hackathon demo videos to present projects
Translation pending
Loading the full README.
Read the full 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. |