Commit Graph

319 Commits

Author SHA1 Message Date
5d3fa7618b fix: expose Gitea SSH port 2222 and update SSH_PORT setting
- Add ports mapping to expose SSH port 2222 on host
- Change SSH_PORT from 22 to 2222 for correct clone URL display
- Gitea will now show git@dev.pivoine.art:2222/user/repo.git in UI

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 13:07:49 +01:00
414ff269b2 fix: correct Gitea custom assets mount path for themes and favicon
Move custom assets from /data/gitea/custom/public to /data/gitea/public
to properly serve custom themes and favicon/logo files. Gitea expects
custom public assets at /data/gitea/public, not nested under custom/.

- Restructured dev/custom/public/ to dev/public/
- Updated volume mount in dev/compose.yaml
- Includes 21 custom themes from sainnhe/gitea-themes
- Includes custom favicon and logo

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 12:20:42 +01:00
485edffa48 docs: update README with gitea-dark as default theme
Note that custom themes are available for manual selection but may not work as default

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 12:16:53 +01:00
77a81d29f0 fix: change default theme to gitea-dark (built-in)
Custom themes not loading properly, reverting to built-in theme.
Custom themes still available in theme list for manual selection.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 12:16:07 +01:00
07bcba01fa feat: set edge-dark as default Gitea theme
- Change DEFAULT_THEME from gitea-auto to edge-dark
- Add THEME_COLOR_META_TAG for edge-dark (#333644)
- Custom favicon and logo already configured in custom directory

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 12:13:46 +01:00
d73504a1de fix: use correct default theme name for Gitea
- Change DEFAULT_THEME from 'auto' to 'gitea-auto'
- Add 'arc-green' to themes list (standard Gitea theme)
- Remove invalid 'auto' theme name from THEMES list

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 12:03:22 +01:00
644c437b31 fix: remove deprecated Gravatar environment variables
- Remove GITEA__picture__* environment variables (deprecated in Gitea 1.18+)
- Gravatar must be configured via admin panel in modern Gitea versions
- Add README.md with post-installation configuration instructions
- Document Gravatar setup, runner registration, themes, and custom assets

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 12:01:20 +01:00
fbdca7c5a2 fix: correct Gitea custom directory mount path
Change from ./dev/custom to ./custom since compose.yaml is in dev/ directory

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 11:57:24 +01:00
17653546b8 fix: reorganize Gitea customizations to proper directory structure
- Move themes to dev/custom/public/assets/css/ (correct Gitea custom path)
- Add custom favicon.svg and logo.svg to dev/custom/public/assets/img/
- Update volume mount to use /data/gitea/custom instead of incorrect path
- Follows Gitea customization documentation structure

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 11:56:23 +01:00
92a96b5f6e feat: add custom themes and enable Gravatar for Gitea
- Add 21 custom themes from sainnhe/gitea-themes:
  - Edge (auto, dark, light)
  - Everforest (auto, dark, light)
  - Gruvbox (auto, dark, light)
  - Gruvbox Material (auto, dark, light)
  - Nord, Palenight, Soft Era
  - Sonokai (base + 5 variants)
- Enable Gravatar for user avatars
- Set default theme to auto (system preference)
- Mount themes directory to Gitea container

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 11:53:16 +01:00
7cd56b4111 feat: add Gitea volumes to Restic backup configuration
- Add gitea-backup plan with dev_gitea_data, dev_gitea_config, and dev_gitea_runner_data volumes
- Schedule: Daily at 11 AM
- Retention: 7 daily, 4 weekly, 6 monthly, 2 yearly backups
- Add missing asciinema_data volume to backup configuration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 11:49:56 +01:00
98f564c896 fix: use EMAIL_SMTP_* variables for Gitea mailer configuration
Change from SMTP_* to EMAIL_SMTP_* variables to match existing .env

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 11:47:59 +01:00
d32ac39d27 feat: add Gitea self-hosted Git service with Actions runner
- Create new 'dev' stack at dev.pivoine.art
- Add Gitea with PostgreSQL database (core stack)
- Add Gitea Actions runner with Docker support
- Enable mailer configuration via SMTP
- Enable container registry and packages
- Add gitea database to PostgreSQL init script

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 11:43:13 +01:00
f25856a44b feat: remove Navidrome, use Jellyfin for all media
- Remove Navidrome service from media stack
- Remove Navidrome configuration from arty.yml
- Remove media/scan command (Navidrome-specific)
- Jellyfin now handles all media: images, videos, and music
2025-11-15 09:43:00 +01:00
f9d716c80a feat: add Music support to Jellyfin, remove music_files service
- Add /mnt/hidrive/users/valknar/Music mount to Jellyfin
- Remove standalone nginx music_files service
- Jellyfin now serves images, videos, and music
- Supports transcoding, download tracking, and direct URLs via API
2025-11-15 08:57:31 +01:00
0f21392113 feat: add static file server for direct MP3 links
- Add nginx service to serve music files at music.media.pivoine.art
- Enables direct MP3 file URLs for website embedding
- Serves files from /mnt/hidrive/users/valknar/Music read-only
2025-11-15 08:51:29 +01:00
b78becd0c7 fix: use docker compose restart for media/scan command 2025-11-15 08:12:40 +01:00
f855bdf38d feat: add media/scan command for Navidrome library refresh 2025-11-15 08:12:17 +01:00
b49ae07b44 feat: enable sharing and downloads in Navidrome
- Add ND_ENABLESHARING=true
- Add ND_ENABLEDOWNLOADS=true
- Add ND_DEFAULTDOWNLOADABLESHARE=true
- Enables public music sharing via share links
2025-11-15 07:50:24 +01:00
c07add5c11 feat: replace Koel and Ampache with Navidrome music streaming server
- Remove Koel and koel_init services from media stack
- Remove Ampache service from media stack
- Add Navidrome service at navidrome.media.pivoine.art
- Remove koel and ampache databases from postgres init script
- Update arty.yml with Navidrome configuration
- Navidrome uses SQLite (no PostgreSQL required)
- Supports public sharing and Subsonic API compatibility
2025-11-15 07:44:31 +01:00
3267c6dbd8 feat: add Ampache music streaming server to media stack
- Add ampache service to media/compose.yaml with PostgreSQL backend
- Create ampache database in postgres init script
- Configure Ampache environment variables in arty.yml
- Mount Music directory read-only
- Expose at ampache.media.pivoine.art via Traefik
2025-11-15 07:21:15 +01:00
6fc51b6a51 fix: run koel_init container as www-data user
- Add user: "33:33" (www-data) to koel_init container
- Prevents permission issues when init container creates cache files
- Fixes album cover upload and metadata editing errors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 06:59:36 +01:00
49a97755bc feat: add persistent Koel configuration via environment variables
- Add MEDIA_PATH, STORAGE_DRIVER, TRUSTED_PROXIES, and FORCE_HTTPS to environment
- Apply settings to both koel and koel_init containers
- Ensures configuration persists across container restarts without manual intervention

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 06:44:32 +01:00
9cdc6ee409 fix: correct Koel memory limit value
Remove 'M' suffix from MEDIA_KOEL_MEMORY_LIMIT as Koel appends it automatically, causing "512MM" error.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 06:30:18 +01:00
fd059dbbb5 feat: consolidate media services into unified media stack
- Combine Jellyfin, Filestash, and Koel into single media/ compose stack
- Remove standalone jelly/ and stash/ compose files
- Add Koel music streaming with PostgreSQL backend
- Update core PostgreSQL init script to create koel database
- Add media stack to root compose.yaml include
- Configure media services with subdomain routing (jellyfin.media, filestash.media, koel.media)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-14 20:40:53 +01:00
709dcd8882 fix: use correct NO_DOCS and NO_REDOC environment variables
- Replace DISABLE_SWAGGER_UI with NO_DOCS and NO_REDOC
- Following official LiteLLM documentation for disabling API docs
- Disables both Swagger UI and Redoc documentation interfaces

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-14 02:17:40 +01:00
b66e28d874 fix: use DISABLE_SWAGGER_UI environment variable instead of invalid flag
- Remove invalid --disable_swagger command flag
- Add DISABLE_SWAGGER_UI=true environment variable
- Fixes LiteLLM startup error

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-14 02:15:31 +01:00
f1ff42f452 feat: disable Swagger UI in LiteLLM proxy
- Add --disable_swagger flag to LiteLLM command
- Improves security by hiding API documentation interface

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-14 02:14:43 +01:00
187b5b5b12 fix: add BASE_URL environment variable for Linkwarden email links
- Add BASE_URL pointing to https://links.pivoine.art
- Required for email verification and password reset links

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 18:30:08 +01:00
c40ab90d94 fix: use URL-encoded EMAIL_SERVER variable for Linkwarden
- Use dedicated LINKS_EMAIL_SERVER variable with proper URL encoding
- Encode @ symbol in email address as %40 to avoid URL parsing conflicts
- Fixes NextAuth error: "Cannot read properties of undefined (reading 'split')"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 17:27:41 +01:00
730243e894 fix: enable email functionality in Linkwarden with correct SMTP configuration
- Add NEXT_PUBLIC_EMAIL_PROVIDER=true to enable email features
- Change EMAIL_SERVER protocol from smtp:// to smtps:// for port 465 (implicit SSL/TLS)

This fixes the login issue where password recovery and email verification were not working.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 17:07:47 +01:00
badfeb1e45 feat: add sexy/bundle/update script to refresh Directus extensions
Added arty script to update Directus extension bundle from the latest
sexy_frontend image. This ensures the API container always has the
latest extensions when the frontend image is rebuilt.

Usage: arty sexy/bundle/update

Also streamlined sexy/uploads/export to match code style.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 10:16:56 +01:00
2934caa9ed fix: disable Watchtower for Facefusion custom local image
Watchtower was trying to pull updates from Docker Hub for facefusion-patched:3.5.0-cpu
which only exists locally, causing spam errors. Disabled Watchtower monitoring for this
container since it's a custom-built image with NSFW filter patches.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 08:30:51 +01:00
f71b150263 feat: add tty flag for Gradio to start properly 2025-11-13 06:18:58 +01:00
0b43299ffd fix: update content_analyser hash check in core.py for patched version 2025-11-13 06:16:14 +01:00
95099a443e feat: build custom Facefusion image with NSFW filter patch baked in 2025-11-13 06:05:42 +01:00
8f406f62c1 fix: add command with -u flag to start Facefusion 2025-11-13 06:01:09 +01:00
c2d25dde59 fix: remove entrypoint override to use default Facefusion startup 2025-11-13 05:59:05 +01:00
3c56f05286 fix: add Gradio environment variables and remove conflicting command 2025-11-13 05:52:13 +01:00
65865b7bb8 fix: add listen and port flags to start Gradio server properly 2025-11-13 05:51:24 +01:00
539f689269 fix: use run.py to start Gradio server 2025-11-13 05:50:37 +01:00
025118a25e fix: use simple run command without extra flags 2025-11-13 05:47:32 +01:00
72fd26f8ea fix: use headless-run command to start Gradio server 2025-11-13 05:46:20 +01:00
77f945dd3f fix: add execution flags to facefusion.py run command 2025-11-13 05:43:51 +01:00
7f667c371f fix: correct patch for Facefusion 3.5.0 content_analyser.py
- Fixed line number and function names to match actual source
- Added validation to ensure patch was applied
- Updated patch file with correct context

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 04:28:50 +00:00
cd9c38e524 docs: add patch file for disabling NSFW filter
This patch file documents the exact change made to content_analyser.py
for disabling the NSFW content filter in Facefusion 3.5.0.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 04:24:36 +00:00
59f2e8b0fc refactor: use source code patch instead of deleting NSFW models
Cleaner solution based on Reddit community feedback:
- Patch content_analyser.py to return False (always safe)
- Remove unused config file
- Remove config volume mount from compose
- Much simpler and more reliable than file deletion approach

Credit: https://www.reddit.com/r/StableDiffusion/comments/1m2w5af/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 04:23:38 +00:00
398ebd342c fix: add verbose logging to NSFW model deletion
- Added echo statements to track script execution
- Added -v flag to rm to show deleted files
- Confirmed deletion is working correctly

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 04:07:33 +00:00
dd9a9a44cb fix: allow Facefusion to start by deleting NSFW models after download
Previous approach caused infinite download loop. Now waits for models
to download, then deletes NSFW models once, allowing Gradio to start.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 04:02:30 +00:00
5768fe65ff feat: disable NSFW filter in Facefusion
- Add entrypoint script to continuously delete NSFW model files
- Add Facefusion config file (for future use)
- NSFW content filtering now disabled

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 03:52:21 +00:00