Commit Graph
109 Commits
Author SHA1 Message Date
Outis d5898dd054 Merge pull request #43 from outis1one/claude/fix-ai-paint-tool-yz6q8
Fix U2Net, alertify dialogs, and improve AI Paint workflow
2026-01-28 08:38:06 -05:00
Claude 871fc696f5 Fix U2Net, alertify dialogs, and improve AI Paint workflow
- Switch U2Net from onnxruntime to OpenCV DNN to avoid
  "cannot enable executable stack" error in Docker
- Add alertify dialog styling to fix white text on white
  background issue in popups
- Add offerFloatSelection() to AI Paint that prompts user
  after selection to move/scale it (Canva-like workflow)
- Auto-switch to Select tool after floating selection

https://claude.ai/code/session_01CLedz6CanT9t46KBvng3vz
2026-01-28 13:23:49 +00:00
Outis 9a305126ed Merge pull request #42 from outis1one/claude/fix-ai-paint-tool-yz6q8
Fix AI Paint tool processing state and use full U2net model
2026-01-27 22:17:29 -05:00
Claude ed491ab9ba Fix AI Paint tool processing state and use full U2net model
- Fix brush_select isProcessing flag not resetting after first use
  (reset in on_leave() when switching tools)
- Add onnxruntime dependency for U2net background removal
- Use full U2net model (176MB) instead of lightweight for better quality

https://claude.ai/code/session_01CLedz6CanT9t46KBvng3vz
2026-01-28 03:05:23 +00:00
Outis 517024ba6f Merge pull request #41 from outis1one/claude/fix-ai-paint-tool-yz6q8
Fix selection tools, add float selection, aspect ratio lock, U2net au…
2026-01-27 18:07:46 -05:00
Claude e26c914483 Fix selection tools, add float selection, aspect ratio lock, U2net auto-download
- Fix brush_select and smart_select mask scaling to match layer dimensions
- Add "Float Selection" feature to Select tool - when switching to Select
  with an active AI selection, offers to copy it to a movable layer
- Add aspect ratio lock toggle (🔗 button) in layer details panel
- When locked, changing width auto-updates height and vice versa
- Add U2net model auto-download - will download lightweight u2netp.onnx (~4MB)
  automatically if no model found
- Improve error messages for background removal
- Register on_activate for select tool in config

Workflow: Select object with AI tool → Click Select tool → "Float" selection
→ Move/scale the floated layer freely

https://claude.ai/code/session_01CLedz6CanT9t46KBvng3vz
2026-01-27 22:59:22 +00:00
Outis 051f581573 Merge pull request #40 from outis1one/claude/fix-ai-paint-tool-yz6q8
Fix AI tools and My Library, add U2net background removal
2026-01-27 17:32:08 -05:00
Claude 549a1a4e82 Fix AI tools and My Library, add U2net background removal
- Fix My Library: Add CSS styling for library browser, items now visible
- Integrate My Library into Shapes tool with tabbed interface
- Improve AI Inpaint: Add transform mode for scaling/sizing selections
- Add helpful guidance explaining inpaint vs transform modes
- Add U2net as alternative background removal (avoids rembg issues)
- Create U2net model definition and download script
- Improve Caddyfile with multiple options and troubleshooting guide

Note: Brush Select (AI Paint) tool was already implemented and working.

https://claude.ai/code/session_01CLedz6CanT9t46KBvng3vz
2026-01-27 22:29:35 +00:00
Outis 17806a0403 Merge pull request #39 from outis1one/claude/fix-editmaskwithai-build-q8A5W
Disable rembg to fix build - numpy version conflict
2026-01-27 12:59:22 -05:00
Claude 41598722f1 Disable rembg to fix build - numpy version conflict
rembg>=2.0.70 has an incompatible dependency chain:
- rembg requires scikit-image>=0.26.0
- scikit-image 0.26+ pulls in numpy 2.x
- opencv-python-headless 4.9.0.80 was compiled for numpy 1.x
- Runtime crash: "numpy.core.multiarray failed to import"

Fix: Revert to known-working numpy<2 stack:
- numpy<2.0.0 (explicit pin)
- Pillow 10.x (compatible with numpy 1.x)
- torch 2.1.2 / torchvision 0.16.2 (numpy 1.x compatible)
- Remove rembg and onnxruntime

Background removal endpoints will return 500 with "rembg not installed"
message (code already handles this gracefully).

