Garment Photo Cleaner Web App [Map] #1

Closed
opened 2026-09-10 23:00:58 +02:00 by tilltheend · 1 comment
Owner

Destination

A fast, single-user, locally hosted web app (app.py + vanilla HTML/CSS/JS in static/index.html) running on http://127.0.0.1:8000 where a user can upload a garment photo, choose presets or customize the prompt, submit to OpenRouter's meta/muse-image, view side-by-side before/after comparisons, and download the full-resolution restored image.

Notes

  • Domain: Garment photo cleaning, wrinkle removal, catalog photography standardization.
  • Skills: prototype, unslop.
  • Notes override: Execution carried into the map tickets.
  • Standing preferences: Minimal dependencies (FastAPI + uvicorn + vanilla HTML/CSS/JS without build steps or node_modules).
  • Verified facts: meta/muse-image avoids false-positive moderation triggers, output capped ~1.8 MP requiring Pillow Lanczos upscale to source dimensions.

Decisions so far

Not yet specified

  • Batch upload or multi-image queue (if single-image workflow demands scaling)

Out of scope

  • Multi-tenant authentication, user accounts, and remote multi-user session management
  • Custom AI model fine-tuning or local GPU model inference
  • Cloud storage integrations (AWS S3, Google Cloud Storage)
## Destination A fast, single-user, locally hosted web app (`app.py` + vanilla HTML/CSS/JS in `static/index.html`) running on `http://127.0.0.1:8000` where a user can upload a garment photo, choose presets or customize the prompt, submit to OpenRouter's `meta/muse-image`, view side-by-side before/after comparisons, and download the full-resolution restored image. ## Notes - Domain: Garment photo cleaning, wrinkle removal, catalog photography standardization. - Skills: `prototype`, `unslop`. - Notes override: Execution carried into the map tickets. - Standing preferences: Minimal dependencies (FastAPI + uvicorn + vanilla HTML/CSS/JS without build steps or node_modules). - Verified facts: `meta/muse-image` avoids false-positive moderation triggers, output capped ~1.8 MP requiring Pillow Lanczos upscale to source dimensions. ## Decisions so far <!-- the index: one line per closed ticket, enough to judge relevance, then zoom the link for the detail the ticket holds --> - [Decouple core photo cleaning logic for CLI and API reuse](https://code.tilltheend.de/tilltheend/unwrap-clothes/issues/2): Extracted encoding, OpenRouter API client, and in-memory Lanczos resolution restoration into `cleaner.py`, supporting both raw bytes and paths for CLI and web API reuse. - [Implement FastAPI backend and /api/clean endpoint in app.py](https://code.tilltheend.de/tilltheend/unwrap-clothes/issues/3): Built FastAPI service in `app.py` exposing `POST /api/clean` with multipart upload, base64 data URI response, Lanczos toggle, and static file hosting. - [Build single-page web UI in static/index.html](https://code.tilltheend.de/tilltheend/unwrap-clothes/issues/4): Created vanilla single-page UI in `static/index.html` with drag-and-drop upload, preset selectors, elapsed timer, side-by-side comparison, and clean image download. - [End-to-end verification and documentation update](https://code.tilltheend.de/tilltheend/unwrap-clothes/issues/5): Added end-to-end integration test suite in `tests/test_e2e.py` and expanded `README.md` covering Web UI, CLI, architecture, and testing. ## Not yet specified <!-- see "Fog of war": in-scope fog you can't ticket yet; graduates as the frontier advances --> - Batch upload or multi-image queue (if single-image workflow demands scaling) ## Out of scope <!-- see "Out of scope": work ruled beyond the destination; closed, never graduates --> - Multi-tenant authentication, user accounts, and remote multi-user session management - Custom AI model fine-tuning or local GPU model inference - Cloud storage integrations (AWS S3, Google Cloud Storage)
tilltheend added the
wayfinder:map
label 2026-09-10 23:00:59 +02:00
Author
Owner

Destination Reached

All child tickets for this map have been resolved, reviewed via /skill:code-review, and merged into main:

  1. Decouple core photo cleaning logic for CLI and API reuse: Core logic extracted into cleaner.py with in-memory Lanczos resolution restoration, dual input support (bytes and file paths), and full backward-compatible CLI support.
  2. Implement FastAPI backend and /api/clean endpoint in app.py: FastAPI server with POST /api/clean, multipart upload, base64 data URI response, and static file hosting.
  3. Build single-page web UI in static/index.html: Zero-build single-page web application featuring drag-and-drop file upload, studio preset selectors, side-by-side catalog before/after comparison, and one-click download.
  4. End-to-end verification and documentation update: Integration test suite in tests/test_e2e.py and comprehensive README.md documentation.

The complete suite passes 44/44 automated tests.

## Destination Reached All child tickets for this map have been resolved, reviewed via `/skill:code-review`, and merged into `main`: 1. **[Decouple core photo cleaning logic for CLI and API reuse](https://code.tilltheend.de/tilltheend/unwrap-clothes/issues/2)**: Core logic extracted into `cleaner.py` with in-memory Lanczos resolution restoration, dual input support (bytes and file paths), and full backward-compatible CLI support. 2. **[Implement FastAPI backend and /api/clean endpoint in app.py](https://code.tilltheend.de/tilltheend/unwrap-clothes/issues/3)**: FastAPI server with `POST /api/clean`, multipart upload, base64 data URI response, and static file hosting. 3. **[Build single-page web UI in static/index.html](https://code.tilltheend.de/tilltheend/unwrap-clothes/issues/4)**: Zero-build single-page web application featuring drag-and-drop file upload, studio preset selectors, side-by-side catalog before/after comparison, and one-click download. 4. **[End-to-end verification and documentation update](https://code.tilltheend.de/tilltheend/unwrap-clothes/issues/5)**: Integration test suite in `tests/test_e2e.py` and comprehensive `README.md` documentation. The complete suite passes 44/44 automated tests.
Sign in to join this conversation.
No description provided.