No description
  • Rust 89.2%
  • Lua 8.9%
  • Python 1.3%
  • Just 0.3%
  • Meson 0.2%
  • Other 0.1%
Find a file
Charles Jacquin 593ea24814
Some checks failed
qa / qa (push) Failing after 2m17s
fix(plugin/sd): fall back to /loom/list_files when sd-vae endpoint is missing
Recent Forge builds removed `/sdapi/v1/sd-vae` and route VAE discovery
through `/sdapi/v1/sd-modules` (which also covers text encoders, so the
shape doesn't match the old VAE-only response). On those builds
`list_vaes` returned 404 and the dropdown collapsed to just
"Automatic" — every VAE the user had downloaded, including FLUX's
`flux-ae.safetensors`, was invisible.

Try the legacy endpoint first to keep older Forge installs working,
then fall back to the Loom extension's `/loom/list_files?subdir=VAE`
endpoint (already used by the FLUX module picker). The fallback
returns raw filenames, which is what Forge's `sd_vae` setting accepts
on these newer builds anyway.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 18:25:28 +02:00
.forgejo/workflows ci(qa): cache ~/.cargo only, drop target/ 2026-04-15 20:35:26 +02:00
build-aux feat(flatpak): add CI workflow, justfile targets, update repo URLs 2026-03-23 09:47:47 +01:00
crates fix(store): route ControlNet/IPAdapter installs to ControlNet/ 2026-04-27 18:19:22 +02:00
data feat: malcontent parental controls integration + OARS metadata 2026-03-25 23:35:06 +01:00
docs docs(control-api): document FLUX generation params and CLI usage 2026-04-27 16:06:12 +02:00
extensions feat(forge-ext): expose text_encoder and VAE directory listings 2026-04-27 15:54:58 +02:00
plugins fix(plugin/sd): fall back to /loom/list_files when sd-vae endpoint is missing 2026-04-27 18:25:28 +02:00
po feat(queue): add Clear Pending button to remove all queued items 2026-04-09 15:28:55 +02:00
specs chore(tui): specs 2026-04-11 10:59:09 +02:00
.gitignore fix: filter non-SD models from HuggingFace search results 2026-03-09 19:26:27 +01:00
.rumdl.toml docs: rewrite README as project homepage with logo, badges, and full feature list 2026-03-07 11:27:33 +01:00
.rusty-hook.toml chore: devtools setup with justfile, linters, and git hooks 2026-02-20 12:19:20 +01:00
.tarpaulin.toml test: add 195 unit tests to loom-core with 91% coverage 2026-02-21 21:26:12 +01:00
Cargo.lock tui: #143 first-run onboarding wizard (#151) 2026-04-16 08:22:02 +00:00
Cargo.toml feat(tui): generate screen rewrite + cross-screen nav polish (#129) 2026-04-14 19:21:14 +00:00
CLAUDE.md chore(ci): simplify workflows (#128) 2026-04-13 19:41:12 +00:00
justfile chore(ci): simplify workflows (#128) 2026-04-13 19:41:12 +00:00
LICENSE chore: add PKGBUILD, desktop entry, icons, and LICENSE for AUR release 2026-03-06 22:38:42 +01:00
logo.png feat: add Meson build system and Flatpak packaging 2026-03-07 12:45:46 +01:00
meson.build feat(tui): packaging — meson target, PKGBUILD optdepend, nfpm-tui 2026-04-11 18:44:32 +02:00
meson.options feat(tui): packaging — meson target, PKGBUILD optdepend, nfpm-tui 2026-04-11 18:44:32 +02:00
nfpm-tui.yaml feat(tui): packaging — meson target, PKGBUILD optdepend, nfpm-tui 2026-04-11 18:44:32 +02:00
nfpm.yaml fix: update repository URLs from cjacquin to charles 2026-03-23 00:47:48 +01:00
PKGBUILD feat(tui): packaging — meson target, PKGBUILD optdepend, nfpm-tui 2026-04-11 18:44:32 +02:00
README.md fix: update repository URLs from cjacquin to charles 2026-03-23 00:47:48 +01:00
tombi.toml chore: devtools setup with justfile, linters, and git hooks 2026-02-20 12:19:20 +01:00

Loom

Loom

AI image generation desktop client for GNOME, built with Rust, GTK4/libadwaita, and a Lua plugin system.

License: GPL-3.0-or-later Rust GTK4 AUR


Features

Generation

  • Text-to-image and image-to-image generation
  • Inpainting with a built-in canvas mask editor
  • ControlNet support (pose, depth, canny, etc.)
  • Generation queue with progress tracking
  • Configurable presets (model, sampler, CFG, steps, aspect ratio, LoRAs)

Browsing and Discovery

  • Model and LoRA browser with search, preview images, and one-click install
  • CivitAI and Hugging Face integration for browsing community models
  • IP-Adapter support for image-guided generation

AI-Assisted Workflow

  • Prompt enhancement via Ollama or Claude Code
  • Entity descriptions and face detection
  • Image defect detection and region analysis
  • Tag generation from images

Organization

  • Gallery with SQLite persistence, folders, search, filtering, and favorites
  • Entity system for characters, poses, and places with per-style prompts
  • Presets for saving and reusing generation configurations
  • System prompts for AI enhancement customization

Sharing

  • Share images to Mastodon, Pixelfed, and Bluesky
  • CivitAI image sharing

Extensibility

  • Lua plugin system with capability-based routing
  • Hot-swappable backends — switch between local and cloud providers
  • Host API for plugins: HTTP, JSON, config, storage, caching, logging

Supported Backends

Plugin Type Description
Stable Diffusion Local A1111/Forge API — full feature set including ControlNet, scripts, upscalers
ComfyUI Local ComfyUI API — node-based workflow generation
CivitAI Cloud Browse models/LoRAs, cloud generation, image sharing
Stability AI Cloud Stability AI generation API
Hugging Face Cloud Browse models, inference API generation
Gemini Cloud Google Gemini and Imagen API
Ollama Local Prompt enhancement, entity description, defect detection
Claude Code Local AI-powered prompt enhancement and image analysis
Mastodon Cloud Share images to Mastodon and Pixelfed
Bluesky Cloud Share images to Bluesky

Installation

Flatpak

flatpak install flathub app.jacquin.loom

Arch Linux (AUR)

yay -S loom

Prebuilt Packages

Download .deb, .rpm, .apk, or AppImage from the latest release.

Build from Source

Dependencies:

  • Rust (edition 2024)
  • GTK4 and libadwaita development libraries
  • OpenSSL
# Arch Linux
sudo pacman -S gtk4 libadwaita openssl

# Ubuntu/Debian
sudo apt install libgtk-4-dev libadwaita-1-dev libssl-dev

# Fedora
sudo dnf install gtk4-devel libadwaita-devel openssl-devel

Build and run:

git clone https://forge.jacquin.app/charles/loom.git
cd loom
just setup    # Install dev tools + git hooks
just run      # Run in debug mode

For a release build:

just build-release

The binary is at target/release/loom-gtk.

Development

just run        # Debug mode (RUST_LOG=loom=debug)
just build      # Debug build
just build-release    # Release build (opt-level=3, LTO, strip)
just test       # Run tests
just lint       # Clippy + TOML + Markdown lints
just fmt        # Format all (Rust + TOML)
just qa         # Full quality check (fmt + lint + test)
just coverage   # Test coverage report

Architecture

Loom is split into two crates:

  • loom-core — toolkit-agnostic business logic library (plugin system, models, SQLite storage, generation worker). Could power alternative frontends (KDE, TUI, CLI).
  • loom-gtk — GNOME frontend built with GTK4, libadwaita, and relm4.

Backends are Lua plugins that communicate with the core via a capability-based bridge. See CLAUDE.md for detailed architecture and conventions.

Repository

The primary repository is hosted on forge.jacquin.app with CI/CD and releases. A read-only mirror is available on Codeberg.

Issues, pull requests, and releases are managed on the primary instance.

License

GPL-3.0-or-later