Skip to content

Releases: Z1rconium/gpt-image-linux

GPT Image Panel v1.0.2

04 Jun 15:12

Choose a tag to compare

GPT Image Panel v1.0.2

v1.0.2 improves reliability for long-lived SSE clients, image job queue coordination, and production observability. This release is focused on making generate/edit progress updates more resilient under load, especially when multiple workers or many browser tabs are connected.

Highlights

  • Added SQLite-backed SSE connection leasing with global and per-IP subscriber limits.
  • Added polling-based gallery and generate job updates so browsers receive fresher job state without depending on a single in-memory process.
  • Improved image job queue coordination with active/queued capacity limits, unit leases, and clearer queue-full handling.
  • Expanded /api/metrics with worker snapshots, SSE limiter state, and runtime coordination metrics.
  • Added Granian runtime configuration for workers, runtime threads, event loop, backlog, backpressure, and immutable static asset serving.
  • Improved storage connection handling and clarified repository behavior around thread-local connections.

SSE and Job Coordination

  • Gallery SSE subscriptions now use persistent connection slots with a TTL, refresh loop, and cleanup path.
  • Connection limits can be configured independently for the whole instance and per client IP:
    • MAX_SSE_SUBSCRIBERS_GLOBAL
    • MAX_SSE_SUBSCRIBERS_PER_IP
    • SSE_CONNECTION_TTL_SECONDS
  • Generate and gallery flows now poll SQLite-backed job state for progress and completion updates.
  • Job execution now tracks active and queued generate/edit work more explicitly, which helps prevent overload when many requests arrive at once.
  • Edit source reservations are persisted so pending edit uploads can be constrained by size and job lifecycle.

Observability

  • /api/metrics now includes worker-level metric snapshots and runtime coordination data when ENABLE_METRICS=true.
  • The backend records SSE slot state and worker metric snapshots in SQLite.
  • Metrics now expose more useful queue, worker, and connection state for diagnosing multi-worker deployments.
  • Slow gallery query logging remains available through SLOW_GALLERY_QUERY_MS.

Runtime and Deployment

  • Docker runtime configuration now exposes Granian tuning options:
    • GRANIAN_WORKERS
    • GRANIAN_RUNTIME_THREADS
    • GRANIAN_LOOP
    • GRANIAN_BACKPRESSURE
    • GRANIAN_BACKLOG
    • GRANIAN_STATIC_PATH_ROUTE
    • GRANIAN_STATIC_PATH_MOUNT
    • GRANIAN_STATIC_PATH_EXPIRES
  • The published GHCR image is available as:
    • ghcr.io/z1rconium/gpt-image-linux:v1.0.2
    • ghcr.io/z1rconium/gpt-image-linux:latest
  • The release docker-compose.yml uses the prebuilt GHCR image directly instead of building from source.

Fixes

  • Improved SQLite storage connection handling for repository operations.
  • Added tests for SSE slot management, background lease completion, queue behavior, edit source reservation failures, and contract-level behavior around the new job lifecycle.
  • Updated documentation and environment examples for the new queue, SSE, metrics, and Granian runtime settings.

Upgrade

Docker

docker pull ghcr.io/z1rconium/gpt-image-linux:v1.0.2
docker run --rm -p 127.0.0.1:9090:9090 \
  -v "$PWD/images:/app/images" \
  -v "$PWD/data:/app/data" \
  --env-file .env.example \
  ghcr.io/z1rconium/gpt-image-linux:v1.0.2

Docker Compose

Download the release compose file and environment example:

curl -Lo docker-compose.yml https://github.com/Z1rconium/gpt-image-linux/releases/download/v1.0.2/docker-compose.yml
curl -Lo .env.example https://github.com/Z1rconium/gpt-image-linux/releases/download/v1.0.2/env.example
docker compose up -d

Release Assets

  • docker-compose.yml: compose file that runs the published GHCR image.
  • env.example: environment template; download it as .env.example if you want the conventional local filename.
  • gpt-image-panel-v1.0.2-prebuilt.tar.gz: offline source/runtime bundle with the built frontend included.
  • SHA256SUMS: checksums for the release assets.

Changelog

Full comparison: v1.0.1...v1.0.2

Commits included:

  • c269956 fix(storage): improve connection handling and update docstring for clarity
  • 6e520cc feat: Implement SSE polling for gallery and generate jobs with queue management
  • 29ee284 Enhance SSE connection management and observability metrics
  • 5e74932 chore: release v1.0.2

v1.0.1

03 Jun 15:19

Choose a tag to compare