To re-enable rembg in future: update opencv-python-headless to 4.10+
which supports numpy 2.x.

https://claude.ai/code/session_01MYpjNQXD1fZE4gCweGU4QQ
2026-01-27 17:55:54 +00:00
Outis 79d601da35 Merge pull request #38 from outis1one/claude/fix-editmaskwithai-build-q8A5W
Claude/fix editmaskwithai build q8 a5 w
2026-01-27 12:39:32 -05:00
Claude 62ad349a83 Update torch/torchvision for numpy 2.x compatibility
scikit-image 0.26+ (required by rembg) needs numpy 2.x compatible
packages. Updated torch from 2.1.2 to 2.4+ and torchvision from
0.16.2 to 0.19+ which officially support numpy 2.x.

https://claude.ai/code/session_01MYpjNQXD1fZE4gCweGU4QQ
2026-01-27 17:37:07 +00:00
Claude b4fae0909c Remove pinned numpy and scikit-image to fix rembg dependency resolution
rembg>=2.0.70 requires scikit-image>=0.26.0, which conflicted with
the pinned scikit-image==0.22.0. Instead of pinning specific versions,
let pip resolve compatible versions automatically based on rembg's
requirements.

Also removed numpy pin as it may conflict with torch/rembg dependencies
- pip will select a compatible version.

https://claude.ai/code/session_01MYpjNQXD1fZE4gCweGU4QQ
2026-01-27 17:36:30 +00:00
Outis d5f7c4f49d Merge pull request #37 from outis1one/claude/fix-editmaskwithai-build-q8A5W
Fix Pillow version to match rembg>=2.0.70 requirements
2026-01-27 12:20:53 -05:00
Claude e902ceb0a8 Fix Pillow version to match rembg>=2.0.70 requirements
rembg 2.0.70+ requires Pillow>=12.1.0,<13.0.0 which conflicted with
the pinned Pillow==10.2.0. Updated to use the version range that
satisfies rembg while remaining compatible with scikit-image and
torchvision (both have no upper bound on Pillow).

