Commit Graph
177 Commits
Author SHA1 Message Date
yiling ji c2ff4604a6 update sidebar icon 2026-02-19 15:48:51 +08:00
google-labs-jules[bot] 9758a7785e Use OpenAI Image Edit API for generation (#50)
* feat(ai): use OpenAI Image Edit API instead of Responses API

Replaces the deprecated/unofficial Responses API usage for image generation with the standard `client.images.edit` API.
This change supports multi-image inputs and follows the user's provided example for `gpt-image-1.5` model compatibility.

- Updates `generateImageOpenAI` in `src/service/ai.ts` to use `client.images.edit`.
- Handles conversion of text prompts and inline/reference images to the required format using `toFile`.
- Updates `src/service/ai.test.ts` to mock the new API call and verify correct behavior.

* feat(ai): use OpenAI Image Edit API instead of Responses API

Replaces the deprecated/unofficial Responses API usage for image generation with the standard `client.images.edit` API.
This change supports multi-image inputs and follows the user's provided example for `gpt-image-1.5` model compatibility.

- Updates `generateImageOpenAI` in `src/service/ai.ts` to use `client.images.edit`.
- Removes `response_format` parameter as it's not supported/needed for GPT image models (which default to base64).
- Handles conversion of text prompts and inline/reference images to the required format using `toFile`.
- Updates `src/service/ai.test.ts` to mock the new API call and verify correct behavior.

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-02-19 15:42:59 +08:00
google-labs-jules[bot]andyiling ji 3209e088e5 Fix toast visibility and Create Look dialog error handling (#49)
* Fix toast visibility z-index issue and Create Look dialog error handling

- Moved `<Toaster />` outside of `SidebarProvider` in `Layout.tsx` and increased z-index to ensure toasts appear above dialog overlays.
- Updated `CreateLookDialog.tsx` to use `toast.error()` for API errors instead of displaying them inline at the bottom of the dialog.

* Fix Extractor error handling, toast visibility, and Create Look dialog errors

- Updated `ExtractorDialog.tsx` to reset the stage to `'selection'` on refinement error, preventing infinite loading.
- Updated `CreateLookDialog.tsx` to use `toast.error()` for API errors instead of inline text.
- Moved `<Toaster />` in `Layout.tsx` outside of `SidebarProvider` to ensure toasts appear above dialog overlays.
- Ensured `package.json` and `sonner.tsx` remain clean (reverted temporary changes).

* fix sonner

* fix lint

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: yiling ji <njjyl723@gmail.com>
2026-02-19 13:45:58 +08:00
Yiling-J 308d1d4f58 Merge pull request #47 from Yiling-J/update-github-icon-13733616666157520181
Refactor GitHub icon to Icons component and resize
2026-02-19 12:40:27 +08:00
google-labs-jules[bot] fe67119b50 Refactor GitHub icon to Icons component and resize
- Moved `GithubIcon` to `src/ui/components/Icons.tsx` as `Icons.Github`.
- Updated `src/ui/Layout.tsx` to use the new `Icons.Github` component.
- Increased icon size to `h-7 w-7`.
- Deleted `src/ui/components/GithubIcon.tsx`.
2026-02-19 04:35:08 +00:00
Yiling-J e73def39dc Merge pull request #46 from Yiling-J/refactor-settings-api-masking-and-cleanup-7139160603327351483
Refactor: API Key masking, settings UI improvements, and subCategory removal
2026-02-19 11:20:44 +08:00
yiling ji cd7fc8735b minor ui change 2026-02-19 11:18:58 +08:00
google-labs-jules[bot] 83b6c497e2 Refactor: API Key masking, settings UI improvements, and subCategory removal
- Removed `subCategory` field from Equipment model (DB), API, and UI.
- Generated Prisma migration `20260219022619_remove_subcategory_and_update_settings`.
- Implemented API Key masking (******) in settings service and UI.
- Updated Settings page to show 'Saved' state for API Key/URL buttons.
- Renamed 'Extraction Flow Defaults' to 'Default Models' in Settings.
- Fixed Fitting Room scrolling issue by adding `min-h-0` constraints.
- Updated tests and verifying scripts.
2026-02-19 02:35:28 +00:00
Yiling-J bbd1fd320c Update README.md 2026-02-19 09:36:36 +08:00
Yiling-J 9c139d5bfb Merge pull request #45 from Yiling-J/feat-add-download-option-4326109535126942932
Add download option to cards
2026-02-18 22:53:07 +08:00
google-labs-jules[bot] bb4f6f61fb feat: add download option to VibeCard and Fitting Room looks
- Added download option to VibeCard dropdown menu when an image is present.
- Added download option to Fitting Room generated look card dropdown menu.
- Implemented client-side download logic using temporary anchor tag.
- Verified with typecheck and tests.
2026-02-18 14:44:27 +00:00
Yiling-J a88422aca4 Merge pull request #44 from Yiling-J/update-docker-config-12796957791026376751
Update Docker Compose to use latest image and add standalone run instructions
2026-02-18 22:19:54 +08:00
google-labs-jules[bot] 7da8e28f32 Update Docker Compose to use latest image and add standalone run instructions to README
- Updated `docker-compose.yml` to pull `yilingj/forgery:latest` instead of building locally.
- Updated `README.md` with instructions for using Docker Compose with the pre-built image.
- Added instructions for standalone `docker run` execution in `README.md`.
2026-02-18 13:19:56 +00:00
yiling ji a890555c4e remove sha tag from dockerhub 2026-02-18 21:05:47 +08:00
Yiling-J 6411eb1e68 Merge pull request #43 from Yiling-J/chore-add-release-workflow-7734661522119203214
Add Release Workflow for Docker Hub
2026-02-18 21:00:49 +08:00
google-labs-jules[bot] 068dc39d39 chore: add release workflow for docker hub
- Added `.github/workflows/release.yml` for multi-platform Docker builds.
- Configured triggers for `main` branch pushes and `v*` tags.
- Uses `docker/metadata-action` for tagging:
  - `latest` is only updated on semantic version tags (e.g., `v1.0.0`).
  - `main` branch pushes are tagged with `main` and commit SHA.
- Supports `linux/amd64` and `linux/arm64`.
- Uses hardcoded `yilingj` username and `DOCKERHUB_TOKEN` secret.
2026-02-18 12:59:14 +00:00
google-labs-jules[bot] e7bdaf75d2 chore: add release workflow for docker hub
- Added `.github/workflows/release.yml` for multi-platform Docker builds.
- Configured triggers for `main` branch pushes and `v*` tags.
- Uses `docker/metadata-action` for tagging:
  - `latest` is only updated on semantic version tags (e.g., `v1.0.0`).
  - `main` branch pushes are tagged with `main` and commit SHA.
- Supports `linux/amd64` and `linux/arm64`.
- Requires `DOCKERHUB_USERNAME` and `DOCKERHUB_TOKEN` secrets.
2026-02-18 12:47:53 +00:00
google-labs-jules[bot] 7aca5c1ff9 chore: add release workflow for docker hub
- Added `.github/workflows/release.yml` to build and push Docker images to Docker Hub.
- Configured trigger on `push` to `main` branch and `v*` tags.
- Enabled multi-platform builds for `linux/amd64` and `linux/arm64`.
- Uses `docker/metadata-action` for automatic tagging (`latest`, semver).
- Requires `DOCKERHUB_USERNAME` and `DOCKERHUB_TOKEN` secrets.
2026-02-18 12:31:11 +00:00
yiling ji cc086fec3a fix docker build 2026-02-18 19:53:18 +08:00
Yiling-J 5095881cc1 Merge pull request #42 from Yiling-J/update-outfit-ui-grid-2148683806176639834
Enhance Outfit List UI and Edit Functionality
2026-02-18 15:29:35 +08:00
google-labs-jules[bot] b292548d6e Improve Outfit List and Create Outfit Dialog UI 2026-02-18 07:22:46 +00:00
google-labs-jules[bot] 1761bed9ce feat(ui): Enhance Outfit list UI and add Edit functionality
- Update `VibeCard` to support custom `children` content and ensure text readability with a gradient overlay.
- Refactor Outfit list in `Equipments.tsx` to use a grid of `VibeCard` components.
- Implement a 3x3 equipment preview grid inside Outfit cards, with overflow (+N) handling.
- Center the preview grid to 80% height as per design requirements.
- Update `CreateOutfitDialog` to support editing existing outfits (PUT request).
- Change category selection in `CreateOutfitDialog` to single-select.
- Update equipment selection grid in `CreateOutfitDialog` to fixed 3 columns.
- Add "Edit" action to Outfit cards.
2026-02-18 05:07:13 +00:00
Yiling-J d712452645 Add MIT License to the project 2026-02-18 12:35:09 +08:00
Yiling-J 69c56d064b Merge pull request #41 from Yiling-J/fix-fitting-room-and-extractor-save-14637309535569615021
Fix Fitting Room overflow and add Save as Outfit to Extractor
2026-02-18 12:22:07 +08:00
yiling ji 82aa28000a update ui 2026-02-18 12:21:07 +08:00
google-labs-jules[bot] 599f566f80 Remove verification artifacts
- Deleted `verification/fitting_room_v2.png`
- Deleted `verification/verify_fitting_room_v2.py`
2026-02-18 03:24:08 +00:00
google-labs-jules[bot] 219d9224d0 Fix Fitting Room UI, add Extractor outfit save, update Dockerfile
- Fitting Room:
  - Constrain page height to viewport.
  - Use `ScrollArea` for "Generated Looks".
  - Ensure character image uses `object-contain` and empty state is centered.
- Extractor:
  - Add "Save as Outfit" checkbox and name input to `RefineStage`.
  - Implement API call to create outfit upon completion.
- Dockerfile:
  - Copy `example-data` directory to final image.
2026-02-18 03:05:10 +00:00
google-labs-jules[bot] 7f12e5f909 Fix Fitting Room overflow and add Save as Outfit to Extractor
- Fixed Fitting Room page overflow by constraining height and using ScrollArea for the Generated Looks section.
- Added "Save as Outfit" checkbox and input to the Refine stage of the Extractor dialog.
- Installed @radix-ui/react-checkbox and added Shadcn Checkbox component.
- Updated Dockerfile to include example-data directory in the final image.
2026-02-18 02:50:22 +00:00
yiling ji 9eaf136550 add example data 2026-02-18 10:12:35 +08:00
Yiling-J 2ea634090d Merge pull request #40 from Yiling-J/refactor-poses-expressions-db-14152250609701592538
Refactor Poses and Expressions to be Database-Driven
2026-02-17 17:24:53 +08:00
google-labs-jules[bot] 58fd8fa537 Refactor poses and expressions to be fully database-driven
- Removed hardcoded `BUILTIN_POSES` and `BUILTIN_EXPRESSIONS` constants.
- Updated `PoseService` and `ExpressionService` to only list and delete items from the database.
- Removed the `type` field ('builtin' | 'custom') from `PoseItem` and `ExpressionItem`.
- Updated `GenerationService` to resolve pose and expression assets strictly from the database (`data/files`) instead of falling back to `public/`.
- Updated `Poses.tsx` and `Expressions.tsx` to remove "SYSTEM" vs "CUSTOM" UI distinction and enable deletion for all items.
- Updated `pose.test.ts` and created `expression.test.ts` to verify the new behavior.
- Fixed `generation.test.ts` to mock database calls correctly for pose/expression lookups and avoid polluting other tests.
2026-02-17 09:18:04 +00:00
google-labs-jules[bot] 14d23144c4 Refactor poses and expressions to be fully database-driven
- Removed hardcoded `BUILTIN_POSES` and `BUILTIN_EXPRESSIONS` constants.
- Updated `PoseService` and `ExpressionService` to only list and delete items from the database.
- Removed the `type` field ('builtin' | 'custom') from `PoseItem` and `ExpressionItem`.
- Updated `GenerationService` to resolve pose and expression assets strictly from the database (`data/files`) instead of falling back to `public/`.
- Updated `Poses.tsx` and `Expressions.tsx` to remove "SYSTEM" vs "CUSTOM" UI distinction and enable deletion for all items.
- Updated `pose.test.ts` and created `expression.test.ts` to verify the new behavior.
2026-02-17 04:59:16 +00:00
Yiling-J 044764fcf7 Merge pull request #39 from Yiling-J/add-equipment-upload-10544077274154872392
Allow direct equipment upload
2026-02-17 11:19:18 +08:00
google-labs-jules[bot] 3908637ff5 feat: allow direct equipment upload
- Added `POST /api/equipments` endpoint to create equipment from an existing asset.
- Created `UploadEquipmentDialog` component with drag-and-drop and clipboard paste support.
- Added "Upload" button to the Equipments page header.
- Verified new equipment creation flow via frontend verification script.
2026-02-17 03:13:15 +00:00
google-labs-jules[bot] 5fb845914c feat: allow direct equipment upload
- Added `POST /api/equipments` endpoint to create equipment from an existing asset.
- Created `UploadEquipmentDialog` component with drag-and-drop and clipboard paste support.
- Added "Upload" button to the Equipments page header.
- Verified new equipment creation flow via frontend verification script.
2026-02-17 03:05:36 +00:00
Yiling-J e6329be051 Merge pull request #38 from Yiling-J/refactor-ulid-schema-default-12914212072284971523
Refactor schema to use @default(ulid()) and remove manual assignment
2026-02-17 10:38:50 +08:00
google-labs-jules[bot] e66917d716 Refactor schema to use @default(ulid()) and remove manual assignment
- Update prisma/schema.prisma to use @default(ulid()) for all relevant models
- Remove manual ulid() calls from all service files
- Update list APIs to order by id descending
- Update AssetService tests to match new behavior
- Update AGENTS.md with new conventions
- Remove empty migration file (20260217022222_add_ulid_default)
2026-02-17 02:37:20 +00:00
yiling ji 1d3ff555dd ui improvement 2026-02-17 10:12:07 +08:00
Yiling-J 413b24e2c1 Merge pull request #37 from Yiling-J/extractor-dialog-footer-17605281711190367568
Refactor ExtractorDialog footer layout
2026-02-16 19:39:13 +08:00
google-labs-jules[bot] 384262e309 I have refactored ExtractorDialog to use DialogFooter and moved the stage actions. Here is a summary of the changes I made:
*   I added `DialogFooter` to `ExtractorDialog`.
*   I moved the action buttons (Start, Cancel, and the finish button) from `AnalyzeStage`, `SelectionStage`, and `RefineStage` to the `ExtractorDialog` footer.
*   I lifted the `selectedIndices` state from `SelectionStage` to `ExtractorDialog`.
*   I updated `AnalyzeStage` to show the status in the primary action button.
*   I enabled cancellation during analysis.
*   I ensured that `onSuccess` is called only when the user clicks the finish button in the Refine stage.
2026-02-16 11:34:08 +00:00
yiling ji c2cefb6bc9 ui update 2026-02-16 19:13:27 +08:00
Yiling-J 123cc2cccd Merge pull request #36 from Yiling-J/redesign-extractor-ui-vibe-60020766140160295
Redesign ExtractorDialog UI
2026-02-16 16:46:47 +08:00
google-labs-jules[bot] b5296e8a08 Delete image-refine-vibe reference folder
- Removed the `image-refine-vibe` directory as the redesign based on it has been successfully implemented and approved.
2026-02-16 08:18:06 +00:00
google-labs-jules[bot] 180408b883 Redesign ExtractorDialog with vibe reference workflow and light mode
- Refactor `ExtractorDialog.tsx` into modular stages: `UploadStage`, `AnalyzeStage`, `SelectionStage`, `RefineStage`.
- Implement new UI flow: Upload -> Analyze -> Select -> Refine.
- Adapt "vibe" reference visuals to application's Light Mode theme (Slate/Cyan/Amber).
- Implement real-time status updates for analysis and refinement steps using backend streams.
- Add drag-and-drop and paste support for image upload.
- Visualize candidate selection grid and refinement progress.
- Implement manual confirmation for analysis start.
- Increase dialog size to `max-w-[98vw]` and `h-[95vh]`.
- Simplify title bar and adjust candidate grid cell size to 140px.
- Adjust refinement grid cell size to 160px.
2026-02-16 07:49:38 +00:00
google-labs-jules[bot] 39bcda5b0e Redesign ExtractorDialog with vibe reference workflow and light mode
- Refactor `ExtractorDialog.tsx` into modular stages: `UploadStage`, `AnalyzeStage`, `SelectionStage`, `RefineStage`.
- Implement new UI flow: Upload -> Analyze -> Select -> Refine.
- Adapt "vibe" reference visuals to application's Light Mode theme (Slate/Cyan/Amber).
- Implement real-time status updates for analysis and refinement steps using backend streams.
- Add drag-and-drop and paste support for image upload.
- Visualize candidate selection grid and refinement progress.
- Implement manual confirmation for analysis start.
- Increase dialog size to `max-w-[98vw]` and `h-[95vh]`.
- Simplify title bar and adjust candidate grid cell size to 140px.
2026-02-16 07:41:20 +00:00
google-labs-jules[bot] c3752a1c93 Redesign ExtractorDialog with vibe reference workflow and light mode
- Refactor `ExtractorDialog.tsx` into modular stages: `UploadStage`, `AnalyzeStage`, `SelectionStage`, `RefineStage`.
- Implement new UI flow: Upload -> Analyze -> Select -> Refine.
- Adapt "vibe" reference visuals to application's Light Mode theme (Slate/Cyan/Amber).
- Implement real-time status updates for analysis and refinement steps using backend streams.
- Add drag-and-drop and paste support for image upload.
- Visualize candidate selection grid and refinement progress.
2026-02-16 07:19:08 +00:00
yiling ji 544d93b67b add refine vibe demo 2026-02-16 14:58:36 +08:00
Yiling-J 87c9dbca1d Merge pull request #35 from Yiling-J/fix-extraction-test-9808362104329540100
Fix failing extraction service tests
2026-02-16 14:35:43 +08:00
google-labs-jules[bot] d4ddb43e00 test: update extraction service prompt expectations
Updates the test expectations in `src/service/extraction.test.ts` to match the actual prompt content used in `src/service/extraction.ts`. The previous test was asserting the presence of specific instructions regarding cropping artifacts that are no longer present in the codebase. The updated test now verifies the presence of the task name and the instruction to return only the image.
2026-02-16 06:33:05 +00:00
Yiling-J 1b3b35112c Merge pull request #34 from Yiling-J/docs-readme-remix-11838642017644994137
Revamp README to be more attractive and accurate
2026-02-16 14:15:08 +08:00