Overview

GPT Image Linux v1.0.1 is a Gallery export and R2 backup reliability release focused on large libraries and multi-worker deployments. It moves Gallery export/sync coordination further into SQLite so GRANIAN_WORKERS>1 deployments can safely share tracked export jobs, direct ZIP downloads, R2 sync jobs, progress updates, and cleanup behavior across worker processes.

The release also refreshes the published GHCR image and latest tag.

Container Image

Multi-platform GHCR image:

ghcr.io/z1rconium/gpt-image-linux:v1.0.1
ghcr.io/z1rconium/gpt-image-linux:latest

Manifest digest:

sha256:3c63d9dbf21461e89fec7afe6721541746b4ded98a77df19680eeea1c5a29a00

Verified platforms:

linux/amd64
linux/arm64

What's Changed

Gallery export jobs are now SQLite-backed across workers

Tracked Gallery ZIP export jobs now persist their lifecycle in SQLite, including queued/running/success/error state, progress fields, lease ownership, output path, archive filename, counters, and download URL. Workers claim queued or expired running jobs through SQLite leases, so export job creation, status polling, SSE progress, and download behavior work across multiple Granian worker processes.

This keeps the public API stable while making tracked export jobs usable in multi-worker deployments:

  • POST /api/gallery/export-jobs
  • GET /api/gallery/export-jobs/{job_id}
  • GET /api/gallery/export-jobs/{job_id}/events
  • GET /api/gallery/export-jobs/{job_id}/download

Direct ZIP downloads share global export capacity

Direct Gallery ZIP downloads, including /api/download-all and selected batch ZIP downloads, now reserve short-lived SQLite export_direct slot rows. These slots count against the same global export capacity as tracked export jobs, preventing multiple worker processes from each allowing their own local maximum and overselling export concurrency.

The default export concurrency semantics remain MAX_ACTIVE_EXPORT_JOBS = 5, but the limit is now enforced across workers for both direct and tracked exports.

Progress writes are throttled and lighter

Gallery export and R2 sync progress updates now use a shared throttling path. High-frequency progress updates write to SQLite at most every 0.5 seconds or every 50 processed entries, while stage changes and terminal states still force a final update.

Progress-only updates also avoid the previous update-then-select pattern. SSE clients still poll the same gallery_jobs.updated_at edge and receive the same event names and payload shape, but large exports and syncs now create much less SQLite write pressure.

ZIP export metadata avoids expensive hash backfills

ZIP export metadata now uses stored sha256 and bytes values when available. If a row is missing sha256, export no longer reads the whole image file just to compute a hash during ZIP creation. Missing byte sizes are filled from a cheap stat() where possible.

This keeps ZIP export low-memory and reduces repeated disk reads on large galleries.

R2 sync handles large prefixes better

R2 Gallery backup sync now limits how much remote listing data it keeps in memory. The sync still lists the configured R2_KEY_PREFIX, but it retains only remote keys that match local Gallery filenames. For very large remote prefixes, it stops accumulating the listing and falls back to per-file HeadObject checks for local candidates.

The backup semantics remain unchanged:

  • local Gallery remains the source of truth
  • missing local files are skipped
  • existing remote objects are skipped
  • bucket-only objects are not deleted
  • Gallery images are never served from R2

Export cleanup is more robust

Stale export ZIP cleanup now tracks active export job file paths through SQLite job rows, reducing the chance of deleting files that still belong to active or downloadable jobs. Expired direct export slot rows are also garbage collected so interrupted direct downloads do not leave permanent capacity records behind.

SQLite indexes and cleanup queries improved

The gallery_jobs table now has more targeted indexes for active job counting, claiming, and terminal job cleanup. Terminal export/sync cleanup also filters stale rows on the SQL side instead of loading all terminal rows and filtering them in Python.

Release Assets

Attached assets:

  • docker-compose.yml - image-based Compose file pinned to ghcr.io/z1rconium/gpt-image-linux:v1.0.1
  • env.example - environment template; download it as .env.example if desired
  • gpt-image-panel-v1.0.1-prebuilt.tar.gz - offline prebuilt package with backend source, frontend build output, docs, deployment files, and runtime directory placeholders
  • SHA256SUMS - checksums for the release assets

Download the env template as .env.example:

curl -Lo .env.example https://github.com/Z1rconium/gpt-image-linux/releases/download/v1.0.1/env.example

Docker Run

Minimal local run:

