diff --git a/README.md b/README.md index ce4ede1..e33bef1 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ storage and an audio transcriber. (sam / jo / harry / finn). It remembers conversations (shown in a sidebar), can summarise web pages and documents, and can understand and generate images. It is hardened so it cannot run system commands. -- **Media tools** — browser-based editing apps: Photopea (images), KdenLive +- **Media tools** — browser-based editing apps: GIMP (images), KdenLive (video), Audacity + LMMS (audio & music). - **Transcriber** — turns audio into MIDI (Basic Pitch) and full sheet music (MuScriptor). diff --git a/docker-compose.yml b/docker-compose.yml index 5d359ea..dc71c18 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -169,16 +169,25 @@ services: <<: *logging # ----- Tool containers (profile "tools") ----- - # Images per Obsidian blueprint: Photopea shtse8, KdenLive + Audacity via - # LinuxServer standalone apps. Host ports reassigned (8081 taken by airflow, - # 3000 taken by a NixOS service) -> video 8083, audio 8084. - photopea: - image: ${IMAGE_PHOTOPEA:-shtse8/photopea:1.0} + # Images per Obsidian blueprint: media tools via LinuxServer standalone apps. + # Host ports reassigned (8081 taken by airflow, 3000 taken by a NixOS + # service) -> video 8083, audio 8084, gimp 8087. + gimp: + image: ${IMAGE_GIMP:-lscr.io/linuxserver/gimp:latest} profiles: ["tools"] restart: unless-stopped + environment: + PUID: 1000 + PGID: 100 + TZ: Australia/Melbourne + DARK_MODE: "true" ports: - - "8487:8887" + - "8087:3000" + volumes: + - gimp-config:/config + - /mnt/data/family-home-lab/shared-media:/media:ro networks: [fhl-net] + shm_size: 1gb <<: *logging video-editor: @@ -217,6 +226,7 @@ volumes: pgdata: redisdata: rabbitmqdata: + gimp-config: video-config: audio-config: diff --git a/docs/websites.md b/docs/websites.md index 8b28030..ebe6590 100644 --- a/docs/websites.md +++ b/docs/websites.md @@ -5,7 +5,7 @@ ## Public — *.lab.audasmedia.com.au console.lab # Family Home Lab portal (login) -photo.lab / video.lab / audio.lab / lmms.lab # media editor tools (basic-auth) +video.lab / audio.lab / lmms.lab / gimp.lab # media editor tools (no login) (photopea removed 2026-08-26) dsh-sam.lab dsh-jo.lab dsh-harry.lab dsh-finn.lab # DeepSeek chat (basic-auth) chat.lab # family group chat pb.chat.lab # chat admin (admin-only, basic-auth) @@ -47,9 +47,9 @@ where-woof.com admin.where-woof.com # family location homeassistant.lab.quickweb.com.au # HA mirror ## auth model -- No-login tools behind Caddy basic-auth: photo/video/audio/lmms, dsh-*, omniroute, - photo-filter, dozzle, sams, pb.chat, ntfy, plus apps left on basic-auth (toora, - homebox, phpipam, watchyourlan, librenms, kopia, backrest, filebrowser, ...). +- Media/chat browser tools (video/audio/lmms/gimp, dsh-*, omniroute, photo-filter) have NO login + (basic-auth removed 2026-08-26 so they load fully). Apps still behind basic-auth: toora, homebox, + phpipam, watchyourlan, librenms, kopia, backrest, filebrowser, dozzle, sams, pb.chat, ntfy. - Apps with own login (basic-auth REMOVED so their mobile apps/APIs work): homeassistant, nextcloud, immich, audiobookshelf, vikunja, proxmox(+backup), portainer, grafana, uptimekuma, supabase. diff --git a/portal/tools.py b/portal/tools.py index 9aa9cec..b59d725 100644 --- a/portal/tools.py +++ b/portal/tools.py @@ -72,13 +72,13 @@ def _cat() -> list[Tool]: # ---- Chat & AI ----------------------------------------------------- Tool("dsh", "DeepSeek Harness", "chat", "Your personal assistant instance", "https://dsh-sam.lab.audasmedia.com.au", - private=True, login=True), + private=True), Tool("chat-lab", "Family Chat", "chat", "Group chat — available to everyone", "https://chat.lab.audasmedia.com.au", login=True), Tool("pb-chat", "PB Chat (Admin)", "chat", "Chat admin console (admins only)", "https://pb.chat.lab.audasmedia.com.au", login=True, admin=True), Tool("ai-router", "AI Router", "ai", - "OmniRoute LLM gateway dashboard", "https://omniroute.lab.audasmedia.com.au", login=True), + "OmniRoute LLM gateway dashboard", "https://omniroute.lab.audasmedia.com.au"), Tool("n8n", "n8n", "ai", "Workflow automation", "https://n8n.lab.audasmedia.com.au", login=True), Tool("langfuse", "Langfuse", "ai", @@ -91,16 +91,16 @@ def _cat() -> list[Tool]: "LangChain dev service", "https://supabase.home.lab", login=True, lan=True, admin=True), # ---- Image --------------------------------------------------------- - Tool("photopea", "Photopea", "image", - "Browser photo & PSD editor", "https://photo.lab.audasmedia.com.au", login=True), + Tool("gimp", "GIMP", "image", + "Photo editing & retouching", "https://gimp.lab.audasmedia.com.au"), Tool("penpot", "Penpot", "image", "Open-source design & prototyping", "https://penpot.lab.audasmedia.com.au", login=True), Tool("photo-filter", "Photo Filter", "image", - "Photo utility / filtering", "https://photo-filter.lab.audasmedia.com.au", login=True), + "Photo utility / filtering", "https://photo-filter.lab.audasmedia.com.au"), # ---- Video --------------------------------------------------------- Tool("video-editor", "Video Editor", "video", - "Desktop video editing in your browser", "https://video.lab.audasmedia.com.au", login=True), + "Desktop video editing in your browser", "https://video.lab.audasmedia.com.au"), Tool("jellyfin", "Jellyfin", "media", "Movies, TV & music server", "https://jellyfin.lab.audasmedia.com.au", login=True), Tool("jellyseerr", "Jellyseerr", "media", @@ -126,9 +126,9 @@ def _cat() -> list[Tool]: # ---- Audio --------------------------------------------------------- Tool("audio-editor", "Audio Editor", "audio", - "Multi-track audio editing", "https://audio.lab.audasmedia.com.au", login=True), + "Multi-track audio editing", "https://audio.lab.audasmedia.com.au"), Tool("lmms", "LMMS Music Studio", "audio", - "Beats, melodies & full arrangements", "https://lmms.lab.audasmedia.com.au", login=True), + "Beats, melodies & full arrangements", "https://lmms.lab.audasmedia.com.au"), Tool("snapcast", "Snapcast", "audio", "Sync audio to speakers around the house", "https://snapcast.home.lab", lan=True), Tool("mopidy", "Mopidy", "audio", @@ -320,6 +320,5 @@ def _dsh_for_user(user) -> Tool: mode=base.mode, status=base.status, external=True, - login=True, private=True, ) \ No newline at end of file