Repository navigation
Releases
v1.11.1
Studio 1.11.1
Upgrade impact: No action required. Pull the new images and restart.
Components: api 1.9.1, ui 1.6.0, workers 1.11.2, console 1.9.1 (unchanged).
Security
- Certificate trust fix for the eMudhra emSign CA incident. Images build with uv 0.13.5 and
pip 26.2.2, which stop trusting the affected certificates. - Runtime images no longer include pip. Nothing in a running Studio uses it, so it no longer
ships. - The studio-workers package publishes with the patched PyPI publishing action.
Studio's own HTTPS calls already used the fixed certificate bundle in 1.11.0.
Images
All 9 images published to GHCR with tags :1.11.1 and :latest.
docker pull ghcr.io/selfhosthub/studio-api:1.11.1
docker pull ghcr.io/selfhosthub/studio-ui:1.11.1
docker pull ghcr.io/selfhosthub/studio-worker-general:1.11.1
docker pull ghcr.io/selfhosthub/studio-worker-transfer:1.11.1
docker pull ghcr.io/selfhosthub/studio-worker-video:1.11.1
docker pull ghcr.io/selfhosthub/studio-worker-comfyui:1.11.1
docker pull ghcr.io/selfhosthub/studio-worker-audio:1.11.1
docker pull ghcr.io/selfhosthub/studio-core:1.11.1
docker pull ghcr.io/selfhosthub/studio-full:1.11.1Operators normally pull these via studio-console rather than directly.
Baked tools
studio-console1.9.1 - baked intostudio-coreandstudio-fullimages.
v1.11.0
Studio 1.11.0
Upgrade impact: Back up the database before you upgrade. On first boot, migrations encrypt
the secrets, tokens and webhook values already stored, and there is no downgrade path after
that. Nothing else to do: the encryption key is the one console already set at install.
Components: api 1.9.0, ui 1.6.0, workers 1.11.1, console 1.9.1 (unchanged).
New
- Every secret Studio stores is encrypted at rest. Organization secrets, provider
credentials, webhook tokens, secret node parameters and run-form secrets are sealed in the
database, and a write guard refuses any plaintext secret before it reaches a table. - Members see secrets as configured, never as values. Secret fields, headers and node
webhook values stay with admins; copies, imports and marketplace installs drop them. - Wait for Webhook checks the callback's auth. API Key or JWT auth with no secret answers 401.
- Logs and tracebacks are scrubbed of secret values in the API and the workers.
- Steps are called nodes everywhere a user reads them, and every page uses one label per thing.
- Notifications can be deleted or marked unread, and a rejected approval records its reason.
Fixed
- Chatterbox Turbo text to speech works. Every Turbo job failed on load before this release.
- Runs, approvals and manual nodes hand off correctly: a skipped first node, an approval,
a rerun approval and a manual node after an approval each wait or complete as they should. - Organization settings save only the section you edit, so saving one form no longer
overwrites another. - Lists fit phones: tables keep the name and actions, dialogs scroll inside themselves.
- Files and audit logs search on the server, and files keep their real upload names.
- Run actions are limited to the run's owner or an admin, and the webhook token is admin only.
- Dependencies refreshed: Pillow 13, next 16.4, cloudflared 2026.10.3, PyJWT 2.15.0,
certifi, urllib3 and the Debian base packages.
Catalog
- 23 providers move one patch version: node wording, services in create, read, update, delete
order, and the Discord webhook URL treated as a secret. OpenAI Chat Completion sends
max_completion_tokens. - Docs catalog 1.0.4: node wording throughout.
Images
All 9 images published to GHCR with tags :1.11.0 and :latest.
docker pull ghcr.io/selfhosthub/studio-api:1.11.0
docker pull ghcr.io/selfhosthub/studio-ui:1.11.0
docker pull ghcr.io/selfhosthub/studio-worker-general:1.11.0
docker pull ghcr.io/selfhosthub/studio-worker-transfer:1.11.0
docker pull ghcr.io/selfhosthub/studio-worker-video:1.11.0
docker pull ghcr.io/selfhosthub/studio-worker-comfyui:1.11.0
docker pull ghcr.io/selfhosthub/studio-worker-audio:1.11.0
docker pull ghcr.io/selfhosthub/studio-core:1.11.0
docker pull ghcr.io/selfhosthub/studio-full:1.11.0Operators normally pull these via studio-console rather than directly.
Baked tools
studio-console1.9.1 - baked intostudio-coreandstudio-fullimages.
v1.10.0
Studio 1.10.0
Upgrade impact: No action required. Workers keep working on the fleet shared secret; the
new enrollment path is opt in. SHS_MAX_UPLOAD_SIZE_MB defaults to 1024 and only refuses
what was already too large to store.
Components: api 1.8.0, ui 1.5.1, workers 1.11.0, console 1.9.1 (unchanged).
New
- Workers can enroll with their own revocable credential. A super admin mints a
single-use join token scoped to named queues, the worker exchanges it once for its own
credential, and that credential bounds which queues the worker may claim. Revoking one
credential cuts off one machine and leaves the rest of the fleet alone. - A worker from outside the deployment waits for approval. Registering with the shared
secret from a machine that is not part of the deployment files a pending request instead
of joining. Approve or reject it under Infrastructure > Workers; approving hands that
worker its own credential. - Refused credential requests are recorded. Every refusal in the worker credential gate
writes an access-denied audit event naming the worker, the job and the reason.
Fixed
- Wait for Webhook parks the run and resumes on the callback, instead of occupying a
worker while it waits. - Uploads are bounded. The API refuses a request body over
SHS_MAX_UPLOAD_SIZE_MBwith
a 413 naming the limit. - Files with the same name keep their own bytes. Library uploads are stored under their
resource id, replacing a file writes the new file beside the old one so copies that share
it are untouched, and deleting a step's copy leaves the library file in place. - Storage totals count every file under an organization's folder.
- Stale worker rows clear once a deregistered worker passes the retention window.
- Open notification sockets stop holding a database connection for the life of the socket.
- The worker enrollment panels refresh with the Infrastructure page, so a new pending
request appears without reloading the browser.
Catalog
shs/core1.0.1: the Wait for Webhook step runs inline in the API.- Provider docs: the YouTube token check uses the OAuth Playground, and the super-admin doc
carries the upload size row.
v1.9.0
Upgrade impact
No breaking changes. No action required on upgrade.
Operators running native (non-Docker) workers get a new option, not a requirement:
a worker can now authenticate with its own credential instead of the fleet shared
secret. SHS_WORKER_SHARED_SECRET keeps working exactly as before and every
existing worker is unaffected.
Components: api 1.7.0, ui 1.4.0, workers 1.10.0.
New
- Worker enrollment. A super admin mints a single-use join token under
Infrastructure -> Workers, scoped to named queues. The worker exchanges it once
withstudio-workers enroll --join-token <token>and keeps its own credential.
That credential bounds which queues the worker may claim, and revoking it cuts
off one machine without touching any other worker. Only hashes are stored, so a
token and a credential are each shown exactly once. - Inbound webhooks can start a workflow. A workflow carries a declarative
webhook trigger config: it answers a sender's URL-verification handshake, and
it verifies signatures over the raw request body, which is what Slack'sv0=
scheme requires. Bodies parse by content type, and a body that will not parse is
rejected rather than dispatched as empty. - Narrate in one language, prompt the images in another. Scene Content
Designer takes an optional Image Prompt Language alongside its existing
Language. Left on "Same as narration" it behaves exactly as before.
Fixed
- The language you pick on the run form reaches every step. Picking Japanese
produced a Japanese story and then English scenes, images and narration. A
submitted value now wins over any stored copy, including inside{{ }}
expressions, which is what feeds the uploaded video's language tags. - Prompt dropdowns show real names, not raw codes. A Language dropdown read
"En, Es, Ja" because install discarded the display labels a prompt package
ships. All 19 now arrive, English first then alphabetical. - A generated image reports the seed that made it. ComfyUI runs asked for a
random seed reportedseed: 0on every image, so nothing could be reproduced. - The Subtitle Style dropdown does what it says. Standard burns one caption
line per phrase; Karaoke keeps the word-by-word highlight. Both rendered the
highlight before. The lit word also no longer grows its background box. - Auto-subtitles work on a job with no narration text.
- Stripe steps send nested fields correctly. Anything with structure inside it
(metadata,address,line_items,payment_method_types) reached Stripe as
unreadable text with no error on our side. - Provider credential UX: Refresh appears only where a token can be refreshed,
a non-expiring OAuth token reads as valid, and the workflow credential banner
uses the same validity rule as everything else.
Security
- The provider template renderer in the generic HTTP adapter is sandboxed.
- An enrolled worker's queue claim is bounded by its credential's recorded scope.
Previously any holder of the fleet secret could register for any allowed queue.
Catalog, published separately
Catalog content reaches every instance through the marketplace poll, not through
this upgrade. You do not need 1.9.0 to get it.
Fourteen providers become available: Airtable, Claude, Discord, Gemini, Google,
Instagram, Notion, Perplexity, Slack, Stripe, Telegram, Trello, Twilio and
Typeform. Email is not among them: it has no send transport yet.
Also ComfyUI 1.2.2, Leonardo 1.0.1, and the Scene Designer, Story Generator and
YouTube Metadata prompts at 1.0.1. Every released third-party provider doc now
points at that provider's own terms.
One thing here does need 1.9.0: Scene Content Designer's separate Image Prompt
Language is a prompt change, but the run-form ordering and label fixes it relies
on are platform code.
Images
All 9 images published to GHCR with tags :1.9.0 and :latest.
docker pull ghcr.io/selfhosthub/studio-api:1.9.0
docker pull ghcr.io/selfhosthub/studio-ui:1.9.0
docker pull ghcr.io/selfhosthub/studio-worker-general:1.9.0
docker pull ghcr.io/selfhosthub/studio-worker-transfer:1.9.0
docker pull ghcr.io/selfhosthub/studio-worker-video:1.9.0
docker pull ghcr.io/selfhosthub/studio-worker-comfyui:1.9.0
docker pull ghcr.io/selfhosthub/studio-worker-audio:1.9.0
docker pull ghcr.io/selfhosthub/studio-core:1.9.0
docker pull ghcr.io/selfhosthub/studio-full:1.9.0Operators normally pull these via studio-console rather than directly.
Baked tools
studio-console1.9.1 - baked intostudio-coreandstudio-fullimages.
v1.8.0
Studio 1.8.0
Upgrade impact
subtitles_backend: "openai" is removed. It required shs/video below 1.1.0 and a
video worker image from before this release. Stored workflows are migrated on
upgrade, so no manual edit is needed.
Requires shs/video 1.1.0 or later.
Video worker
- Subtitles transcribe about 2.3x quicker on CPU, measured at 14.4s to 6.2s on
64 seconds of narration. - The video worker image drops from 2.92 GB to 1.26 GB and no longer requests a
GPU, so it runs on any box. - Whisper model files persist on the workspace volume instead of downloading
again on every container recreate. - A worker whose transcription engine or model cache path is unusable says so at
startup instead of failing the first job.
Catalog
- shs/video 1.1.0.
- ComfyUI Text to Image (Flux.1 Schnell) 1.2.2 and (Flux.1 Schnell GGUF) 1.2.3.
- The Schnell VAE is marked as a gated download. The provider docs show the file
set and the access column per package, so gated files are visible before
install.
Also
- Workers verify their declared requirements before registering.
- Compose parity fails on any undeclared difference between the two composes.
- Healthchecks address 127.0.0.1.
- The api, core, full and worker images carry the patched util-linux packages.
Components
api 1.6.1, ui 1.3.2, workers 1.9.0.
Images
All 9 images published to GHCR with tags :1.8.0 and :latest.
docker pull ghcr.io/selfhosthub/studio-api:1.8.0
docker pull ghcr.io/selfhosthub/studio-ui:1.8.0
docker pull ghcr.io/selfhosthub/studio-worker-general:1.8.0
docker pull ghcr.io/selfhosthub/studio-worker-transfer:1.8.0
docker pull ghcr.io/selfhosthub/studio-worker-video:1.8.0
docker pull ghcr.io/selfhosthub/studio-worker-comfyui:1.8.0
docker pull ghcr.io/selfhosthub/studio-worker-audio:1.8.0
docker pull ghcr.io/selfhosthub/studio-core:1.8.0
docker pull ghcr.io/selfhosthub/studio-full:1.8.0Operators normally pull these via studio-console rather than directly.
Baked tools
studio-console1.9.1 - baked intostudio-coreandstudio-fullimages.
v1.7.0
Upgrade impact
- A schema migration runs on start. It backfills provider credentials to the
provider slug and settles any instance carrying more than one active version of
a provider. No action needed. - Restart ComfyUI workers after adding model files. A worker reads what its
ComfyUI accepts at startup. - ComfyUI models can live where ComfyUI Manager puts them, subfolders
included. Packages resolve against the host at run time.
Provider versions
- One current version per provider slug, enforced in the database.
- Upgrades retire the outgoing version in the same transaction, and the
marketplace reports the installed version immediately. - Credentials key on the provider slug: enter an API key once and it carries
across every future upgrade. - A workflow step resolves its parameter schema from the current version.
- Uninstall reports its outcome accurately, and unregisters by provider row id so
other versions keep serving.
ComfyUI
- Workers resolve model names against the host that runs the job, so a package
runs wherever the operator keeps their models. - Catalog manifests declare ComfyUI Manager's save paths.
- Package manifests accept a subfolder after the model kind.
Elsewhere
- The Documentation menu reaches the docs index for every role.
- The provider docs page keeps its selection in the URL, so doc links are
shareable and the back button works. - Dashboard chrome mounts once from an authenticated route group.
- One notification socket serves the session.
- Nested array fields in the step-config sub-panes edit correctly.
- CI action refs and container images are pinned by commit SHA and digest.
Components
api 1.6.0, ui 1.3.2, workers 1.8.0
Images
All 9 images published to GHCR with tags :1.7.0 and :latest.
docker pull ghcr.io/selfhosthub/studio-api:1.7.0
docker pull ghcr.io/selfhosthub/studio-ui:1.7.0
docker pull ghcr.io/selfhosthub/studio-worker-general:1.7.0
docker pull ghcr.io/selfhosthub/studio-worker-transfer:1.7.0
docker pull ghcr.io/selfhosthub/studio-worker-video:1.7.0
docker pull ghcr.io/selfhosthub/studio-worker-comfyui:1.7.0
docker pull ghcr.io/selfhosthub/studio-worker-audio:1.7.0
docker pull ghcr.io/selfhosthub/studio-core:1.7.0
docker pull ghcr.io/selfhosthub/studio-full:1.7.0Operators normally pull these via studio-console rather than directly.
Baked tools
studio-console1.9.1 - baked intostudio-coreandstudio-fullimages.
v1.6.0
1.6.0
Upgrade: pull and restart. No migrations, no config changes.
Features
- ComfyUI marketplace available to super admins on all shapes (split, core, full), with the upload page alongside it
- Four ComfyUI packages in the community catalog: Flux.1 Schnell txt2img, Flux.1 Schnell GGUF, Flux.2 Klein txt2img, Flux.2 Klein imgedit
- Workflow file import resolves provider and AI prompt slugs to installed ids, so imported steps arrive linked
- Import reports uninstalled slugs by step and slug, and completes
- faceless-video-pipeline 1.1.0: metadata step feeding video and YouTube upload
Fixes
- Redirects keep the request scheme, so https behind a tunnel stays https
- nginx issues relative redirects, keeping internal hostnames out of responses
- ComfyUI worker drops a spurious warning about its own model parameter
Pins
- cloudflared image pinned, gated against versions.json
- studio-console 1.9.1
Components
api 1.5.1, ui 1.3.1, workers 1.7.1
Images
All 9 images published to GHCR with tags :1.6.0 and :latest.
docker pull ghcr.io/selfhosthub/studio-api:1.6.0
docker pull ghcr.io/selfhosthub/studio-ui:1.6.0
docker pull ghcr.io/selfhosthub/studio-worker-general:1.6.0
docker pull ghcr.io/selfhosthub/studio-worker-transfer:1.6.0
docker pull ghcr.io/selfhosthub/studio-worker-video:1.6.0
docker pull ghcr.io/selfhosthub/studio-worker-comfyui:1.6.0
docker pull ghcr.io/selfhosthub/studio-worker-audio:1.6.0
docker pull ghcr.io/selfhosthub/studio-core:1.6.0
docker pull ghcr.io/selfhosthub/studio-full:1.6.0Operators normally pull these via studio-console rather than directly.
Baked tools
studio-console1.9.1 - baked intostudio-coreandstudio-fullimages.
v1.5.0
Studio 1.5.0
Custom image dimensions. The ComfyUI dimensions field is now type-or-pick:
choose a suggested size or type any WxH (for example 2560x1440). With Fast Mode
on (the default), your size is the output target and generation stays at the
model's native resolution. With Fast Mode off you are setting raw generation
dimensions, so sizes must be multiples of 16 inside the model's generation
band; out-of-range sizes fail upfront with a clear message.
Admin password reset. Admins can set a one-time password for a member from
the members table. The member signs in with it and must set their own password
before anything else; enforcement is server-side.
OAuth and link fixes on Core and Full. The API now derives its public link
base from SHS_PUBLIC_API_URL, and existing installs pick the value up
automatically on their next boot. OAuth connections, webhook URLs, and
provider-fetched file links use it. SHS_API_BASE_URL keeps working as a
fallback.
Marketplace hardening. Package uploads are validated against the service's
parameter contract (types and value sets). Unknown job parameters are logged by
name. Workflow steps select ComfyUI work by package; the legacy model selector
is removed, and stored workflows keep running through automatic translation.
Updated templates. Faceless Video 1.0.2 and AI Image Generator 1.1.0 adopt
the new dimensions field and package selection.
Images
All 9 images published to GHCR with tags :1.5.0 and :latest.
docker pull ghcr.io/selfhosthub/studio-api:1.5.0
docker pull ghcr.io/selfhosthub/studio-ui:1.5.0
docker pull ghcr.io/selfhosthub/studio-worker-general:1.5.0
docker pull ghcr.io/selfhosthub/studio-worker-transfer:1.5.0
docker pull ghcr.io/selfhosthub/studio-worker-video:1.5.0
docker pull ghcr.io/selfhosthub/studio-worker-comfyui:1.5.0
docker pull ghcr.io/selfhosthub/studio-worker-audio:1.5.0
docker pull ghcr.io/selfhosthub/studio-core:1.5.0
docker pull ghcr.io/selfhosthub/studio-full:1.5.0Operators normally pull these via studio-console rather than directly.
Baked tools
studio-console1.9.0 - baked intostudio-coreandstudio-fullimages.
v1.4.1
Studio 1.4.1 is a bug-fix release.
Fixed: catalog workflows with AI prompts failed at Run. On 1.4.0, running
a workflow installed from the catalog that uses an AI prompt template (Text
to Speech, Faceless Video, AI Image Generator) failed at submit with an
"Unknown form fields" error on the very fields the form showed. The form now
accepts every prompt variable the prompt declares. Workflows you edited and
saved in the workflow editor were not affected.
Console: pinned to 1.9.0.
No operator action needed: pull the new images and restart, or run
studio-console upgrade.
Images
All 9 images published to GHCR with tags :1.4.1 and :latest.
docker pull ghcr.io/selfhosthub/studio-api:1.4.1
docker pull ghcr.io/selfhosthub/studio-ui:1.4.1
docker pull ghcr.io/selfhosthub/studio-worker-general:1.4.1
docker pull ghcr.io/selfhosthub/studio-worker-transfer:1.4.1
docker pull ghcr.io/selfhosthub/studio-worker-video:1.4.1
docker pull ghcr.io/selfhosthub/studio-worker-comfyui:1.4.1
docker pull ghcr.io/selfhosthub/studio-worker-audio:1.4.1
docker pull ghcr.io/selfhosthub/studio-core:1.4.1
docker pull ghcr.io/selfhosthub/studio-full:1.4.1Operators normally pull these via studio-console rather than directly.
Baked tools
studio-console1.9.0 - baked intostudio-coreandstudio-fullimages.
v1.4.0
Worker storage
- Worker images now run as uid 1000 (previously a system uid, ~999). If you run
workers hand-rolled with a bind-mounted storage directory and you adjusted
ownership for uid 999, either chown the storage tree back to uid 1000 or set
user:on the worker services in your compose file. - Worker scratch output (ComfyUI output staging, video cache, audio staging)
has moved off the shared/workspacestorage mount into container-local
scratch (/var/tmp/studio-workers). Upgraded split installs keep stale
~/.studio/storage/data/directories on the host; nothing writes to them
anymore and they are safe to delete.
Platform
- The API image now ships a launch manifest declaring the split compose
contract (runtime_user). Studio Console reads it before boot; console
releases after 1.8.1 will refuse to start worker profiles on images older
than this release. - cryptography upgraded to 50.0.0 in the API image (CVE-2026-69247).
UI
- Workflows and AI Prompts list footers no longer double the plural
("8 workflows", not "8 workflowss").
Images
All 9 images published to GHCR with tags :1.4.0 and :latest.
docker pull ghcr.io/selfhosthub/studio-api:1.4.0
docker pull ghcr.io/selfhosthub/studio-ui:1.4.0
docker pull ghcr.io/selfhosthub/studio-worker-general:1.4.0
docker pull ghcr.io/selfhosthub/studio-worker-transfer:1.4.0
docker pull ghcr.io/selfhosthub/studio-worker-video:1.4.0
docker pull ghcr.io/selfhosthub/studio-worker-comfyui:1.4.0
docker pull ghcr.io/selfhosthub/studio-worker-audio:1.4.0
docker pull ghcr.io/selfhosthub/studio-core:1.4.0
docker pull ghcr.io/selfhosthub/studio-full:1.4.0Operators normally pull these via studio-console rather than directly.
Baked tools
studio-console1.8.1 - baked intostudio-coreandstudio-fullimages.