docker run --rm \
  -p 127.0.0.1:9090:9090 \
  -v "$PWD/images:/app/images" \
  -v "$PWD/data:/app/data" \
  --env-file .env.example \
  ghcr.io/z1rconium/gpt-image-linux:v1.0.1

Then open:

http://127.0.0.1:9090

Docker Compose

Download the release Compose file and env template:

curl -LO https://github.com/Z1rconium/gpt-image-linux/releases/download/v1.0.1/docker-compose.yml
curl -Lo .env.example https://github.com/Z1rconium/gpt-image-linux/releases/download/v1.0.1/env.example
mkdir -p images data
docker compose up -d

Checksums

904d50b5012ebba41f877cacfaed373539204e2ee3e7b2271371988ecab92afa  docker-compose.yml
ec0224cceee093dc8f80cf1ff498a5cef81420b6993e3cf81e40cca55dcab7c3  env.example
c465025bcdd2244f2ce7689fc94883ec6a8128462753543736f41a076b157496  gpt-image-panel-v1.0.1-prebuilt.tar.gz

Changelog

Full comparison: v1.0.0...v1.0.1

Commits included:

  • a9f777b feat(gallery): implement gallery job management and persistence
  • a825a78 feat(gallery): enhance cleanup of stale export files with job tracking
  • af6e8d6 feat(gallery): enhance gallery export management with direct download slots and progress throttling
  • 349e27a chore: release v1.0.1

GPT Image Panel v0.7.5

01 Jun 10:39

Choose a tag to compare

GPT Image Panel v0.7.5

This release focuses on mobile usability, touch interactions, and interaction polish across the image gallery, drawers, dialogs, and lightbox.

Highlights

  • Added swipe-to-close support for mobile drawers and dialogs, making settings, prompt snippets, job history, edit preview, and image preview surfaces easier to dismiss on touch devices.
  • Improved mobile lightbox behavior with better viewport sizing, safer touch gestures, and more reliable controls in constrained layouts.
  • Refined gallery card layout and hover behavior so pointer-based effects only apply where they make sense, while touch devices get steadier cards and larger interaction targets.
  • Added a plain-text input action to disable autocorrect, autocapitalize, and spellcheck where prompt text should stay literal.
  • Tightened accessibility details with clearer labels, roles, and mobile-friendly button hit areas.

Changes

Mobile and Touch UX

  • Added swipeClose action for touch-driven close gestures.
  • Applied mobile-specific layout rules for lightbox and drawer-style components.
  • Improved dialog and drawer ergonomics on small screens, including settings, prompt snippets, job history, and edit preview flows.
  • Adjusted header and action controls for more reliable mobile tapping.

Gallery and Preview Polish

  • Updated gallery card hover behavior to respect pointer capabilities.
  • Improved loading and image-display layout in the gallery grid.
  • Refined lightbox controls and sizing to avoid cramped or unstable mobile layouts.
  • Improved edit preview modal layout consistency.

Input and Accessibility

  • Added plainTextInput action for literal prompt fields.
  • Disabled unwanted browser text transformations in prompt entry areas.
  • Improved aria labels, roles, and touch target consistency for interactive controls.

Container Image

Multi-platform image published to GHCR:

docker pull ghcr.io/z1rconium/gpt-image-linux:v0.7.5

Supported platforms:

  • linux/amd64
  • linux/arm64

Docker Run

docker run -d \
  --name gpt-image-panel \
  -p 127.0.0.1:9090:9090 \
  -v "$(pwd)/images:/app/images" \
  -v "$(pwd)/data:/app/data" \
  --env-file .env.example \
  ghcr.io/z1rconium/gpt-image-linux:v0.7.5

Then open:

http://127.0.0.1:9090

Docker Compose

Download the release compose file and environment example, then start the service:

curl -Lo docker-compose.yml https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.7.5/docker-compose.yml
curl -Lo .env.example https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.7.5/env.example
mkdir -p images data
docker compose up -d

The release docker-compose.yml uses the prebuilt image:

ghcr.io/z1rconium/gpt-image-linux:v0.7.5

Release Assets

  • docker-compose.yml - Docker Compose file pinned to the v0.7.5 GHCR image.
  • env.example - Environment template. Download it as .env.example when deploying.
  • gpt-image-panel-v0.7.5-prebuilt.tar.gz - Offline source/runtime package with the built frontend included.
  • SHA256SUMS - Checksums for release assets.

Checksums

Verify downloaded assets with:

shasum -a 256 -c SHA256SUMS

Full Changelog

v0.7.4...v0.7.5

GPT Image Panel v0.7.4

01 Jun 09:37

Choose a tag to compare

