尚未偵測到更新。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.