尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Two deliverables in one Next.js app:
| Route | What it is |
|---|---|
/ | Short overview with links to both parts |
/implementation | Part A — faithful, responsive build of the supplied image-generator mockup |
/workspace | Part B — Fomi Studio, an original creative-continuity workspace built around Creative Branching |
Both run against a mocked backend. No real AI generation takes place; results come from a local image library.
Requires Node 20+ (developed on Node 22).
npm install
npm run dev # http://localhost:3000
| Command | Purpose |
|---|---|
npm run dev | Development server |
npm run build | Production build |
npm run start | Serve the production build |
npm run lint | ESLint (Next.js core-web-vitals rules) |
npm test | Playwright end-to-end + accessibility tests (run npm run build first) |
Tests use the locally installed Google Chrome. To use Playwright's bundled Chromium instead: npx playwright install chromium and run with PW_CHANNEL="".
POST /api/generate// Part A
{ "collection": "studio", "prompt": "snowy mountain at sunset", "mode": "image",
"model": "fomi-portrait", "aspectRatio": "2:3", "count": 4,
"style": "cinematic", "guidance": 7, "seed": null, "negativePrompt": "" }
// Part B — a branch of an existing image
{ "collection": "workspace", "prompt": "…", "model": "studio-v3", "aspectRatio": "4:5", "count": 4,
"parentGenerationId": "g2", "parentImageId": "g2_0",
"parentLook": { "base": "street", "grade": "golden", "framing": "standard" },
"variation": { "intent": "lighting", "note": "colder" } }
{ generationId, status: "completed", prompt, model, aspectRatio, seed, parentGenerationId, createdAt, images: [{ id, url, width, height, alt, … }] }error.fields maps field → message)error.retryable: true)Behaviour is deterministic: the same prompt and seed return the same images, ranked by prompt keywords. A short simulated delay makes loading states visible. Add "scenario": "error" | "empty" to exercise failure paths — both UIs expose this under Support → Demo controls (Part A) and Settings → Demo controls (Part B).
GET /api/projects/:projectIdReturns the seeded Part B project (atlas-fw26) after a short delay; unknown ids return 404.
Part A: type a prompt and press Generate (or Ctrl+Enter). Image/Video switch modes; the header icons filter the feed (Home, Images, Videos, Saved); history thumbnails jump to their generation; hover a result to save or download; click to preview (←/→, Esc). The moon toggles a dark theme.
Part B: the project opens on a branch (G4). Hover an image → Branch → choose Lighting, Framing, Subject (runs immediately) or Remix (edit the prompt in the composer). The Branches panel shows lineage — click a row or use the arrow keys. Click images to select them (across branches) → Compare. Star to keep; Kept assets in the rail collects them. Shortcuts: [ ] previous/next run, Alt+↑ parent, C compare, Esc clear selection.
State is stored in localStorage; Reset lives in each app's demo controls.
See docs/ARCHITECTURE.md for structure, state management, the mock generators, accessibility, performance and responsive strategy.
Other docs:
localStorage.next build) and output./, /implementation and /workspace on the production URL.The mock API runs as Vercel Functions; its simulated delays (≤3 s) are well within default limits.