GPT Image Panel v0.7.4

v0.7.4 focuses on gallery performance, SQLite connection reuse, SSE reliability, and safer gallery file handling. The release also publishes refreshed multi-platform GHCR images for both linux/amd64 and linux/arm64.

Highlights

  • Added reusable gallery image and thumbnail path resolution helpers so download and batch-download flows can resolve stored files consistently without duplicating path logic.
  • Improved batch download handling around gallery image files and thumbnail paths.
  • Reworked SQLite storage access to reuse a thread-local connection instead of opening and closing a new SQLite connection for every repository operation.
  • Added explicit connection cleanup through close_database_connections() so shutdown and tests can still deterministically close the current thread's SQLite handle.
  • Replaced the gallery total-bytes cache full-clear behavior with LRU eviction to avoid cache stampedes when the cache reaches capacity.
  • Moved missing gallery byte-size backfill disk stat() calls outside the active database query loop, keeping database work and disk filesystem checks separated.
  • Removed the duplicate gallery prompt-search debounce in the UI. The store-level debounce remains, reducing effective prompt search latency from roughly 550 ms to 250 ms.
  • Improved JSON EventSource handling by separating permanent JSON parse failures from transient network errors.
  • Kept native EventSource reconnection behavior available for network errors while retaining polling fallback for job updates.
  • Updated contract coverage for the new SQLite connection lifecycle.

Container Image

The release image is available from GHCR:

docker pull ghcr.io/z1rconium/gpt-image-linux:v0.7.4

latest has also been updated to the same image:

docker pull ghcr.io/z1rconium/gpt-image-linux:latest

Published manifest digest:

sha256:31654fde8eaad2a83b64c5efd84a2d245418711de19255fb7ca56e5134fe4730

Platforms:

  • linux/amd64
  • linux/arm64

Docker Run

mkdir -p data images

docker run -d \
  --name gpt-image-panel \
  -p 127.0.0.1:9090:9090 \
  -v "$PWD/images:/app/images" \
  -v "$PWD/data:/app/data" \
  --env-file .env.example \
  ghcr.io/z1rconium/gpt-image-linux:v0.7.4

Open:

http://127.0.0.1:9090

Docker Compose

Download the release compose file and env example:

curl -Lo docker-compose.yml https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.7.4/docker-compose.yml
curl -Lo .env.example https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.7.4/env.example

Then start the service:

docker compose up -d

The release docker-compose.yml uses:

ghcr.io/z1rconium/gpt-image-linux:v0.7.4

Release Assets

  • docker-compose.yml - image-based Compose file pinned to ghcr.io/z1rconium/gpt-image-linux:v0.7.4.
  • env.example - environment template. Download it as .env.example with curl -Lo .env.example .../env.example.
  • gpt-image-panel-v0.7.4-prebuilt.tar.gz - prebuilt offline package with backend code, frontend source/config, frontend/build/, deployment files, and required project metadata.
  • SHA256SUMS - checksums for all release assets.

Verification

This release was verified with:

  • npm run frontend:build
  • docker buildx imagetools inspect ghcr.io/z1rconium/gpt-image-linux:v0.7.4
  • docker buildx imagetools inspect ghcr.io/z1rconium/gpt-image-linux:latest

The image manifest list contains both linux/amd64 and linux/arm64, and v0.7.4 and latest point to the same digest.

Full Changelog

v0.7.3...v0.7.4

GPT Image Panel v0.7.3

01 Jun 05:04

Choose a tag to compare

GPT Image Panel v0.7.3

v0.7.3 is a security-focused release that also adds scheduled Cloudflare R2 gallery backup sync. It tightens access-token signing, CSRF handling, upstream image downloads, version endpoint exposure, and SOCKS5 proxy observability while keeping the existing public API shapes and job lifecycle behavior stable.

Highlights

  • Added configurable scheduled R2 Gallery Sync via R2_SYNC_INTERVAL_HOURS.
  • Hardened access-token signing by removing the hard-coded fallback signing secret.
  • Tightened CSRF origin checks for unsafe browser requests, including auth-exempt mutation endpoints.
  • Moved version endpoints behind the access gate when ACCESS_KEY is configured.
  • Restricted upstream-returned image URL downloads to HTTPS.
  • Added startup warnings for unauthenticated deployments.
  • Added SOCKS5 upstream proxy trust-boundary logging when local DNS resolves the upstream host to private/internal IPs.
  • Tightened CSP style policy from broad inline styles to inline style attributes only.

Cloudflare R2 Gallery Sync

