Commit Graph
187 Commits
Author SHA1 Message Date
Yiling-J c971523958 Add video element to README for character forging
Added a video element to showcase character forging.
2026-02-20 10:40:48 +08:00
yiling ji 7d185c33c7 add demo video 2026-02-20 10:29:07 +08:00
google-labs-jules[bot] 7b5ff3d4b1 feat: fix RefineStage overflow and update extraction prompts (#57)
- Fix `RefineStage` overflow by applying `overflow-hidden` to the parent container and `min-h-0` to the `ScrollArea`.
- Update `generateTextureSheet` to use Chroma Green background.
- Update `refineAsset` prompt to extract the main equipment into a white background, using name and description for context.
- Update tests and API to support these changes.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-02-20 10:18:12 +08:00
yiling ji 3b2913c435 force image generation to be square 2026-02-19 20:34:53 +08:00
Yiling-J 47da84f986 Simplify SQLite setup instructions in AGENTS.md
Removed redundant information about SQLite database configuration and environment variables.
2026-02-19 17:31:49 +08:00
Yiling-J 1573978f73 Simplify requirements section in README 2026-02-19 17:30:19 +08:00
google-labs-jules[bot]andyiling ji 32324464b0 Update Look Details Dialog with Image Zoom and Scrollable List (#54)
* Update Look Details Dialog with image zoom and scrollable list

* add missing migration

* minor change

* fix test

---------

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 17:27:34 +08:00
yiling ji b726965678 fix fitting room ui 2026-02-19 16:07:15 +08:00
google-labs-jules[bot] f7af709826 Simplify extraction grid dimensions logic (#52)
- Updated `getGridDimensions` in `src/service/extraction.ts` to use a 2x2 grid for 4 or fewer assets, and a 3x3 grid otherwise.
- Updated `src/service/extraction.test.ts` to reflect the new grid dimensions in the `cropAssets` test.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-02-19 16:04:32 +08:00
google-labs-jules[bot] 7121ea4084 Fix scanline animation race condition in AnalyzeStage (#51)
Renamed the keyframes in `AnalyzeStage.tsx` to `scanline-analyze` to prevent conflict with the global `scanline` animation.
Also removed unused `scanline` keyframes from `RefineStage.tsx` to avoid potential future conflicts.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-02-19 15:53:25 +08:00
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