Doop
Doop: 오픈소스 멀티플레이어 디자인 캔버스 및 AI 에이전트용 MCP
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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.