This release adds scheduled gallery backup sync for Cloudflare R2 compatible storage.

  • New R2_SYNC_INTERVAL_HOURS setting controls the background sync cadence.
  • 0 disables scheduled sync and is the default.
  • The scheduler starts regular Gallery Sync jobs using the same repository and job-state paths as manual sync.
  • R2 sync still only operates on the configured prefix and does not serve, overwrite, or delete gallery images from R2.
  • The setting is available through environment configuration, Docker Compose, backend settings, API schemas, and the frontend settings drawer.

Security Hardening

Access Token Signing

Access-token HMAC signing no longer falls back to the public development string gpt-image-panel-dev-secret.

The signing secret is now derived from:

  1. ACCESS_KEY
  2. resolved DEFAULT_API_KEY

If neither is available when a token is created or verified, the backend raises a runtime error instead of signing with a predictable secret.

CSRF Checks

Unsafe browser requests now require a trustworthy source signal:

  • matching Origin
  • matching Referer
  • or Sec-Fetch-Site: same-origin

Requests with Sec-Fetch-Site: cross-site are rejected. Requests with no Origin, Referer, or same-origin fetch metadata are also rejected, including auth-exempt mutation endpoints such as /api/access.

This preserves the existing same-origin development proxy workflow while closing the previous no-cookie/no-source bypass.

Version Endpoint Access

/api/version and /api/version/latest are no longer auth-exempt when ACCESS_KEY is configured. The frontend now loads version metadata only after access status passes or after the access key unlock succeeds.

This reduces unauthenticated version fingerprinting while preserving the header update badge for authenticated users.

HTTPS-Only Upstream Image Downloads

Upstream-returned image URLs must now use HTTPS. Plain HTTP image URLs are rejected before the backend attempts to fetch them.

This aligns image URL downloads with the stricter upstream API and webhook URL scheme requirements.

Unauthenticated Mode Warning

When ALLOW_UNAUTHENTICATED=true is set and ACCESS_KEY is unset, startup logs a warning that all non-health API routes are unauthenticated.

This does not remove local development support, but it makes production misconfiguration much more visible.

SOCKS5 Proxy Trust Boundary

The backend continues to perform pre-connection upstream URL validation. When a SOCKS5 upstream proxy is configured and the upstream hostname resolves locally to private/internal IPs, the backend logs a warning explaining that the SOCKS5 proxy is the trust boundary for remote DNS and network reachability.

CSP Style Policy

The CSP policy now uses:

  • style-src 'self'
  • style-src-attr 'unsafe-inline'

This avoids allowing arbitrary inline <style> blocks while retaining compatibility with the few existing inline style attributes used by the frontend.

Docker Images

Multi-architecture images are published to GHCR:

  • ghcr.io/z1rconium/gpt-image-linux:v0.7.3
  • ghcr.io/z1rconium/gpt-image-linux:latest

The v0.7.3 manifest digest is:

sha256:b63ed24c364d1733c6c0733480ae3b7ae3e8ad27c8cc6b787129b236bf2b9e9e

Supported platforms:

  • linux/amd64
  • linux/arm64

Run directly with Docker:

docker run -d \
  --name gpt-image-panel \
  -p 127.0.0.1:9090:9090 \
  -v ./images:/app/images \
  -v ./data:/app/data \
  --env-file .env \
  ghcr.io/z1rconium/gpt-image-linux:v0.7.3

Docker Compose

Download the release assets:

curl -LO https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.7.3/docker-compose.yml
curl -Lo .env.example https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.7.3/env.example
cp .env.example .env

Edit .env, set ACCESS_KEY, configure your upstream API settings, then start:

docker compose up -d

The release docker-compose.yml uses the published GHCR image directly:

ghcr.io/z1rconium/gpt-image-linux:v0.7.3

Release Assets

This release includes:

  • docker-compose.yml - image-based Compose file pinned to v0.7.3
  • env.example - environment template; download as .env.example if desired
  • gpt-image-panel-v0.7.3-prebuilt.tar.gz - prebuilt offline package with frontend/build/
  • SHA256SUMS - checksums for release assets

Verify downloads:

shasum -a 256 -c SHA256SUMS

Changelog

Full changelog:

v0.7.2...v0.7.3

Included commits:

  • 3331c2b - feat: add R2 sync interval configuration and scheduled sync functionality
  • ce36401 - Refactor authentication and security features
  • 09b3462 - chore: release v0.7.3

GPT Image Panel v0.7.2

31 May 11:53

Choose a tag to compare

GPT Image Panel v0.7.2

