[PR #28] [MERGED] Import Open Unboxing and Open Product Swap studios #26

Closed
opened 2026-11-04 22:29:10 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/Comfy-Org/jpcosta-comfy-apps/pull/28
Author: @jpcosta-comfy
Created: 11/4/2026
Status: ✅ Merged
Merged: 11/4/2026
Merged by: @jpcosta-comfy

Base: main ← Head: cursor/migrate-open-apps-51e4


📝 Commits (3)

  • 6fad71a Import the Open Unboxing and Open Product Swap studios.
  • b6ecd42 Drop generated Python bytecode from the unboxing scripts.
  • 174772a Ignore Python bytecode at the repo root.

📊 Changes

160 files changed (+16087 additions, -6 deletions)

View changed files

📝 .gitignore (+2 -0)
📝 README.md (+12 -2)
➕ apps/open-product-swap/.env.example (+9 -0)
➕ apps/open-product-swap/.gitignore (+45 -0)
➕ apps/open-product-swap/LICENSE (+21 -0)
➕ apps/open-product-swap/README.md (+116 -0)
➕ apps/open-product-swap/REPORT.md (+73 -0)
➕ apps/open-product-swap/app/api/health/route.ts (+28 -0)
➕ apps/open-product-swap/app/api/jobs/[id]/file/route.ts (+33 -0)
➕ apps/open-product-swap/app/api/jobs/[id]/route.ts (+24 -0)
➕ apps/open-product-swap/app/api/jobs/route.ts (+135 -0)
➕ apps/open-product-swap/app/favicon.ico (+0 -0)
➕ apps/open-product-swap/app/globals.css (+76 -0)
➕ apps/open-product-swap/app/icon.svg (+5 -0)
➕ apps/open-product-swap/app/layout.tsx (+33 -0)
➕ apps/open-product-swap/app/page.tsx (+450 -0)
➕ apps/open-product-swap/build/comfy-build.yaml (+30 -0)
➕ apps/open-product-swap/components/DropZone.tsx (+88 -0)
➕ apps/open-product-swap/demo/README.md (+50 -0)
➕ apps/open-product-swap/demo/input/sku_haven_ginger.jpg (+0 -0)

...and 80 more files

📄 Description

Both apps were already carousel cards that submit workflows/<app>/workflow_api.json. This brings in the rest of open-unboxing and open-product-swap without replacing those runners or deleting the old repos.

What moved where

Upstream In this repo
Next.js app (src/ or app/, lib/, components/) apps/open-unboxing/, apps/open-product-swap/
Scripts scripts/open-unboxing/, scripts/open-product-swap/ (paths adjusted to this repo) and the original copies inside each apps/ package
Demo clips and stills demo/open-unboxing/, demo/open-product-swap/, plus the same files inside each apps/ package so that studio still runs on its own
REPORT.md, NODE_MAP.md, LICENSE, build/comfy-build.yaml workflows/open-unboxing/ and workflows/open-product-swap/, and again inside apps/
Extra graphs workflows/open-unboxing/ (product_cutout.json, flux3_image_edit.json, flux3_t2i.json, qwen_image_edit_2511.json, ltx25_flf2v.json, concat_rife.json, minimax_h3_r2v.json) and workflows/open-product-swap/ (product-swap-wan-vace.json, product-swap-ltx.json)
Preset plates Already in public/presets/ (byte-identical). Not overwritten. Card thumb.jpg files exist only here

The carousel entries stay enabled: true. npm run build and npm run lint pass. apps/ is excluded from the root TypeScript check and ESLint so the Next 15 studios are not compiled into the Next 16 site.

  • The studios were not mounted as the Vercel app. Unboxing keeps an in-memory multi-step job in a long-lived Node process. Product swap exposes its own POST /api/jobs. Those routes would collide with this app's GET /api/jobs/[id].
  • workflow_api.json was left as the graph the carousel submits. Unboxing's live graph is the single collapsed pipeline. Product swap's live graph is the Wan VACE graph without the keyframe SaveImage (node 27); the full upstream file is product-swap-wan-vace.json.
  • Logo upload, MiniMax H3, Qwen edit, the five-beat unboxing, batch SKUs, and the LTX pipeline stay in the studios. Adding them as carousel controls would change the catalog the site already ships.
  • Scripts under apps/ still read COMFY_API_KEY, as upstream. The monorepo copy of the unboxing helper also accepts COMFY_API_KEY_WORK_PERSONAL. scripts/open-product-swap/e2e.mjs still talks to the studio server, not POST /api/run/open-product-swap.
  • The old GitHub repos were not deleted.

npm run check still fails on the existing Pumpkin Carve assertions (workflow["30"].inputs.images and the Seedance node). That workflow was not part of this change.

Open in Web Open in Cursor 

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/Comfy-Org/jpcosta-comfy-apps/pull/28 **Author:** [@jpcosta-comfy](https://github.com/jpcosta-comfy) **Created:** 11/4/2026 **Status:** ✅ Merged **Merged:** 11/4/2026 **Merged by:** [@jpcosta-comfy](https://github.com/jpcosta-comfy) **Base:** `main` ← **Head:** `cursor/migrate-open-apps-51e4` --- ### 📝 Commits (3) - [`6fad71a`](https://github.com/Comfy-Org/jpcosta-comfy-apps/commit/6fad71adb077f43ad696146e0bdf17758e113d15) Import the Open Unboxing and Open Product Swap studios. - [`b6ecd42`](https://github.com/Comfy-Org/jpcosta-comfy-apps/commit/b6ecd42fea363adbce5cf42ad9f3fd3e8809fe5c) Drop generated Python bytecode from the unboxing scripts. - [`174772a`](https://github.com/Comfy-Org/jpcosta-comfy-apps/commit/174772a247d2141fbb69d661bb02ffe685c8dbf3) Ignore Python bytecode at the repo root. ### 📊 Changes **160 files changed** (+16087 additions, -6 deletions) <details> <summary>View changed files</summary> 📝 `.gitignore` (+2 -0) 📝 `README.md` (+12 -2) ➕ `apps/open-product-swap/.env.example` (+9 -0) ➕ `apps/open-product-swap/.gitignore` (+45 -0) ➕ `apps/open-product-swap/LICENSE` (+21 -0) ➕ `apps/open-product-swap/README.md` (+116 -0) ➕ `apps/open-product-swap/REPORT.md` (+73 -0) ➕ `apps/open-product-swap/app/api/health/route.ts` (+28 -0) ➕ `apps/open-product-swap/app/api/jobs/[id]/file/route.ts` (+33 -0) ➕ `apps/open-product-swap/app/api/jobs/[id]/route.ts` (+24 -0) ➕ `apps/open-product-swap/app/api/jobs/route.ts` (+135 -0) ➕ `apps/open-product-swap/app/favicon.ico` (+0 -0) ➕ `apps/open-product-swap/app/globals.css` (+76 -0) ➕ `apps/open-product-swap/app/icon.svg` (+5 -0) ➕ `apps/open-product-swap/app/layout.tsx` (+33 -0) ➕ `apps/open-product-swap/app/page.tsx` (+450 -0) ➕ `apps/open-product-swap/build/comfy-build.yaml` (+30 -0) ➕ `apps/open-product-swap/components/DropZone.tsx` (+88 -0) ➕ `apps/open-product-swap/demo/README.md` (+50 -0) ➕ `apps/open-product-swap/demo/input/sku_haven_ginger.jpg` (+0 -0) _...and 80 more files_ </details> ### 📄 Description <!-- CURSOR_AGENT_PR_BODY_BEGIN --> Both apps were already carousel cards that submit `workflows/<app>/workflow_api.json`. This brings in the rest of [open-unboxing](https://github.com/jpcosta-comfy/open-unboxing) and [open-product-swap](https://github.com/jpcosta-comfy/open-product-swap) without replacing those runners or deleting the old repos. ## What moved where | Upstream | In this repo | | --- | --- | | Next.js app (`src/` or `app/`, `lib/`, `components/`) | `apps/open-unboxing/`, `apps/open-product-swap/` | | Scripts | `scripts/open-unboxing/`, `scripts/open-product-swap/` (paths adjusted to this repo) and the original copies inside each `apps/` package | | Demo clips and stills | `demo/open-unboxing/`, `demo/open-product-swap/`, plus the same files inside each `apps/` package so that studio still runs on its own | | `REPORT.md`, `NODE_MAP.md`, `LICENSE`, `build/comfy-build.yaml` | `workflows/open-unboxing/` and `workflows/open-product-swap/`, and again inside `apps/` | | Extra graphs | `workflows/open-unboxing/` (`product_cutout.json`, `flux3_image_edit.json`, `flux3_t2i.json`, `qwen_image_edit_2511.json`, `ltx25_flf2v.json`, `concat_rife.json`, `minimax_h3_r2v.json`) and `workflows/open-product-swap/` (`product-swap-wan-vace.json`, `product-swap-ltx.json`) | | Preset plates | Already in `public/presets/` (byte-identical). Not overwritten. Card `thumb.jpg` files exist only here | The carousel entries stay `enabled: true`. `npm run build` and `npm run lint` pass. `apps/` is excluded from the root TypeScript check and ESLint so the Next 15 studios are not compiled into the Next 16 site. ## What was not migrated onto the live carousel - The studios were not mounted as the Vercel app. Unboxing keeps an in-memory multi-step job in a long-lived Node process. Product swap exposes its own `POST /api/jobs`. Those routes would collide with this app's `GET /api/jobs/[id]`. - `workflow_api.json` was left as the graph the carousel submits. Unboxing's live graph is the single collapsed pipeline. Product swap's live graph is the Wan VACE graph without the keyframe `SaveImage` (node 27); the full upstream file is `product-swap-wan-vace.json`. - Logo upload, MiniMax H3, Qwen edit, the five-beat unboxing, batch SKUs, and the LTX pipeline stay in the studios. Adding them as carousel controls would change the catalog the site already ships. - Scripts under `apps/` still read `COMFY_API_KEY`, as upstream. The monorepo copy of the unboxing helper also accepts `COMFY_API_KEY_WORK_PERSONAL`. `scripts/open-product-swap/e2e.mjs` still talks to the studio server, not `POST /api/run/open-product-swap`. - The old GitHub repos were not deleted. `npm run check` still fails on the existing Pumpkin Carve assertions (`workflow["30"].inputs.images` and the Seedance node). That workflow was not part of this change. <!-- CURSOR_AGENT_PR_BODY_END --> <div><a href="https://cursor.com/agents/bc-b517ace9-05db-57d7-8d70-a00aa07b51e4?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-b517ace9-05db-57d7-8d70-a00aa07b51e4&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-11-04 22:29:10 +00:00
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Comfy-Org/jpcosta-comfy-apps#26
No description provided.