Files
PaintPlus/scripts
Claude 851e255641 Fix SAM symlink crash and make prefetch-models.sh resilient per-step
download_sam_model.py crashed with an uncaught PermissionError when
data/models/ is root-owned (common after a prior Docker run) and a
non-root host user tries to recreate the convenience sam_model.pth
symlink — observed in the wild, and it aborted the whole prefetch run
before U2Net/BEN2/BiRefNet-HR were ever attempted. Worse, the same
unguarded symlink call sat inside the post-download try/except, so a
successful download could get deleted just because the symlink step
failed afterward. Wrapped symlink creation in a shared helper that
warns and continues instead of raising — the real model file already
satisfies entrypoint.sh's checks regardless of the symlink.

prefetch-models.sh now treats SAM, U2Net, and the HuggingFace models as
independent steps (one failing no longer aborts the rest) and prints a
summary of which steps failed, so a single run gives full diagnostic
signal instead of stopping at the first error.
2026-06-18 16:33:17 +00:00
..

Classic Eyes Scripts

This directory contains scripts for generating and importing classic eye images into the AI Photo Edit patch library.

Overview

The scripts generate a variety of classic eye styles that can be used as reusable patches for photo editing:

  • Realistic eyes - Detailed eyes with gradient irises and realistic highlights
  • Anime eyes - Large, expressive eyes in anime style with prominent highlights
  • Cartoon eyes - Simple, bold cartoon-style eyes

Each style is available in multiple iris colors: blue, green, brown, hazel, grey, and amber.

Scripts

1. generate_classic_eyes_ppm.py

Generates classic eye images using only the Python standard library (no dependencies required).

python scripts/generate_classic_eyes_ppm.py

This creates PPM format images in data/classic_eyes_ppm/. PPM is a simple image format that can be converted to PNG later.

2. download_classic_eyes.py

Full-featured script that generates eyes and imports them directly into the patch library. Requires PIL/Pillow.

# Run inside the backend container
docker exec -it ai-photo-edit-backend python /app/../scripts/download_classic_eyes.py

# Or with the API running
python scripts/download_classic_eyes.py --api --base-url http://localhost:8101

# Or save to a directory for later import
python scripts/download_classic_eyes.py --output-dir ./my_eyes

3. startup_import_eyes.py

Converts PPM files to PNG and imports them into the patch library. Run this inside the backend container.

docker exec -it ai-photo-edit-backend python /app/../scripts/startup_import_eyes.py

4. import_saved_eyes.py

Import previously saved eye images from a directory.

python scripts/import_saved_eyes.py /path/to/saved/eyes

Quick Start

  1. Generate the eye images (no dependencies needed):

    python scripts/generate_classic_eyes_ppm.py
    
  2. Start the application:

    docker compose up -d
    
  3. Import the eyes:

    docker exec -it ai-photo-edit-backend python /scripts/startup_import_eyes.py
    
  4. Verify in the app: Open the patch library in the UI to see the imported classic eyes.

Generated Eyes

Style Colors Available Size
Realistic Blue, Green, Brown, Hazel, Grey, Amber 200x200
Anime Blue, Green, Brown, Hazel, Grey, Amber 200x200
Cartoon Blue, Green, Brown, Hazel, Grey, Amber 200x200

Total: 18 unique eye variants

Extending

To add more eye styles or colors, edit the generate_classic_eyes_ppm.py or download_classic_eyes.py scripts:

# Add new color
colors["purple"] = (128, 0, 128)

# Add new style in create_classic_eye() function
elif style == "fantasy":
    # Your custom eye drawing code
    pass

File Formats

  • PPM: Portable Pixmap format - simple, universal, generated without dependencies
  • PNG: Preferred format for the patch library - converted from PPM using PIL

License

The generated eye images are created programmatically and are free to use without restrictions.