This release adds Overall Config, a SQLite-backed configuration layer for environment variables that are not already exposed in the main Settings form. It also improves upstream preset health checks for GPT-compatible gateways that do not implement OPTIONS or HEAD consistently.

Highlights

  • Added an Overall Config modal in Settings for runtime, security, observability, limits, path, webhook, SSE, and Docker build-image variables declared in .env.example.
  • Added SQLite-backed overrides with the effective priority SQLite override > current environment > code default.
  • Added startup synchronization from the current process environment into SQLite so the UI can show the active env snapshot without rewriting .env.
  • Added secret-aware Overall Config handling: real secret override values are stored only when explicitly saved, while API responses and the UI return masked values.
  • Added restart/build-only metadata so operators can see which changes apply immediately and which need a container restart or rebuild.
  • Changed preset health status calculation so an isolated upstream_probe failure does not mark an otherwise valid preset as failed.
  • Treats OPTIONS 404/410 probes as warnings because many GPT-compatible gateways only implement POST.

Overall Config

The new Overall Config flow covers .env.example variables that were previously only configurable through environment files or container settings, while avoiding duplication with the main Settings form.

Included categories:

  • App version and GitHub update checks
  • Metrics and slow gallery query logging
  • Prompt Optimizer response/host limits not already in Settings
  • Access gate, cookie, reverse proxy, host allowlist, CSRF, and upstream host allowlist settings
  • Webhook signing, timeout, attempt, and host allowlist settings
  • Upload, import, decoded image, and upstream response limits
  • Job queue and SSE connection limits
  • Runtime path fields such as DATA_DIR, DATABASE_FILE, IMAGES_DIR, and THUMBNAILS_DIR
  • Docker build image knobs such as PYTHON_BASE_IMAGE and NODE_BASE_IMAGE

Not duplicated in Overall Config:

  • API presets
  • Global SOCKS5 proxy
  • Prompt Optimizer basic endpoint/model/key settings
  • R2 Backup basic settings

Those remain in the main Settings drawer.

Secret Handling

Secret values are never returned in plaintext from the Overall Config API.

  • API/UI responses return masked values for secret fields.
  • Sending ******** preserves the existing secret override.
  • Entering a new secret stores that new override in SQLite.
  • Reset to .env clears the SQLite override and falls back to the current environment value or code default.

This lets container rebuilds keep operator-saved overrides as long as the SQLite data volume is preserved.

API Changes

New endpoints:

  • GET /api/settings/overall-config
    • Lists Overall Config items with group, type, masked values, source, env/override state, and restart/build-only flags.
  • PUT /api/settings/overall-config
    • Saves or clears SQLite overrides in bulk.
    • Returns updated config and restart_required_names.

Validation behavior:

  • Unknown keys return 422.
  • Invalid bool/int/float values return 422.
  • Invalid GitHub repository values return 422.
  • Invalid proxy/security configuration returns 422.
  • Secret fields support masked preserve semantics.

Preset Health Checks

Preset health checks now separate diagnostic probe failures from blocking configuration failures.

  • URL, API path, SSRF, allowlist, and API key errors still fail the preset health check.
  • upstream_probe remains visible in the checks list.
  • If upstream_probe is the only error, the overall preset health status is ok.
  • OPTIONS 404/410 is reported as a warning because many compatible gateways only support POST.

Documentation and Tests

Updated documentation covers:

  • Overall Config behavior and precedence
  • SQLite override persistence
  • secret masking and masked preserve behavior
  • restart-required and build-only config fields
  • new Overall Config API endpoints
  • health probe diagnostic behavior

Validation completed for this release:

  • npm run frontend:check
  • npm run frontend:build
  • npm run test:contract
  • npm run test:e2e

Container Image

Published GHCR image:

ghcr.io/z1rconium/gpt-image-linux:v0.7.2

The latest tag has also been updated to the same image.

Manifest digest:

sha256:eed140f1baa2b5a6073c201c1649a100ce0a3089cbb552b5062c5907e9cc4f6e

Supported platforms:

  • linux/amd64
  • linux/arm64

Docker Run

mkdir -p images data
curl -Lo .env.example https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.7.2/env.example

docker run -d \
  --name gpt-image-panel \
  -p 127.0.0.1:9090:9090 \
  --env-file .env.example \
  -v "$PWD/images:/app/images" \
  -v "$PWD/data:/app/data" \
  ghcr.io/z1rconium/gpt-image-linux:v0.7.2

Open http://localhost:9090 after the container starts.

Docker Compose

