No description
  • TypeScript 63.7%
  • Python 34.9%
  • CSS 0.6%
  • JavaScript 0.5%
  • Dockerfile 0.2%
  • Other 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Bugsy 59fe167704
All checks were successful
Build and Push / test (pull_request) Successful in 1m26s
Build and Push / build-and-push (pull_request) Has been skipped
Build and Push / test (push) Successful in 1m26s
Build and Push / build-and-push (push) Successful in 22s
Hand Gallery images to Interstitial Director
2026-10-28 01:22:35 -04:00
.forgejo/workflows Clarify Curator inventory states 2026-09-22 13:35:44 -04:00
docs Add Civitai tag browsing/autocomplete to Discover 2026-09-27 11:14:36 -04:00
frontend Hand Gallery images to Interstitial Director 2026-10-28 01:22:35 -04:00
icons Add PWA install support and an in-app fullscreen toggle 2026-07-22 21:01:47 -04:00
tests Hand Gallery images to Interstitial Director 2026-10-28 01:22:35 -04:00
.dockerignore Extract Comfy Gallery into standalone application repo 2026-09-09 09:24:24 -04:00
.gitignore Extract Comfy Gallery into standalone application repo 2026-09-09 09:24:24 -04:00
civitai_lora_bridge.py Surface library tags in Discover's Explore tags row 2026-09-27 11:26:26 -04:00
civitai_routes.py Add Civitai tag browsing/autocomplete to Discover 2026-09-27 11:14:36 -04:00
Dockerfile Add Tunarr bumper studio workflow 2026-10-21 01:59:49 -04:00
librarian_bridge.py Split ComfyUI prompt library storage 2026-08-16 00:22:04 -04:00
library_routes.py Fix curator library validation route 2026-09-03 00:48:17 -04:00
lora_pairings_bridge.py Tag prompt presets with matching LoRAs 2026-08-20 01:20:05 -04:00
lora_pairings_routes.py Redesign prompt library: tags, direct entry creation, LoRA pairing, better drafts 2026-08-02 11:19:51 -04:00
main.py Hand Gallery images to Interstitial Director 2026-10-28 01:22:35 -04:00
README.md Hand Gallery images to Interstitial Director 2026-10-28 01:22:35 -04:00
recipe_bridge.py Merge prompt library and add recipe editor into comfy_gallery curator 2026-07-25 22:28:13 -04:00
recipes_routes.py Present motion preset catalog in Bumper Studio 2026-10-21 14:50:34 -04:00
requirements.txt Generate and serve real thumbnails instead of full-res images in grids 2026-08-03 13:35:46 -04:00
schemas.py Add image-to-entry drafting: upload an image, extract a suggestion via a vision model 2026-08-03 00:18:37 -04:00

Comfy Gallery

Curator inventory states

Curator keeps three model states separate:

  • On Disk means at least one managed asset file is installed locally.
  • Wanted is the durable keep/download intent stored in the configured CIVITAI_SELECTED_FILE. The checkbox in Curator changes this state.
  • Liked reflects the latest cached Civitai favorites snapshot.

Refreshing Civitai likes only changes Liked. It does not change Wanted, download a model, or delete a local file. Downloads remain an explicit action, and an On Disk model removed from Wanted is presented for removal review rather than deleted automatically.

The Civitai Browser's Discover tab searches Civitai directly, independent of the account's favorites/likes -- see docs/civitai-search-api.md for the underlying API's verified pagination, sort/filter, authentication, and rate-limit behavior.

ComfyUI output gallery and curator, including prompt-library editing, Civitai browsing, recipe management, and generation controls.

Delivery model

This repository owns the application source and container build. A push to main builds and publishes:

  • git.scruffydude.net/scruffydude/comfy-gallery:<short-sha>
  • git.scruffydude.net/scruffydude/comfy-gallery:latest

The homelab repository owns runtime configuration and deployment. Its comfy_gallery Ansible role pulls the published image; it does not copy or build application source.

The curator still mounts the homelab checkout at runtime because prompt-library editing intentionally reads and commits files maintained there. That integration is runtime data access, not application delivery.

Local build

docker build -t comfy-gallery:dev .

The frontend can be developed independently from frontend/ with npm ci and npm run dev.

Bumper Studio

Curator includes a Bumper Studio for short Tunarr interstitials. It keeps the creative and broadcast steps separate:

  1. Open an image in Gallery and choose Bumper Studio. That selected asset becomes the source; it can also be used directly for a slow zoom bumper.
  2. Optionally launch an existing video-i2v recipe. Bumper Studio follows the run and automatically switches the source to its completed Inbox video. Duplicate/edit recipes to experiment with motion, dimensions, sampler settings, and compatible LoRAs.
  3. Choose a channel message, text position, and one or more durations. A single render action creates each requested H.264/AAC duration variant in the staging pack for review and later publication to Tunarr.

Built-in messages include WE'LL BE RIGHT BACK, BE BACK SOON, SIGNAL INTERRUPTED, EMERGENCY MAINTENANCE ACTIVATED, and TRANSMISSION RESUMES SHORTLY; custom text is also supported. Preset durations are 5, 10, 15, 30, and 60 seconds, with an optional custom duration up to 120 seconds. Duration suffixes are added to each output name.

The render action is disabled unless the curator deployment provides:

  • GALLERY_BUMPER_ENABLED=true
  • GALLERY_BUMPER_BUILDER (defaults to /usr/local/bin/build-tunarr-interstitial)
  • GALLERY_BUMPER_OUTPUT_DIR (the mounted root containing Tunarr pack directories)

The builder is invoked without a shell and source/audio paths must resolve through an existing curator root. Output and pack names are slug-normalized before files are written.

Interstitial Director handoff

When the curator has GALLERY_DIRECTOR_API_URL and GALLERY_DIRECTOR_PUBLIC_URL configured, still images show a Create interstitial action. Gallery uploads the selected image to Director without moving or modifying the Gallery original, then opens the public Director URL with the copied source preselected. The API URL should use the internal service address; the public URL is the operator-facing authenticated route.