https://claude.ai/code/session_01MYpjNQXD1fZE4gCweGU4QQ
2026-01-27 17:19:06 +00:00
Outis f2f19ef683 Update numpy version to 2.3.0 2026-01-27 10:03:06 -05:00
Outis bb4099f7a0 Merge pull request #36 from outis1one/claude/migrate-to-minipaint-eYKWf
Remove execstack from Dockerfile (not available in Debian trixie)
2026-01-27 09:59:17 -05:00
Claude bca0eeb259 Remove execstack from Dockerfile (not available in Debian trixie) 2026-01-27 14:57:20 +00:00
Outis 590398a4af Merge pull request #35 from outis1one/claude/migrate-to-minipaint-eYKWf
Upgrade rembg to use BiRefNet model (state-of-the-art)
2026-01-27 09:53:54 -05:00
Outis 699ec2d670 Merge branch 'main' into claude/migrate-to-minipaint-eYKWf 2026-01-27 09:53:35 -05:00
Claude 2ab9ed7559 Upgrade rembg to use BiRefNet model (state-of-the-art)
- Use onnxruntime>=1.17.0 (fixed executable stack issues, no execstack needed)
- Use rembg>=2.0.70 with BiRefNet model support
- Update all remove-background endpoints to use birefnet-general model
- BiRefNet provides better edge detection and matting quality than u2net
- Falls back to default model if BiRefNet unavailable
2026-01-27 14:34:28 +00:00
Outis ac702bde0a Merge pull request #34 from outis1one/claude/migrate-to-minipaint-eYKWf
Fix rembg/onnxruntime Docker build issue
2026-01-27 09:14:23 -05:00
Outis 6bfd3766c8 Merge branch 'main' into claude/migrate-to-minipaint-eYKWf 2026-01-27 09:13:18 -05:00
Claude 44bc5ed2f5 Fix rembg/onnxruntime Docker build issue
- Use onnxruntime 1.14.1 (older version without executable stack requirement)
- Make rembg pre-download optional (won't fail build if onnxruntime has issues)
- Remove Background will be disabled if rembg can't load
2026-01-27 14:08:16 +00:00
Outis 892d901394 Merge pull request #33 from outis1one/claude/migrate-to-minipaint-eYKWf
Claude/migrate to minipaint e yk wf
2026-01-27 08:29:50 -05:00
Claude 8087d6967a Add My Library for reusable assets (clip art, templates)
- Save layer or selection to personal library
- Browse library with category grouping and thumbnails
- Insert assets as new layers (double-click or Insert button)
- Delete unwanted assets
- Export library to JSON for backup
- Import library from JSON backup
- Assets stored in browser IndexedDB (persistent)
- Categories: General, Shapes, Borders, Icons, Templates, etc.
2026-01-27 13:15:58 +00:00
Claude 4d4947df13 Add selection-based effects (invert, adjust, greyscale)
- New Image > Selection Effects submenu
- Invert Selection: Invert colors only within selected area
- Adjust Selection: Brightness/contrast/gamma on selection only
- Greyscale Selection: Convert just the selected area to greyscale
- All effects work with any selection tool (Smart Select, Brush Select, etc.)
- Useful for CNC depth maps where specific objects need different treatments
2026-01-27 13:09:06 +00:00
Claude 1be13d3620 Add layer scaling, greyscale effect, and context menu
- Fix onnxruntime version (1.15.1) to avoid executable stack issue
- Add Layer Scale module (Layer > Scale Layer or 'S' button)
- Add Greyscale effect with multiple methods (luminosity, average, etc.)
- Add right-click context menu on layers with common operations
- Add Scale button to layers panel toolbar
2026-01-27 12:51:11 +00:00
Outis ed1c56b89e Merge pull request #32 from outis1one/claude/fix-rembg-docker-build-CWGXj
Fix onnxruntime executable stack error in Docker build
2026-01-26 23:50:39 -05:00
Claude a1dd81b981 Fix onnxruntime executable stack error in Docker build
The onnxruntime library requires an executable stack which is blocked
by security restrictions in Docker containers. This adds execstack tool
and uses it to clear the executable stack flag after pip install.

https://claude.ai/code/session_01AGoPJaXqdJnnuxtmSv6NLR
2026-01-27 04:49:32 +00:00
Outis dd4cd99e79 Merge pull request #31 from outis1one/claude/migrate-to-minipaint-eYKWf
Claude/migrate to minipaint e yk wf
2026-01-26 23:28:49 -05:00
Claude d9fea955fc Fix rembg error handling in Dockerfile 2026-01-27 04:27:53 +00:00
Claude a9a2b7bf04 Add Canva-style Brush Select tool with SAM AI
- New tool: Paint/brush over objects to select them
- AI (SAM) detects actual object boundaries from brush strokes
- Collects sample points along brush path, sends to SAM
- Combines multiple masks for multi-object selection
- Shift+brush to add to existing selection
- Full cut/copy/delete support with mask-shaped results
- Visual feedback: brush stroke preview, sample points, marching ants
2026-01-27 04:22:44 +00:00
Outis 1130680cfe Merge pull request #30 from outis1one/claude/migrate-to-minipaint-eYKWf
Fix selection tools and improve UI/UX
2026-01-26 22:33:00 -05:00
Claude d2f7b69dc7 Fix selection tools and improve UI/UX
- Fix cut/copy to preserve mask shape with transparency
- Add missing CSS icons for magic_wand, lasso, ellipse_select tools
- Fix toast messages styling (visible on dark theme)
- Update AI Inpaint to work with all selection tools
- Change tab title to +miniPaint
- Add DNS config to docker-compose for external API access
2026-01-27 03:09:55 +00:00
Outis a3f559bb40 Merge pull request #29 from outis1one/claude/migrate-to-minipaint-eYKWf
Add Remove Background feature using AI (rembg)
2026-01-26 19:54:01 -05:00
Claude 22d9f767a8 Add Remove Background feature using AI (rembg)
Frontend:
- Added "Remove Background (AI)" to Image menu
- Created remove_background.js module with dialog options
- Added removeBackground method to API service

Backend:
- Added /tools/remove-background-base64 endpoint for miniPaint frontend
- Uses rembg library for AI-powered background removal

Features:
- Automatically detects main subject and removes background
- Option to create as new layer or replace current
- Enables transparency mode after removal
- Works with any image layer
2026-01-27 00:47:22 +00:00
Outis d27610eaf1 Merge pull request #28 from outis1one/claude/migrate-to-minipaint-eYKWf
Add selection tools: Magic Wand, Lasso, Ellipse Select
2026-01-26 19:42:27 -05:00
Claude f650ec3019 Add selection tools: Magic Wand, Lasso, Ellipse Select
New Selection Tools:
- Magic Wand: Click to select by color similarity (like GIMP)
  - Configurable tolerance (0-100%)
  - Contiguous or global mode
  - Shift+Click to add to selection

- Lasso: Freehand selection by drawing
  - Draw around area to select
  - Shift+Draw to add to selection

- Ellipse Select: Draw elliptical/circular selections
  - Drag to create ellipse
  - Shift+Drag for perfect circle
  - Alt+Drag to draw from center

Smart Select Improvements:
- Fixed copy/cut to layer errors
- Added Shift+Click for multi-select (additive selection)
- All operations use proper layer action system

All selection tools support:
- Ctrl+C: Copy selection to new layer
- Ctrl+X: Cut selection to new layer
- Delete: Delete selected area
- Escape: Clear selection
- Marching ants animation on selection edge
2026-01-27 00:39:40 +00:00
Outis c819f92573 Merge pull request #27 from outis1one/claude/migrate-to-minipaint-eYKWf
Improve SAM selection with mask contour and layer operations
2026-01-26 19:02:37 -05:00
Claude 53225e9e05 Improve SAM selection with mask contour and layer operations
- SAM selection now shows actual mask contour instead of bounding box
- Added marching ants animation on the actual mask edge
- Added keyboard shortcuts:
  - Ctrl+C: Copy selection to new layer
  - Ctrl+X: Cut selection to new layer (removes from original)
  - Delete: Delete selected area
  - Escape: Clear selection
- Removed eye catalog download from startup (was failing with 429)
2026-01-27 00:00:16 +00:00
outis1one 85102a124b Merge pull request #26 from outis1one/claude/migrate-to-minipaint-eYKWf
Fix smart select visualization and inpaint API
2026-01-26 13:27:52 -05:00
Claude cfe487e2ed Fix smart select visualization and inpaint API
Frontend:
- Fix smart_select.js to properly render mask overlay
- Add marching ants border around selection
- Calculate selection bounds from mask
- Trigger re-render after mask is loaded

Backend:
- Fix inpaint endpoint to call edit_image() instead of inpaint()
- The AI providers use edit_image() method, not inpaint()
2026-01-26 18:26:12 +00:00
outis1one 76359a2926 Merge pull request #25 from outis1one/claude/migrate-to-minipaint-eYKWf
Fix API base URL for unified container setup
2026-01-26 13:05:26 -05:00
Claude f0ea7df6b7 Fix API base URL for unified container setup 2026-01-26 18:04:27 +00:00
outis1one 0336169ac5 Merge pull request #24 from outis1one/claude/migrate-to-minipaint-eYKWf
Fix Docker build for miniPaint frontend
2026-01-26 12:44:50 -05:00
Claude e0eb65810a Fix Docker build for miniPaint frontend
- Update main Dockerfile to copy all miniPaint static files:
  - index.html
  - dist/ (webpack bundle)
  - images/ (icons and assets)
  - src/css/ (stylesheets)
- Update backend main.py to conditionally mount static directories
  - Checks if each directory exists before mounting
  - Supports both React (assets/) and miniPaint (dist/, images/, src/) structures
2026-01-26 17:43:14 +00:00
outis1one 93b2f5055c Merge pull request #23 from outis1one/claude/migrate-to-minipaint-eYKWf
Add SAM Smart Select and AI Inpaint tools to miniPaint
2026-01-26 12:37:59 -05:00
Claude bf83ecc8ad Add SAM Smart Select and AI Inpaint tools to miniPaint
New features:
- Smart Select tool: Click to select objects using SAM (Segment Anything)
- AI Inpaint tool: Edit selected regions with text prompts

Changes:
- frontend/src/js/tools/smart_select.js: SAM-powered selection tool
- frontend/src/js/tools/ai_inpaint.js: AI inpainting with prompt dialog
- frontend/src/js/services/api.js: API service for backend communication
- frontend/src/js/config.js: Register new tools
- frontend/src/css/layout.css: Tool icon styles
- frontend/images/icons/: SVG icons for new tools
- backend/app/routers/tools.py: New base64 API endpoints
- frontend/Dockerfile: Updated for miniPaint build
- frontend/nginx.conf: Added /api prefix proxy
2026-01-26 17:34:20 +00:00
motion d009a2c0f0 Add miniPaint as new frontend base 2026-01-26 12:23:09 -05:00