mkdir -p images data
curl -LO https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.7.2/docker-compose.yml
curl -Lo .env.example https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.7.2/env.example

docker compose up -d

Release Assets

This release includes:

  • docker-compose.yml - production-style Compose file pinned to ghcr.io/z1rconium/gpt-image-linux:v0.7.2
  • env.example - environment template; download it as .env.example with curl -Lo .env.example .../env.example
  • gpt-image-panel-v0.7.2-prebuilt.tar.gz - prebuilt offline package including backend code, frontend source, and frontend/build/
  • SHA256SUMS - SHA-256 checksums for the release assets

Full Changelog

v0.7.1...v0.7.2

v0.7.1

30 May 10:14

Choose a tag to compare

Highlights

v0.7.1 improves R2 configuration persistence and makes the deployment environment template complete.

R2 environment persistence

  • When SQLite has no saved R2 backup settings yet, the backend now persists the current R2_* environment-derived settings on startup/settings load.
  • This makes .env-based R2 configuration visible in the Web Settings panel instead of only being used as an implicit runtime fallback.
  • Empty saved R2 records are filled from environment defaults while preserving user-saved Web Settings once they exist.
  • R2 credentials continue to be represented safely as ${ENV_VAR_NAME} references by default, with literal persistence still gated by ALLOW_PLAINTEXT_SECRETS=true.

Complete environment template

  • .env.example now covers every runtime environment variable read by the backend.
  • The template is grouped by purpose: upstream API defaults, update checks, prompt optimizer, R2 backup, access/security, webhooks, import/upload limits, job/SSE limits, storage paths, and Docker build images.
  • Each variable now has a short operational note so self-hosted deployments can understand what should be changed and what can be left alone.
  • docker-compose.yml now forwards the full supported environment surface into the container, so values added to .env work consistently under Compose.

Documentation and tests

  • README environment-variable tables were updated to include the previously undocumented access cookie, trusted proxy, CSRF, upstream allowlist, SSE, and storage-path options.
  • Contract tests now verify that missing or empty R2 settings are actually persisted into SQLite, not just returned as transient defaults.

Container image

Published multi-platform image:

ghcr.io/z1rconium/gpt-image-linux:v0.7.1
ghcr.io/z1rconium/gpt-image-linux:latest

Platforms:

  • linux/amd64
  • linux/arm64

Docker run

mkdir -p images data
docker run -d --name gpt-image-panel \
  -p 127.0.0.1:9090:9090 \
  -v "$PWD/images:/app/images" \
  -v "$PWD/data:/app/data" \
  -e ACCESS_KEY='change-me' \
  ghcr.io/z1rconium/gpt-image-linux:v0.7.1

Open http://127.0.0.1:9090 and unlock with the ACCESS_KEY value.

Docker Compose

curl -LO https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.7.1/docker-compose.yml
curl -Lo .env.example https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.7.1/env.example
cp .env.example .env
# edit .env and set at least ACCESS_KEY, or explicitly set ALLOW_UNAUTHENTICATED=true
docker compose up -d

Release assets

  • docker-compose.yml - image-based Compose file pinned to ghcr.io/z1rconium/gpt-image-linux:v0.7.1.
  • env.example - complete environment template. Download it as .env.example if you want the leading dot locally.
  • gpt-image-panel-v0.7.1-prebuilt.tar.gz - offline package containing backend code, frontend source/config, prebuilt frontend/build/, deployment files, and runtime .gitkeep directories.
  • SHA256SUMS - checksums for the release assets above.

Validation

  • npm run frontend:build
  • npm run test:contract
  • Multi-platform Docker build and push for linux/amd64 and linux/arm64

Changelog

Full comparison: v0.7.0...v0.7.1

Included commits:

  • 190f380 - feat: enhance R2 backup functionality with improved settings persistence and environment variable support
  • 3d1325a - chore: release v0.7.1

v0.7.0

29 May 15:36

Choose a tag to compare

v0.7.0

This release adds Cloudflare R2 gallery backup support and publishes a multi-platform GHCR image.

Highlights

  • Added R2 backup settings for endpoint, bucket, region, key prefix, and credentials.
  • Added Settings health checks for R2 configuration using bucket/list/probe-object validation.
  • Added Gallery Sync jobs for incremental image backup to Cloudflare R2 with progress/status reporting.
  • Added backend R2 sync integration, object listing/upload logic, and contract coverage.
  • Added frontend Gallery Sync controls and R2 settings UI.

Container Image

GHCR image:

docker pull ghcr.io/z1rconium/gpt-image-linux:v0.7.0

