Repository navigation
Releases
Saya Studio 1.1.0 × Saya Couple 2.3.1
Saya Studio 1.1.0 × Saya Couple 2.3.1
Saya Studio is a local desktop app that drives ComfyUI for anime-style character images. ComfyUI renders,
Saya Studio organizes: casting, a six-pass workflow, gallery, character sheets, LoRA manager, graph editor.
Nothing runs in the cloud.
1.1.0 adds duo casting, gives invented characters names that suit them and delivers one clearly named file
per render. Updating keeps your database, images, characters and settings.
What's new in 1.1.0
Casting
- Duo trials (experimental): when your draw engine provides pair types, Casting offers a Solo / Duo choice.
A duo shows two validated characters on one image, at pass 1, and has no character sheet of its own. - Names that suit the character: a character invented by a batch is renamed at launch, in a style that
follows her family and P1 tags. A name already taken is never reused; existing characters keep theirs. - Saving a sheet: the name field starts from the trial's name and stays editable. A saved sheet's name then
wins in the history, the gallery and the file names of the images still to come.
Files and gallery
- Delivered images are named
<local date>_<character>_<pose>.png(finished) and…_p<N>.png(earlier passes). - One image per render: the review gate's copy is no longer downloaded when the pass saved its own, and
ComfyUI's copy in the run folder is removed once delivered and hash-checked. - Dates use your local day, not UTC.
Security
This release follows a full security audit of the app and the nodes. Nothing was known to be exploited.
- A crafted PNG can no longer write an image outside your output folder, nor use gigabytes of memory.
- A crafted workflow can no longer crash the app, and an unreadable one is refused instead of reported complete.
- The Civitai bridge sends your token to Civitai only, refuses non-Civitai and local addresses, checks every id,
and never downloads another file than the one requested. An empty token file no longer opens it. - Saya Couple 2.3.1: its HTTP routes refuse DNS rebinding and malformed bodies, and a status request creates no folder.
A machine reached by its own name on a LAN lists that name inSAYA_ALLOWED_HOSTS. - A duo stops at pass 1 everywhere: the app no longer offers the six passes on a duo trial.
What was new in 1.0.1
Fast on real libraries
Measured on a real library (432 casting runs, 3.8 GB database):
| Opening | 1.0.0 | 1.0.1 |
|---|---|---|
| Casting, Create, deleting a batch (run listing) | 1.5 s every time | 5 ms |
| Gallery | 1.8 s | 22 ms |
| Characters | 845 ms | 79 ms |
| Coming back to a page already visited | full reload | ~50 ms, state kept |
The background runner no longer re-reads every run manifest twice every 2.5 seconds while holding the run
lock, which stalled batch deletion and every casting action. Gallery, Casting, Characters and Models stay open
in memory: filters, scroll position, the open image and selections are still there when you come back.
Casting
- Six passes after the casting. Full, keeping an image in the gallery or saving a character queues its six
passes; they start one at a time once every pass-1 trial of the casting is done (an SDXL pass 1 and a HiDream
pass 3 no longer share the GPU). - Missing images. In « Cibler des personnages », characters without a picture take their turn: pass 1 in a
random pose, then Yes (six passes, image kept as their picture) or No (another pose). - Pending actions. Brouillons lists the bank actions your engine does not draw yet, with the reason. Test
them in the isolated engine copy, then decide per action: Validate writes it through the engine's own
command (with its backup), Refuse writes nothing. - A failed or stopped trial no longer freezes the rest of its batch; picker tiles show names and images again;
rotation images picture their character.
Gallery and menus
- Casting images show the character's name instead of a job id.
- Right-click menus on gallery images, casting batches and trials, and models (open, six passes, favourite,
compare, copy path, delete a batch…). The browser's Back/Reload menu no longer appears in the app. - Send to the full workflow opens an image in Create with the workflow saved inside it.
Workflows
- Node check: the app lists the nodes a workflow needs and those missing from your ComfyUI. Ordinary
workflows using a Primitive node, a Note or rgthree helpers were wrongly refused; they now open. Scripts can
usestudio-maintenance check-workflow FILE_OR_FOLDER object_info.json(exit 0 complete, 2 missing). - Developer mode (Settings): an action console, a preference editor, data folders and the node check.
Updates
- The app checks for a new release at startup and offers to install it: it downloads the package for your
system, verifies it againstSHA256SUMS, then asks your system for permission to install it. You can turn
the check off in Settings. install.shdetects your system and has an update mode:sh install.sh --update.
Linux installer: Couple nodes, Studio app, or both
Download install.sh
from this release, then run it in a terminal:
sh install.shChoose 1: Couple nodes, 2: Studio app, or 3: both. The installer downloads the public Couple
bundle, verifies its pinned SHA-256, and opens the existing installer. It detects the Linux app package,
checks its release checksum, and asks before installation. To choose both and specify ComfyUI explicitly:
sh install.sh --what both --comfyui /path/to/ComfyUIFor the nodes as a separate download, use
saya-couple-2.3.1.tar.gz:
extract it and run ./saya install.
Install
| System | File | Command |
|---|---|---|
| Debian, Ubuntu | saya-studio_1.0.1_amd64.deb |
sudo apt install ./saya-studio_1.0.1_amd64.deb |
| Fedora | saya-studio-1.0.1.fedora.x86_64.rpm |
sudo dnf install ./saya-studio-1.0.1.fedora.x86_64.rpm |
| openSUSE | saya-studio-1.0.1.opensuse.x86_64.rpm |
sudo zypper install ./saya-studio-1.0.1.opensuse.x86_64.rpm |
| Arch, EndeavourOS | saya-studio-1.0.1-x86_64.pkg.tar.zst |
sudo pacman -U ./saya-studio-1.0.1-x86_64.pkg.tar.zst |
| Any Linux distribution | saya-studio_1.0.1_amd64.AppImage |
chmod +x it, then run it |
| Flatpak | saya-studio-1.0.1-x86_64.flatpak |
flatpak install --user ./saya-studio-1.0.1-x86_64.flatpak |
| Nix | flake in studio/ |
nix run github:alphaziod/saya-studio-x-couple?dir=studio |
| Windows 10/11 x64 | saya-studio-1.0.1-windows-x64.exe |
run the installer (WebView2 is handled) |
| Mac, Apple Silicon | saya-studio-1.0.1-macos-arm64.dmg |
open it, drag Saya Studio into Applications |
| Mac, Intel | saya-studio-1.0.1-macos-x64.dmg |
open it, drag Saya Studio into Applications |
Check your download: sha256sum -c SHA256SUMS --ignore-missing.
Windows builds are unsigned; Mac builds use ad-hoc signing and are not Apple-notarized, so the OS may block
the first launch. Updating keeps your database, images, characters and settings.
Requirements
- A running ComfyUI (default
~/AI/ComfyUI, on127.0.0.1:8188) with the Saya Couple nodes 2.3.0 or newer
from this repository, plus the models your workflow uses. - Python 3. Optional:
ffmpegfor LoRA video previews. - Linux: WebKitGTK 4.1 (Debian 12+, Ubuntu 22.04+, Fedora 39+, openSUSE Tumbleweed / Leap 15.6, Arch, NixOS).
Validation
- Local: 503 Rust tests passed (34 explicitly ignored), 109 frontend tests passed, Svelte check with no errors or
warnings, interface translations complete in 14 languages; installer tests (bundle, update mode, 7 distribution
detections) pass without network. - Speed measured on a copy of a real library (432 runs, 763 MB of run manifests, 3.8 GB database); the table
above gives those numbers. - Workflows: 30 synthetic workflows and 30 invented node classes give the exact expected report; the bundled
presets are complete against a real ComfyUI 0.34.0 node list. - Native app checks (real window, simulated ComfyUI): casting pickers, « Images manquantes » (Yes, No, Skip),
gallery names and right-click menu, developer mode and node check, page switching (~50 ms, no reload). - Not verified end to end: installing an update through
pkexecandinstall.sh --updateagainst this
release (both are covered by tests with recorded release data), and a resume after actually killing ComfyUI.
Known limitations
- Casting needs a draw engine, which is not distributed; without one, Casting says so and stays unavailable.
- Flatpak runs sandboxed: ComfyUI on
127.0.0.1and your home folder are allowed, but the browser
extension bridge may not work there. - The bundled preset ships with neutral example prompts and empty LoRA stacks: fill in your own. Its model
settings are mine; keep the ones that work on your machine.
Also in this repository
The Saya Couple 2.3.1 node pack only hardens its HTTP routes (see above). See
CHANGELOG.md.
Documentation
README ·
Packaging ·
For AI agents and contributors
License: GPL-3.0-or-later.
Saya Studio 1.0.1 × Saya Couple 2.3.0
Saya Studio 1.0.1 × Saya Couple 2.3.0
Saya Studio is a local desktop app that drives ComfyUI for anime-style character images. ComfyUI renders,
Saya Studio organizes: casting, a six-pass workflow, gallery, character sheets, LoRA manager, graph editor.
Nothing runs in the cloud.
1.0.1 makes the app fast on large libraries, finishes the casting workflow and checks every workflow's
nodes. Updating keeps your database, images, characters and settings.
What's new in 1.0.1
Fast on real libraries
Measured on a real library (432 casting runs, 3.8 GB database):
| Opening | 1.0.0 | 1.0.1 |
|---|---|---|
| Casting, Create, deleting a batch (run listing) | 1.5 s every time | 5 ms |
| Gallery | 1.8 s | 22 ms |
| Characters | 845 ms | 79 ms |
| Coming back to a page already visited | full reload | ~50 ms, state kept |
The background runner no longer re-reads every run manifest twice every 2.5 seconds while holding the run
lock, which stalled batch deletion and every casting action. Gallery, Casting, Characters and Models stay open
in memory: filters, scroll position, the open image and selections are still there when you come back.
Casting
- Six passes after the casting. Full, keeping an image in the gallery or saving a character queues its six
passes; they start one at a time once every pass-1 trial of the casting is done (an SDXL pass 1 and a HiDream
pass 3 no longer share the GPU). - Missing images. In « Cibler des personnages », characters without a picture take their turn: pass 1 in a
random pose, then Yes (six passes, image kept as their picture) or No (another pose). - Pending actions. Brouillons lists the bank actions your engine does not draw yet, with the reason. Test
them in the isolated engine copy, then decide per action: Validate writes it through the engine's own
command (with its backup), Refuse writes nothing. - A failed or stopped trial no longer freezes the rest of its batch; picker tiles show names and images again;
rotation images picture their character.
Gallery and menus
- Casting images show the character's name instead of a job id.
- Right-click menus on gallery images, casting batches and trials, and models (open, six passes, favourite,
compare, copy path, delete a batch…). The browser's Back/Reload menu no longer appears in the app. - Send to the full workflow opens an image in Create with the workflow saved inside it.
Workflows
- Node check: the app lists the nodes a workflow needs and those missing from your ComfyUI. Ordinary
workflows using a Primitive node, a Note or rgthree helpers were wrongly refused; they now open. Scripts can
usestudio-maintenance check-workflow FILE_OR_FOLDER object_info.json(exit 0 complete, 2 missing). - Developer mode (Settings): an action console, a preference editor, data folders and the node check.
Updates
- The app checks for a new release at startup and offers to install it: it downloads the package for your
system, verifies it againstSHA256SUMS, then asks your system for permission to install it. You can turn
the check off in Settings. install.shdetects your system and has an update mode:sh install.sh --update.
Linux installer: Couple nodes, Studio app, or both
Download install.sh
from this release, then run it in a terminal:
sh install.shChoose 1: Couple nodes, 2: Studio app, or 3: both. The installer downloads the public Couple
bundle, verifies its pinned SHA-256, and opens the existing installer. It detects the Linux app package,
checks its release checksum, and asks before installation. To choose both and specify ComfyUI explicitly:
sh install.sh --what both --comfyui /path/to/ComfyUIFor the nodes as a separate download, use
saya-couple-2.3.0.tar.gz:
extract it and run ./saya install.
Install
| System | File | Command |
|---|---|---|
| Debian, Ubuntu | saya-studio_1.0.1_amd64.deb |
sudo apt install ./saya-studio_1.0.1_amd64.deb |
| Fedora | saya-studio-1.0.1.fedora.x86_64.rpm |
sudo dnf install ./saya-studio-1.0.1.fedora.x86_64.rpm |
| openSUSE | saya-studio-1.0.1.opensuse.x86_64.rpm |
sudo zypper install ./saya-studio-1.0.1.opensuse.x86_64.rpm |
| Arch, EndeavourOS | saya-studio-1.0.1-x86_64.pkg.tar.zst |
sudo pacman -U ./saya-studio-1.0.1-x86_64.pkg.tar.zst |
| Any Linux distribution | saya-studio_1.0.1_amd64.AppImage |
chmod +x it, then run it |
| Flatpak | saya-studio-1.0.1-x86_64.flatpak |
flatpak install --user ./saya-studio-1.0.1-x86_64.flatpak |
| Nix | flake in studio/ |
nix run github:alphaziod/saya-studio-x-couple?dir=studio |
| Windows 10/11 x64 | saya-studio-1.0.1-windows-x64.exe |
run the installer (WebView2 is handled) |
| Mac, Apple Silicon | saya-studio-1.0.1-macos-arm64.dmg |
open it, drag Saya Studio into Applications |
| Mac, Intel | saya-studio-1.0.1-macos-x64.dmg |
open it, drag Saya Studio into Applications |
Check your download: sha256sum -c SHA256SUMS --ignore-missing.
Windows builds are unsigned; Mac builds use ad-hoc signing and are not Apple-notarized, so the OS may block
the first launch. Updating keeps your database, images, characters and settings.
Requirements
- A running ComfyUI (default
~/AI/ComfyUI, on127.0.0.1:8188) with the Saya Couple nodes 2.3.0 or newer
from this repository, plus the models your workflow uses. - Python 3. Optional:
ffmpegfor LoRA video previews. - Linux: WebKitGTK 4.1 (Debian 12+, Ubuntu 22.04+, Fedora 39+, openSUSE Tumbleweed / Leap 15.6, Arch, NixOS).
Validation
- Local: 503 Rust tests passed (34 explicitly ignored), 109 frontend tests passed, Svelte check with no errors or
warnings, interface translations complete in 14 languages; installer tests (bundle, update mode, 7 distribution
detections) pass without network. - Speed measured on a copy of a real library (432 runs, 763 MB of run manifests, 3.8 GB database); the table
above gives those numbers. - Workflows: 30 synthetic workflows and 30 invented node classes give the exact expected report; the bundled
presets are complete against a real ComfyUI 0.34.0 node list. - Native app checks (real window, simulated ComfyUI): casting pickers, « Images manquantes » (Yes, No, Skip),
gallery names and right-click menu, developer mode and node check, page switching (~50 ms, no reload). - Not verified end to end: installing an update through
pkexecandinstall.sh --updateagainst this
release (both are covered by tests with recorded release data), and a resume after actually killing ComfyUI.
Known limitations
- Casting needs a draw engine, which is not distributed; without one, Casting says so and stays unavailable.
- Flatpak runs sandboxed: ComfyUI on
127.0.0.1and your home folder are allowed, but the browser
extension bridge may not work there. - Snap is built by CI when the Snapcraft store is reachable; it is attached only if that build succeeds.
- The bundled preset ships with neutral example prompts and empty LoRA stacks: fill in your own. Its model
settings are mine; keep the ones that work on your machine.
Also in this repository
The Saya Couple 2.3.0 node pack is unchanged. See
CHANGELOG.md.
Documentation
README ·
Packaging ·
For AI agents and contributors
License: GPL-3.0-or-later.
Saya Studio 1.0.0 × Saya Couple 2.3.0
Saya Studio 1.0.0 × Saya Couple 2.3.0
Saya Studio is a local desktop app that drives ComfyUI for anime-style character images. ComfyUI renders,
Saya Studio organizes: casting, a six-pass workflow, gallery, character sheets, LoRA manager, graph editor.
Nothing runs in the cloud.
1.0.0 is the first stable release. It focuses on reliability: a generation interrupted by a ComfyUI crash,
a failed pass or a stop now resumes where it stopped, stopping really stops, and image cleanup never touches
what is not Studio's. It is the companion app of the Saya Couple node pack and, like the pack, first a backup
of my own setup. Back up your data and your ComfyUI folder before upgrading.
What's new in 1.0.0
Crash recovery in Create and Casting
- If ComfyUI crashes or restarts during a six-pass run, a pass fails, or you stop the run, Resume from
pass N restarts the unfinished pass with the same seed. Finished passes are kept: the pass reads the
previous pass's state that ComfyUI saved on disk. - A pass lost by a ComfyUI restart is first confirmed gone (targeted queue delete, then absence from the
queue and the history) before it is replaced. A pass that ComfyUI may still be running is never sent twice. - The same button appears in the casting sheet of a kept trial whose six-pass finish was interrupted.
Pass-1 trials keep the batch Resume button.
Stop and restart
- Stop now removes a queued pass from the ComfyUI queue. It used to send an interrupt, which only reaches
the prompt being executed, so the queued pass still ran on the GPU after the run was marked stopped. - Restart is refused while a pass is still owned by ComfyUI, so two attempts never run at once.
- Targeted interrupt accepts ComfyUI 0.34.0 and newer (it required exactly 0.34.0, so Stop was refused
on any newer ComfyUI).
Casting
- Resuming a batch no longer revives trials you already decided (rejected, or a stopped finish), which then
showed as running forever.
Your images and data
- Replacing a lineage never hides an image of your own library that a delivery was deduplicated onto;
only files inside Studio's own folders are erased. - Every erased image is journaled in
pass-states/preview-cleanup/removed-assets.log. - The startup preview cleanup now runs under the run lock: it could overwrite a pass just submitted by the
background runner, which then submitted it again. A deletion error no longer loses the cleanup journal.
Interface
- The error banner at the top of the app clears after the next successful navigation.
- README screenshots refreshed from the current interface.
- New labels translated in all 14 interface languages.
Linux installer: Couple nodes, Studio app, or both
Download install.sh
from this release, then run it in a terminal:
sh install.shChoose 1: Couple nodes, 2: Studio app, or 3: both. The installer downloads the public Couple
bundle, verifies its pinned SHA-256, and opens the existing installer. It detects the Linux app package,
checks its release checksum, and asks before installation. To choose both and specify ComfyUI explicitly:
sh install.sh --what both --comfyui /path/to/ComfyUIFor the nodes as a separate download, use
saya-couple-2.3.0.tar.gz:
extract it and run ./saya install.
Install
| System | File | Command |
|---|---|---|
| Debian, Ubuntu | saya-studio_1.0.0_amd64.deb |
sudo apt install ./saya-studio_1.0.0_amd64.deb |
| Fedora | saya-studio-1.0.0.fedora.x86_64.rpm |
sudo dnf install ./saya-studio-1.0.0.fedora.x86_64.rpm |
| openSUSE | saya-studio-1.0.0.opensuse.x86_64.rpm |
sudo zypper install ./saya-studio-1.0.0.opensuse.x86_64.rpm |
| Arch, EndeavourOS | saya-studio-1.0.0-x86_64.pkg.tar.zst |
sudo pacman -U ./saya-studio-1.0.0-x86_64.pkg.tar.zst |
| Any Linux distribution | saya-studio_1.0.0_amd64.AppImage |
chmod +x it, then run it |
| Flatpak | saya-studio-1.0.0-x86_64.flatpak |
flatpak install --user ./saya-studio-1.0.0-x86_64.flatpak |
| Nix | flake in studio/ |
nix run github:alphaziod/saya-studio-x-couple?dir=studio |
| Windows 10/11 x64 | saya-studio-1.0.0-windows-x64.exe |
run the installer (WebView2 is handled) |
| Mac, Apple Silicon | saya-studio-1.0.0-macos-arm64.dmg |
open it, drag Saya Studio into Applications |
| Mac, Intel | saya-studio-1.0.0-macos-x64.dmg |
open it, drag Saya Studio into Applications |
Check your download: sha256sum -c SHA256SUMS --ignore-missing.
Mac DMGs were built from this release's exact commit and passed native installation, startup and preset checks.
Windows builds are unsigned; Mac builds use ad-hoc signing and are not Apple-notarized, so the OS may block
the first launch. Updating keeps your database, images, characters and settings.
Requirements
- A running ComfyUI (default
~/AI/ComfyUI, on127.0.0.1:8188) with the Saya Couple nodes 2.3.0 or newer
from this repository, plus the models your workflow uses. - Python 3. Optional:
ffmpegfor LoRA video previews. - Linux: WebKitGTK 4.1 (Debian 12+, Ubuntu 22.04+, Fedora 39+, openSUSE Tumbleweed / Leap 15.6, Arch, NixOS).
Validation
- Local: 482 Rust tests passed (33 explicitly ignored), 100 frontend tests passed, Svelte check with no
errors or warnings, interface translations complete in 14 languages. - Real GPU, ComfyUI 0.34.0, SFW still-life prompts: stopping a run interrupted the executing prompt and
deleted the queued one from the ComfyUI queue. - Native app check with a simulated ComfyUI: a full six-pass run, a casting batch of eight, keeping images in
the gallery and restarting the app on that data. - Not verified end to end: a resume after actually killing ComfyUI. The decision logic (refusal while a pass
runs, confirmation of a lost pass) is covered by unit tests.
Known limitations
- Casting needs a draw engine, which is not distributed; without one, Casting says so and stays unavailable.
- Flatpak runs sandboxed: ComfyUI on
127.0.0.1and your home folder are allowed, but the browser
extension bridge may not work there. - Snap is built by CI when the Snapcraft store is reachable; it is attached only if that build succeeds.
- The bundled preset ships with neutral example prompts and empty LoRA stacks: fill in your own. Its model
settings are mine; keep the ones that work on your machine.
Also in this repository
The Saya Couple 2.3.0 node pack is unchanged. See
CHANGELOG.md.
Documentation
README ·
Packaging ·
For AI agents and contributors
License: GPL-3.0-or-later.
Saya Studio 1.0.0-beta.2 × Saya Couple 2.3.0
Saya Studio 1.0.0-beta.2 × Saya Couple 2.3.0
Saya Studio is a local desktop app that drives ComfyUI for anime-style character images. ComfyUI renders,
Saya Studio organizes: casting, a six-pass workflow, gallery, character sheets, LoRA manager, graph editor.
Nothing runs in the cloud.
This is a beta. It is the companion app of the Saya Couple node pack and, like the pack, first a backup of my
own setup. Back up your data and your ComfyUI folder before trying it.
Windows and macOS downloads
Native assets use source commit 9cd643d; the existing Linux packages and Couple archive are unchanged.
Native installation, startup and browser checks passed on all three platforms on 2026-11-04, using these exact installers. Preset hashes and initial database setup were verified. The packaged extension connected through the real registered host to the running app in Chromium; an unrelated extension was refused. Native trash tests moved and restored a synthetic file on each platform during the build run. That first run built all three installers but failed its browser harness; the linked successful check retested the same binaries with the corrected harness. No GPU generation was run.
- Windows 10/11 x64:
saya-studio-1.0.0-beta.2-windows-x64.exe. Run the installer; WebView2 is required (the installer handles it). - Mac with Apple Silicon:
saya-studio-1.0.0-beta.2-macos-arm64.dmg. - Mac with Intel:
saya-studio-1.0.0-beta.2-macos-x64.dmg.
On macOS 11 or newer, open the DMG and drag Saya Studio into Applications. Windows builds are unsigned;
Mac builds use ad-hoc signing and are not Apple-notarized, so the OS may block first launch.
Python 3 and a working ComfyUI installation remain separate requirements. The private draw engine is not included.
These packages include the same public presets as Linux. Native package installation, startup and preset checks
run in CI; a complete manual UI/GPU workflow has not been validated on these platforms.
The gallery now uses Windows Recycle Bin and macOS Trash, with recoverable deletion and no permanent-delete fallback.
Launching Studio registers its browser host for Chrome, Chromium, Brave and Edge on Windows and macOS;
the extension connects without manually copying a token. Linux keeps its existing integration.
The nodes remain available in saya-couple-2.3.0.tar.gz; extract it and run python installer/saya.py install
(or python3 on macOS) from that folder. install.sh selects Linux app packages only.
Linux installer: Couple nodes, Studio app, or both
Download install.sh
from this release, then run it in a terminal:
sh install.shChoose 1: Couple nodes, 2: Studio app, or 3: both. The installer downloads the public Couple
bundle, verifies its pinned SHA-256, and opens the existing installer. It detects the Linux app package,
checks its release checksum, and asks before installation. Existing node backups and restore are preserved.
To choose both and specify ComfyUI explicitly:
sh install.sh --what both --comfyui /path/to/ComfyUIRequires python3, curl, tar and sha256sum. The shell launcher must be run as your normal user;
the app installer requests sudo only when the selected system package needs it.
For the nodes as a separate download, use
saya-couple-2.3.0.tar.gz.
It contains the public node files, workflows, installer and licenses. Extract it and run ./saya install.
Both downloads are listed in SHA256SUMS alongside the app packages.
Requirements
- Linux x86_64 with WebKitGTK 4.1 (Debian 12+, Ubuntu 22.04+, Fedora 39+, openSUSE Tumbleweed / Leap 15.6,
Arch / EndeavourOS, NixOS). - A running ComfyUI (default
~/AI/ComfyUI, on127.0.0.1:8188) with the Saya Couple nodes 2.3.0 or newer
from this repository (./saya install --comfyui /path/to/ComfyUI), plus the models your workflow uses. - Python 3. Optional:
ffmpegfor LoRA video previews.
Install
| Distribution | File | Command |
|---|---|---|
| Debian, Ubuntu | saya-studio_1.0.0-beta.2_amd64.deb |
sudo apt install ./saya-studio_1.0.0-beta.2_amd64.deb |
| Fedora | saya-studio-1.0.0-beta.2.fedora.x86_64.rpm |
sudo dnf install ./saya-studio-1.0.0-beta.2.fedora.x86_64.rpm |
| openSUSE | saya-studio-1.0.0-beta.2.opensuse.x86_64.rpm |
sudo zypper install ./saya-studio-1.0.0-beta.2.opensuse.x86_64.rpm |
| Arch, EndeavourOS | saya-studio-1.0.0-beta.2-x86_64.pkg.tar.zst |
sudo pacman -U ./saya-studio-1.0.0-beta.2-x86_64.pkg.tar.zst |
| Any distribution | saya-studio_1.0.0-beta.2_amd64.AppImage |
chmod +x it, then run it |
| Flatpak | saya-studio-1.0.0-beta.2-x86_64.flatpak |
flatpak install --user ./saya-studio-1.0.0-beta.2-x86_64.flatpak |
| Nix | flake in studio/ |
nix run github:alphaziod/saya-studio-x-couple?dir=studio |
Check your download: sha256sum -c SHA256SUMS --ignore-missing.
Changes in beta.2
Interface throughout the app
- Larger, clearer labels and body text, more readable secondary text, and consistent control heights.
- Wider navigation, simpler headings, quieter borders and more space between controls.
- Toolbars and filters wrap on smaller windows; panels and grids keep their content readable.
Casting and test scripts
- Clearer batch controls, full-width character/action choices and a dedicated row for the result,
family, checkpoint, LoRA and sort filters. - New Test scripts section with automatic discovery of existing
test_*.pyandtester.pyfiles
in the configured engine tree and thescripts-testsconfig folder, plus the existing LCS launcher.
The list refreshes when the section opens and with Refresh, so newly added scripts can appear
without maintaining a hardcoded list. - Select a test and click Generate. Discovery does not execute or import scripts. Ordinary engine
modes remain available separately; unit-test directories, archives, output folders and symbolic
links are excluded from discovery. - Execution displays the actual success or failure, exit code, timeout and captured output. Unknown
selections are rejected; double submissions and overlapping test requests are blocked. Python runs
from the selected script's folder, adding--gpuwhen that option is detected in its source.
Gallery, characters and models
- Gallery toolbars and filters wrap correctly; corrected virtual-grid spacing keeps the displayed
columns aligned with the available width. - Character lists and sheets have more readable text, better column sizing and revision rows that wrap.
The default avatar is simpler. - LoRA and checkpoint controls, filters and inspectors have clearer spacing and readable actions,
including on narrower windows. References, character galleries and import panels share the same styling.
Generation and workshop
- Generation and Saya Couple panels have clearer workflow/preparation labels, a dedicated row for saved
preparations, wider controls and more readable pass/node cards. - Workflow, module and pipeline views use roomier columns and tables. Graph editor tools sit in the
page layout instead of covering the canvas; graph and pipeline canvas coordinates are preserved. - Scene fields wrap into readable columns. A/B lab, prompt tools, engine controls, data management,
settings, comparisons and the image editor use the updated text sizes and spacing.
Languages and existing data
- New test-script labels and corrected import wording are translated across all 14 interface languages.
- Existing public presets and the Saya Couple 2.3.0 node package are unchanged. No personal images,
databases, local draw-engine scripts or private work logs are included in this update.
Validation and package status
- Local verification: 460 Rust tests passed, 32 explicitly ignored; 99 frontend tests and 10 IPC tests
passed. Svelte checking and the frontend build passed. - Native UI checks covered test-script discovery and execution, real failure reporting and duplicate-click
protection with synthetic scripts. Visual checks covered full-HD and narrower layouts, graph drag/undo,
dialogs and right-to-left display. No real GPU generation was performed for this interface update. - The tag workflow
completed: Arch, Debian/Fedora/AppImage, openSUSE, Nix, Flatpak and the release publication job succeeded.
Snap failed while downloading its build tooling from the Snapcraft store. No checks were cancelled in
this attempt. Published file digests were checked againstSHA256SUMSand GitHub's SHA-256 values.
Known limitations
-
Snap is not attached to beta.2. CI could not reliably download the build prerequisites
from the Snapcraft store. The Snap recipe remains available inpackaging/snap/snapcraft.yaml. -
Beta. Used day to day on Arch (Wayland) with an AMD GPU. The other packages are built and checked by CI but
have not all been run by hand yet: please report what breaks. -
Casting needs a draw engine, which is not distributed; without one, Casting says so and stays unavailable.
-
Flatpak runs sandboxed: ComfyUI on
127.0.0.1and your home folder are allowed, but the browser
extension bridge may not work there. -
The bundled preset ships with neutral example prompts and empty LoRA stacks: fill in your own. Its model
settings are mine; keep the ones that work on your machine.
Also in this repository
The ...
Saya Couple v2.3.0
Saya Couple 2.3.0 also brings the 2.2.0 – 2.2.2 changes, which had no release of their own. Install or upgrade with ./saya install (it now asks whether you want the nodes, the Saya Studio desktop app, or both).
2.3.0 — 2026-10-29
Saya Studio 1.0 beta, and node updates it relies on
- Saya Studio (
studio/): a local Linux desktop app (Tauri 2 + Svelte + Rust) that drives ComfyUI for
casting, the six-pass Saya workflow, gallery, characters and LoRA management. First public beta 1.0.0-beta.1,
released on its own (studio-v*tags); see studio/README.md. The node installer does not
ship it. - Ownership anchors: the genital-anatomy block now gives one anchor per aspect of each organ (size, colour, the
cute_penisLoRA trigger, erect/flaccid state, pubic hair colour) instead of one per organ, so P1 and P2 are told
apart more often. A bare organ name the other person also has is never an anchor. Breasts stay identity (chest)
anchors, never anatomy. - Saya Family Save (new output node): standard ComfyUI PNG metadata plus a
saya_familychunk and a
<stem>.saya_family.jsonsidecar carrying the character identity, so Saya Studio can file images by family. - Image phases: every phase image carries a
saya_rolePNG chunk (role,phase,total,lineage) so an app
can group a pass-1 image with its final. - Background picker: backgrounds that wash the picture out to white are softened to natural colours (palette,
fluorescent, harsh light and haze tags rewritten or dropped; the weighted place tag is kept). - Web:
saya_close_workflow.jscloses the extra workflow tabs a batch would otherwise leave open (one per
image); the active tab is kept. - AMD VRAM patch: the VRAM fraction is clamped when another process already holds VRAM.
2.2.2 — 2026-10-08
Dual sampling hand-off moved to 27 / 30 (Demo and Full)
- Sampler 1 (ClownsharKSampler, MODEL_1) now runs 27 of 30 steps instead of 13 of 16; Sampler 2 (
resample) still
finishes the last 3 steps. At 13 / 16 the hand-off happened at sigma 0.369, before small details (fine shapes,
local colour) are formed, and the refine pass could not rebuild them: smoothed, flat-coloured small shapes. At
27 / 30 the hand-off is at sigma 0.199, like the earlier SamplerCustomAdvanced dual it replaced, and the detail
survives. Measured on renders: 13 / 16 against 27 / 30 with both samplers, then 10 + 10 renders at 27 / 30.
Cost: about +12 s per image on Sampler 1. - In
resamplemode Sampler 2 continues Sampler 1's own sigma schedule: itssteps/denoisewidgets are not
read when it resumes an unfinished run.
2.2.1 — 2026-10-08
Same positive order in every phase
- The imprint keeps QUALITY apart: Saya Couple Imprint Pack V2 gains an optional
quality_promptinput (last),
fed by the Main Promptprefix; itsmain_promptis then thescene. Absent = 2.1 imprints, read unchanged. - Every phase rebuilt from the imprint (Hires, HiDream, Refine, Detailers, Final Upscale, USDU) reads like Phase 1:
Couple MAINQUALITY, ACTION, background, background cellsQUALITY, background, SoloQUALITY, ACTION, P1, background(HiDream Solo keeps its trigger first). Testquality_imprint_order. - Full workflow wired (
prefix-> imprintquality_text,scene-> imprint main);tools/migrate_workflow_v220.py
gains this step (still idempotent, also on a Full already migrated to 2.2.0). test_action_imprintnow tests the pack under test, not the copy installed in ComfyUI.
2.2.0 — 2026-10-08
Positive order: quality first, background last
- Saya Main Prompt (and the French node) gains two outputs, appended last so saved workflows keep their links:
prefix(quality tags + LoRA triggers alone) andscene(background + tags + extra, no prefix).main_promptis
unchanged and still feeds the imprint, so later phases rebuild exactly as before. - Saya Multi Couple gains an optional
qualityinput (last input). Wired, MAIN must be thescene: Solo reads
QUALITY ++ ACTION ++ P1 ++ MAIN, Couple gives MAINQUALITY ++ ACTION ++ MAINand the background pixels
QUALITY ++ MAIN; P1 / P2 stay separate contexts. Unwired = 2.1 behaviour, bit-identical. Tests
multi_couple_quality_order,multi_couple_solo,test_main_prompt. - Workflows: Demo and Full wired (QUALITY encode ->
quality, MAIN encode readsscene). In the Full, the P1 / P2
assembly now puts the anatomy text first (string_a) and the identity second, so the organ is encoded in the same
CLIP chunk as the body it belongs to.tools/migrate_workflow_v220.py old.json new.jsonapplies the same changes to a
customised 2.1 Full (idempotent).
Dynamic ownership anchors
- Vocabulary from a 2 500-character batch: hair (
waves,strands,tuft,chignon…), face and skin (lipstick,
dimples,jawline,laugh lines, facial hair…), species parts (tentacles,tusks,doll joints,implants,
vines,crystals…), outfit (armband,collar,hat,jewelry…), body types (kitsune,dryad,gorgon,
undead…) and genders (femboy,new-half,otoko no ko,non-binary,intersex,transgender…, hyphen or space). - Robust reading: every weight is removed, nested or stacked (
((white eyes:1.2):1.1)->white eyes), and a-like
comparison is not the noun (doll-likeis not a doll). test_ownership_anchorsnow tests the pack under test, not the copy installed in ComfyUI.
2.1.3 — 2026-10-08
Background Picker
- 80 new backgrounds marked
unsafein the stock ("unsafe": "figures"48,"captivity"22,"gore"10): places
whose scenery itself carries figures, captivity or gore. Like the fairground rides, they are kept out of random draws
unless theunsafeswitch is on (Picker, Main Prompt, Prompt MAIN FR); the switch tooltips now name all four kinds. - Locked seeds keep their background (same redraw rule as 2.1.2). Test
background_picker_unsafecovers a marked entry.
AI tools used for this work: Claude, Z Code, Codex and Kimi (see AI-assisted development in the README).
Saya Studio 1.0.0-beta.1 (Linux beta)
Saya Studio 1.0.0-beta.1 — first Linux beta
Saya Studio is a local desktop app that drives ComfyUI for anime-style character images. ComfyUI renders,
Saya Studio organizes: casting, a six-pass workflow, gallery, character sheets, LoRA manager, graph editor.
Nothing runs in the cloud.
This is a beta. It is the companion app of the Saya Couple node pack and, like the pack, first a backup of my
own setup. Back up your data and your ComfyUI folder before trying it.
Requirements
- Linux x86_64 with WebKitGTK 4.1 (Debian 12+, Ubuntu 22.04+, Fedora 39+, openSUSE Tumbleweed / Leap 15.6,
Arch / EndeavourOS, NixOS). - A running ComfyUI (default
~/AI/ComfyUI, on127.0.0.1:8188) with the Saya Couple nodes 2.3.0 or newer
from this repository (./saya install --comfyui /path/to/ComfyUI), plus the models your workflow uses. - Python 3. Optional:
ffmpegfor LoRA video previews.
Install
| Distribution | File | Command |
|---|---|---|
| Debian, Ubuntu | saya-studio_1.0.0-beta.1_amd64.deb |
sudo apt install ./saya-studio_1.0.0-beta.1_amd64.deb |
| Fedora | saya-studio-1.0.0-beta.1.fedora.x86_64.rpm |
sudo dnf install ./saya-studio-1.0.0-beta.1.fedora.x86_64.rpm |
| openSUSE | saya-studio-1.0.0-beta.1.opensuse.x86_64.rpm |
sudo zypper install ./saya-studio-1.0.0-beta.1.opensuse.x86_64.rpm |
| Arch, EndeavourOS | saya-studio-1.0.0-beta.1-x86_64.pkg.tar.zst |
sudo pacman -U ./saya-studio-1.0.0-beta.1-x86_64.pkg.tar.zst |
| Any distribution | saya-studio_1.0.0-beta.1_amd64.AppImage |
chmod +x it, then run it |
| Flatpak | saya-studio-1.0.0-beta.1-x86_64.flatpak |
flatpak install --user ./saya-studio-1.0.0-beta.1-x86_64.flatpak |
| Snap | saya-studio_1.0.0-beta.1_amd64.snap |
sudo snap install --dangerous ./saya-studio_1.0.0-beta.1_amd64.snap |
| Nix | flake in studio/ |
nix run github:alphaziod/saya-studio-x-couple?dir=studio |
Check your download: sha256sum -c SHA256SUMS --ignore-missing.
What's in 1.0
- Generation — open a ComfyUI workflow (UI format), check its faithful API conversion (refused, never
guessed, when something cannot be resolved), edit inputs, submit, follow progress. - Saya preset — six passes (composition, hires fix, HiDream, post, detailers, final upscale) with memory
released between passes, one GPU job at a time. - Casting — N characters from a draw engine, pass 1 only, keep the good ones and finish them through the six
passes; rotations (one character on every action, one action on N characters); action drafts tested in an
isolated copy of the engine before they are added for real. - Gallery — incremental indexing of your folders (SHA-256, ComfyUI PNG metadata), filters by checkpoint, LoRA
and character, favourites, review, duplicates; deliveries filed by day and family in~/Images/saya studio. - Characters — sheets (identity prompt + anatomy), variants with backgrounds, reference images, import.
- Models — LoRA manager with send-to-generation, stack and right-click actions.
- Workshop — native ComfyUI graph editor (subgraphs, undo), workflows, pipelines, A/B lab, scenes.
- Your data stays yours — SQLite database in
~/.local/share/studio.saya.desktop/, lasting settings and
presets in~/Documents/saya studio config/, backups withsaya-studio-maintenance backup|verify|restore. - 14 interface languages (French by default).
Known limitations
- Beta. Used day to day on Arch (Wayland) with an AMD GPU. The other packages are built and checked by CI but
have not all been run by hand yet: please report what breaks. - Casting needs a draw engine, which is not distributed; without one, Casting says so and stays unavailable.
- Flatpak and Snap run sandboxed: ComfyUI on
127.0.0.1and your home folder are allowed, but the browser
extension bridge may not work there. - The bundled preset ships with neutral example prompts and empty LoRA stacks: fill in your own. Its model
settings are mine; keep the ones that work on your machine. - The app can be used to make adult images of adult characters; its store metadata says so.
Also in this repository
Saya Couple 2.3.0 (the node pack, ./saya install): one ownership anchor per aspect of the genital anatomy
block, Saya Family Save node, saya_role PNG chunk on phase images, softer background picker. See
CHANGELOG.md.
Documentation
README ·
Packaging ·
For AI agents and contributors
License: GPL-3.0-or-later.
Saya Couple v2.1.2
Updating from 2.1.x:
git pull, then./saya installagain, then./saya verify. No ComfyUI file is modified.
Background Picker
- Fairground rides are out of random draws by default. Backgrounds whose name or main place is a carousel, a
fairground or an amusement park (33 in the stock) are no longer drawn byallor by a category. They stay in the stock. - New
unsafeswitch (off by default) to draw them too:unsafeon Saya Background Picker,
unsafe_backgroundson Saya Main Prompt,decors_unsafeon Saya Prompt MAIN (FR). It is the last input of each
node, so saved workflows keep their settings. - Locked seeds keep their background. The draw still runs on the whole stock; only a seed that lands on a
fairground ride with the switch off is redrawn among the others, with the same seed. Testbackground_picker_unsafe.
AI tools used for this work: Claude, Z Code, Codex and Kimi (see AI-assisted development in the README).
Saya Couple v2.1.1
Updating from 2.1.0:
git pull, then./saya installagain, then./saya verify. No ComfyUI file is modified.
Backgrounds
- The background stock grows from 7 409 to 8 799 (1 390 new, same format:
bg+ hand-detailedultra, 41 categories unchanged).- 32 hand-written places that were missing: pastel patisserie, cat cafe, royal marble baths, empty public bathhouse, art deco hotel pool, gamer bedroom, streamer studio, jazz lounge, snowy pine forest, dojo, fairy domain, infernal throne hall…
- 193 style × time-of-day combinations for the most requested kinds of places: 8 living room styles, 8 bedroom styles, luxury lounges, gamer rooms, sport halls, pastel places, royal baths, infernal halls.
- 1 164 places from a large list of ideas (urban corners, craft workshops, transport, landscapes, gardens, heritage, industry, science, spa and leisure, uncanny and dreamlike places, near future, weather moods, horror, medieval, modern city, nostalgia, dystopia, places of worship, cosmic horror, oppressive architecture), translated into prompt tags and filtered: no person or silhouette in the scenery, no object that creates an extra figure or an inset (mirror, statue, portrait, mannequin, mask, screen), nothing related to childhood, no gore, no place of captivity.
- A creepy dismantled carousel in the fog (horror category).
- Background Picker tests pass on the larger stock.
Prompt guides
PROMPTS_GUIDE_EN.md/PROMPTS_GUIDE_FR.mdgain §8, lessons from a 2 500-character solo batch: where a tag lands in the CLIP chunks matters more than its weight, framing first, light weights for age tags, colour words that bleed, a flat chest on an adult body still to be proven, how original characters keep their identity, creatures that stay about 80 % human, the sticky liquid nobody asked for, matched backgrounds, LoRA triggers, weak concepts, describing what must look good, locking a written size, colours of small details, per-character negatives, Sampler 2 drawing the details, species materials on the whole body.
AI tools used for this work: Claude, Z Code, Codex and Kimi (see AI-assisted development in the README).
Saya Couple v2.1.0
Updating from 2.0.x:
git pull, then./saya installagain, then./saya verify. No ComfyUI file is modified.
Fixes
- Solo Phase 1 follows the prompt again. In Solo,
SayaMultiCouplecombined MAIN + ACTION and P1 with
ConditioningCombine, which averages two separate predictions: half of the guidance came from the scene and the
pose alone, with no character in it (wrong clothes, wrong person, censored or deformed results). Solo now sends
one conditioning, MAIN ++ ACTION ++ P1 (token concatenation), exactly like the phases rebuilt from the imprint
(one text "MAIN, ACTION, PERSON 1"). Couple mode is not touched. Test updated (multi_couple_solo). - Naturalize colour lock no longer paints colour fringes.
SayaNaturalizePostProcesstook the refine's
lightness and the reference's colour pixel by pixel. Even at denoise 0.1 the refine redraws lines by a pixel or
two, so the old line colour landed next to the new line: coloured halos on eyes, lashes and mouth, then amplified
by every later pass. The lock now corrects only the blurred (area) colour drift and keeps the refine's own
line colour. On a real image with lines moved by 1-3 px, the largest change drops from 75-84 to 6-21 levels (8 bit)
and no pixel moves by more than 20 levels any more.color_lockkeeps its range and meaning for areas. - Highlight taming off in the Full workflow. It also darkened the light side of every line and the eye
catchlights (7 % of the pixels touched on a test image). The Full workflow ships it at 0; the tooltip says why.
New
- Saya LoRA Family Filter · Model 2 (
SayaLoraFamilyFilter). Applies the LoRAs of the Model 1 stack to
Model 2, keeping only those its family can take, from thebase_modelLoRA Manager stores for each file: SDXL
model 2 -> SDXL LoRAs only; Illustrious model 2 -> Illustrious and SDXL; any other family -> everything (for now);
a LoRA without a known family passes and is reported. The checkpoint family comes from its metadata, or from its
folder when the metadata says "Unknown". UNet only (Model 2 keeps the Model 1 CLIP). Inputs: the five
loaded_lorasoutputs of LoRA Manager loaders, the Model 2 checkpoint name (text input that follows the loader),
free extra LoRAs; outputreportlists PASS / BLOCK / SKIP. Wired in the Full workflow; Model 2 used to run
without any LoRA. Tests:lora_family_filter. - Pubic hair is an anatomy anchor of its own. In
phrase_anatomyownership, "green pubic hair" or
"green hairy penis" is now a separate part next to the organ's size / state, so a hair colour that differs between
the two characters anchors each organ to its owner. Prompting tip: write<hair colour> pubic hair(the Danbooru
tag, known to Illustrious) rather than "hairy penis".
Workflows
- Demo and Full rebuilt from my current workflow with
tools/build_demo_workflow.pyand
tools/build_full_workflow.py(same public-safe rules: demo prompts,SELECT_*placeholders, empty LoRA stacks,
no personal names). The Full workflow follows my own placement of the Hires + USDU block: the MAIN · USDU
Position selector of 2.0 is gone. Detailer slots are named Detailer 1 … Detailer 13. The Full builder also
empties the per-character anatomy fields under their current titles. The demo only gains theperson_anchor
input;Saya_Couple_Demo_api.jsonis regenerated (unchanged). - The workflow check
test_usdu_position_switchskips a workflow that has no USDU position selector.
AMD
- AMD desktop VRAM reserve counted once. The optional safety patch already excludes 1 GiB from the
allocator cap.extra_reserved_memory()now reserves only the part of--reserve-vramabove that amount
while the cap is active. Uncapped devices keep their previous behavior; the hard cap, full unloads,
inference reserve and restriction on partial-model growth remain in place. - The installer upgrades the previous AMD patch using a checked three-line delta and preserves its original
backup. CPU checks cover fresh install, upgrade, idempotence, conflict refusal, reversal and five reserve cases.
HiDream completed two local GPU runs with full model loading (warm and cold conditioning cache); no general
speed or image-quality improvement is claimed. Workflows and artistic settings are unchanged.
AI tools used for this work: Claude, Z Code, Codex and Kimi (see AI-assisted development in the README).
Saya Couple v2.0.1
2.0 modifies no ComfyUI file. Updating from 1.x or 2.0.0:
git pull, then./saya installagain, then./saya verify.
Fix
- Solo keeps the ACTION in Phase 1. With Couple / Solo OFF,
SayaMultiCoupleencoded MAIN + P1 only and dropped theactioninput; the phases rebuilt from the imprint (2 to 6) already used MAIN + ACTION + P1, so the pose could change between Phase 1 and Phase 2. Solo now reads exactly MAIN (+ ACTION, concatenated as for the characters in Couple) + P1 and the negative; P2 is never read. Couple mode unchanged. Solo renders with a connected ACTION change on purpose.