Run with Docker:

docker run -d --name gpt-image-panel \
  -p 127.0.0.1:9090:9090 \
  -v "$PWD/images:/app/images" \
  -v "$PWD/data:/app/data" \
  --env-file .env.example \
  ghcr.io/z1rconium/gpt-image-linux:v0.7.0

Run with Docker Compose:

curl -LO https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.7.0/docker-compose.yml
curl -Lo .env.example https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.7.0/env.example
docker compose up -d

Release Assets

  • docker-compose.yml
  • env.example
  • gpt-image-panel-v0.7.0-prebuilt.tar.gz
  • SHA256SUMS

Full changelog: v0.6.16...v0.7.0

v0.6.16

28 May 09:25

Choose a tag to compare

GPT Image Linux v0.6.16

This release focuses on SQLite-backed gallery performance and operational behavior for larger libraries.

Highlights

  • Added asynchronous backfill for gallery byte sizes so legacy metadata repair no longer blocks startup and can run more safely in the background.
  • Extended the gallery database schema with an explicit sort sequence to support more stable ordering and future query optimization work.
  • Removed unused SQLite indices from gallery_entries and prompt_snippets to reduce write overhead and keep the schema leaner.

Changes

Gallery metadata backfill

  • Moved gallery byte-size backfill work to an asynchronous flow.
  • Reduced the amount of blocking maintenance work performed during startup.
  • Improved the database path for legacy rows that are missing byte-size metadata.

Database schema and query behavior

  • Added sort-sequence support to the gallery schema.
  • Simplified the SQLite index set by removing indices that were no longer pulling their weight.
  • Kept the storage layer aligned with recent gallery ordering and maintenance changes.

Docker image

  • ghcr.io/z1rconium/gpt-image-linux:v0.6.16
  • ghcr.io/z1rconium/gpt-image-linux:latest

Run directly with Docker:

docker run -d \
  --name gpt-image-panel \
  -p 127.0.0.1:9090:9090 \
  -v $(pwd)/images:/app/images \
  -v $(pwd)/data:/app/data \
  --env-file ./.env.example \
  ghcr.io/z1rconium/gpt-image-linux:v0.6.16

Run with Docker Compose:

curl -Lo docker-compose.yml https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.6.16/docker-compose.yml
curl -Lo .env.example https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.6.16/env.example
docker compose up -d

Release assets

  • docker-compose.yml
  • env.example
  • gpt-image-panel-v0.6.16-prebuilt.tar.gz
  • SHA256SUMS

Full changelog

GPT Image Panel v0.6.15

28 May 05:12

Choose a tag to compare

GPT Image Panel v0.6.15

This release improves how the backend handles upstream GPT-compatible API responses when the upstream service returns malformed JSON or a non-JSON body.

What Changed

  • Added stricter upstream response content-type validation before attempting to parse JSON.
  • Improved diagnostics for upstream responses that claim success but return HTML, plain text, or another non-JSON payload.
  • Preserved existing request routing and async job behavior while making upstream failures easier to understand from API errors and logs.
  • Added backend contract coverage for invalid upstream response content types and malformed JSON payloads.

Docker Image

The multi-platform image is available on GHCR:

docker pull ghcr.io/z1rconium/gpt-image-linux:v0.6.15
docker pull ghcr.io/z1rconium/gpt-image-linux:latest

Supported platforms:

  • linux/amd64
  • linux/arm64

Quick Start

Run with Docker:

docker run --rm \
  -p 127.0.0.1:9090:9090 \
  -v "$PWD/images:/app/images" \
  -v "$PWD/data:/app/data" \
  -e DEFAULT_API_URL="https://api.openai.com" \
  -e DEFAULT_API_KEY="YOUR_API_KEY" \
  -e ACCESS_KEY="change-me" \
  ghcr.io/z1rconium/gpt-image-linux:v0.6.15

Run with Docker Compose:

curl -LO https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.6.15/docker-compose.yml
curl -Lo .env.example https://github.com/Z1rconium/gpt-image-linux/releases/download/v0.6.15/env.example
cp .env.example .env
docker compose --env-file .env up -d

Release Assets

  • docker-compose.yml - production Compose file pinned to ghcr.io/z1rconium/gpt-image-linux:v0.6.15
  • env.example - environment variable template; download it as .env.example if needed
  • gpt-image-panel-v0.6.15-prebuilt.tar.gz - prebuilt offline package including backend code and the built frontend
  • SHA256SUMS - checksums for all release assets

Full Changelog

v0.6.14...v0.6.15