tui: tracking — loom-tui v0.1.0 roadmap & implementation order #47

Open
opened 2026-04-11 13:07:50 +00:00 by charles · 3 comments
Owner

Purpose

Meta / tracking issue for the loom-tui initiative. Source of truth for implementation order and PR stacking strategy. Sub-tickets are in the loom-tui v0.1.0 milestone and reference specs/loom-tui-specification.md.

Implement in the phases below. Each PR stacks on the previous; don't skip phases — earlier tickets set up the traits and plumbing later tickets assume.

Phase 1 — Foundations (serial; unblock everything else)

  1. #11 Crate scaffold with crossterm lifecycle
  2. #16 App-level event loop and state machine
  3. #19 Configurable key bindings system
  4. #43 tui.toml configuration file support
  5. #17 Global navigation — sidebar, status bar, layout
  6. #18 Command palette with fuzzy search
  7. #42 Notification bar, confirmation dialogs & error handling

Phase 2 — Image rendering (can start after #11; parallelisable inside)

  1. #12 Kitty Graphics Protocol backend
  2. #14 Chafa / block-art fallback renderer
  3. #13 Sixel backend
  4. #15 Protocol auto-detection

Phase 3 — Generate screen

  1. #20 Prompt editor & parameter fields
  2. #21 LoRA panel
  3. #22 Mode tabs (t2i / i2i / inpaint / controlnet)
  4. #23 Inpainting canvas overlay
  5. #25 Real-time preview pane
  6. #24 Generation queue overlay
  7. #26 Prompt enhancement & tag generation AI jobs
  1. #27 Grid & list view
  2. #28 Search, filter, sort
  3. #29 Folders, favorites, multi-select
  4. #30 Detail view, zoom & pan, info overlay
  5. #31 Replay generation & AI defect/region analysis

Phase 5 — Model browser

  1. #32 CivitAI integration
  2. #33 Hugging Face integration
  3. #34 Local tab & install/rename/delete flow
  4. #35 IP-Adapter browsing

Phase 6 — Entities, presets, settings, sharing, devtools

  1. #36 Entity screen — CRUD + per-style prompts
  2. #37 Entity screen — face detection & AI description
  3. #38 Presets screen
  4. #39 Settings screen — all sections
  5. #40 Sharing overlay
  6. #41 Log / debug overlay

Phase 7 — CI, packaging, tests

  1. #44 just run-tui recipe & Forgejo Actions CI
  2. #46 Unit & integration test suite
  3. #45 Packaging — meson, PKGBUILD, nfpm

PR stacking policy

  • One PR per ticket. Each PR targets the branch of its immediate predecessor in the phase, or main for the first ticket in a phase
  • Branch naming: tui/<short-slug>-<issue-number> (e.g. tui/scaffold-11, tui/kitty-renderer-12)
  • PR description references the issue with Closes charles/loom#N
  • Don't merge a phase's first PR into main until the reviewer OKs the overall shape; subsequent PRs in the same phase rebase as needed
  • just qa must pass before requesting review

Issue index

See milestone loom-tui v0.1.0 for the full list.

## Purpose Meta / tracking issue for the `loom-tui` initiative. Source of truth for implementation order and PR stacking strategy. Sub-tickets are in the `loom-tui v0.1.0` milestone and reference `specs/loom-tui-specification.md`. ## Recommended implementation order Implement in the phases below. Each PR stacks on the previous; don't skip phases — earlier tickets set up the traits and plumbing later tickets assume. ### Phase 1 — Foundations (serial; unblock everything else) 1. #11 Crate scaffold with crossterm lifecycle 2. #16 App-level event loop and state machine 3. #19 Configurable key bindings system 4. #43 `tui.toml` configuration file support 5. #17 Global navigation — sidebar, status bar, layout 6. #18 Command palette with fuzzy search 7. #42 Notification bar, confirmation dialogs & error handling ### Phase 2 — Image rendering (can start after #11; parallelisable inside) 8. #12 Kitty Graphics Protocol backend 9. #14 Chafa / block-art fallback renderer 10. #13 Sixel backend 11. #15 Protocol auto-detection ### Phase 3 — Generate screen 12. #20 Prompt editor & parameter fields 13. #21 LoRA panel 14. #22 Mode tabs (t2i / i2i / inpaint / controlnet) 15. #23 Inpainting canvas overlay 16. #25 Real-time preview pane 17. #24 Generation queue overlay 18. #26 Prompt enhancement & tag generation AI jobs ### Phase 4 — Gallery screen 19. #27 Grid & list view 20. #28 Search, filter, sort 21. #29 Folders, favorites, multi-select 22. #30 Detail view, zoom & pan, info overlay 23. #31 Replay generation & AI defect/region analysis ### Phase 5 — Model browser 24. #32 CivitAI integration 25. #33 Hugging Face integration 26. #34 Local tab & install/rename/delete flow 27. #35 IP-Adapter browsing ### Phase 6 — Entities, presets, settings, sharing, devtools 28. #36 Entity screen — CRUD + per-style prompts 29. #37 Entity screen — face detection & AI description 30. #38 Presets screen 31. #39 Settings screen — all sections 32. #40 Sharing overlay 33. #41 Log / debug overlay ### Phase 7 — CI, packaging, tests 34. #44 `just run-tui` recipe & Forgejo Actions CI 35. #46 Unit & integration test suite 36. #45 Packaging — meson, PKGBUILD, nfpm ## PR stacking policy - **One PR per ticket**. Each PR targets the branch of its immediate predecessor in the phase, or `main` for the first ticket in a phase - Branch naming: `tui/<short-slug>-<issue-number>` (e.g. `tui/scaffold-11`, `tui/kitty-renderer-12`) - PR description references the issue with `Closes charles/loom#N` - Don't merge a phase's first PR into `main` until the reviewer OKs the overall shape; subsequent PRs in the same phase rebase as needed - `just qa` must pass before requesting review ## Issue index See milestone **loom-tui v0.1.0** for the full list.
charles added this to the loom-tui v0.1.0 milestone 2026-04-11 13:07:50 +00:00
Collaborator

Phase 8 — Backend Integration (glue layer)

All Phase 1–7 tickets (#11–#46) built UI scaffolds. These tickets wire every screen/overlay to loom-core's actual backends (PluginBridge, GalleryStorage, AiJobWorker, event bus).

Implementation order

Foundations first (#84, #85), then screens can be wired in parallel:

  1. #84 loom-core bootstrap — plugin registry, storage & event bus
  2. #85 Image renderer integration — thread through AppCtx
  3. #86 Generate screen — wire generation submission & progress
  4. #87 Generate screen — LoRA picker overlay
  5. #88 Gallery screen — wire SQLite storage & image display
  6. #89 Model browser — wire plugin bridge API calls & download flow
  7. #90 Entity screen — wire storage backend & AI calls
  8. #91 Presets screen — wire storage backend & apply flow
  9. #92 Settings screen — wire config read/write & live apply
  10. #93 Sharing overlay — wire sharing plugin calls
  11. #94 AI jobs integration — wire AiJobWorker for all AI features
  12. #95 Generation queue — wire real-time job management
  13. #96 Log overlay — wire loom-core log capture & plugin stdout

Dependency graph

#84 (bootstrap) ──┬──> #85 (image renderer)
                   │
                   ├──> #86 (generate submission) ──> #87 (LoRA picker)
                   │         │
                   │         └──> #95 (queue management)
                   │
                   ├──> #88 (gallery storage)
                   ├──> #89 (model browser APIs)
                   ├──> #90 (entity storage)
                   ├──> #91 (preset storage)
                   ├──> #92 (settings persistence)
                   ├──> #93 (sharing calls)
                   ├──> #94 (AI jobs)
                   └──> #96 (log capture)

#84 and #85 are serial (everything depends on bootstrap). After those, #86–#96 are parallelizable — each wires a different screen/overlay independently.

## Phase 8 — Backend Integration (glue layer) All Phase 1–7 tickets (#11–#46) built UI scaffolds. These tickets wire every screen/overlay to loom-core's actual backends (PluginBridge, GalleryStorage, AiJobWorker, event bus). ### Implementation order Foundations first (#84, #85), then screens can be wired in parallel: 35. #84 loom-core bootstrap — plugin registry, storage & event bus 36. #85 Image renderer integration — thread through AppCtx 37. #86 Generate screen — wire generation submission & progress 38. #87 Generate screen — LoRA picker overlay 39. #88 Gallery screen — wire SQLite storage & image display 40. #89 Model browser — wire plugin bridge API calls & download flow 41. #90 Entity screen — wire storage backend & AI calls 42. #91 Presets screen — wire storage backend & apply flow 43. #92 Settings screen — wire config read/write & live apply 44. #93 Sharing overlay — wire sharing plugin calls 45. #94 AI jobs integration — wire AiJobWorker for all AI features 46. #95 Generation queue — wire real-time job management 47. #96 Log overlay — wire loom-core log capture & plugin stdout ### Dependency graph ``` #84 (bootstrap) ──┬──> #85 (image renderer) │ ├──> #86 (generate submission) ──> #87 (LoRA picker) │ │ │ └──> #95 (queue management) │ ├──> #88 (gallery storage) ├──> #89 (model browser APIs) ├──> #90 (entity storage) ├──> #91 (preset storage) ├──> #92 (settings persistence) ├──> #93 (sharing calls) ├──> #94 (AI jobs) └──> #96 (log capture) ``` #84 and #85 are serial (everything depends on bootstrap). After those, #86–#96 are parallelizable — each wires a different screen/overlay independently.
Collaborator

Status update — post-#129

Significant progress across phases 3, 4, and 5 from a series of recent rewrites. Re-checking against the phase list:

Done / functionally covered

  • Phase 2 (image rendering) — replaced by ratatui-image (#119); kitty/sixel/halfblock auto-detection handled by the crate.
  • Phase 3 #20 Prompt editor — rebuilt on rat-widget TextArea (real cursor, selection, clipboard, word wrap).
  • Phase 3 #22 Mode tabs — focusable, Left/Right switches mode.
  • Phase 4 #27 Grid view — masonry layout with scroll virtualization.
  • Phase 4 #30 Detail view, zoom & pan — works.
  • Phase 5 #32 / #33 / #34 Model browser — three tabs (CivitAI, HuggingFace, Local), thumbnails, install (subdir bug fixed).
  • Phase 6 #36 Entity screen — three-column nav, reference image, prompt boxes.

🟡 Partial / needs follow-up

  • Phase 3 #20 — model/sampler are picker overlays (good), but full inline combobox (rat-widget Choice) not yet integrated.
  • Phase 3 #25 Real-time preview pane — not visible on generate screen yet (preview state exists, no UI).
  • Phase 4 #28 / #29 Search/filter/sort/folders — partially in place from earlier work.
  • Phase 4 #31 Replay generation — replay_params() exists but no key binding (ticket still open).

🔴 Still open as filed

  • Phase 6 #37 Face detection / AI describe entity
  • Phase 6 #38 Presets screen
  • Phase 6 #39 Settings — partial
  • Phase 6 #40 Sharing overlay
  • Phase 7 #44 / #45 / #46 Packaging / tests / CI

Cross-cutting issues filed since this tracking ticket

The following weren't in the original phase list and should be folded in for the v0.1.0 push:

  • #122 Gallery auto-refresh on storage mutations
  • #123 Settings change propagation via EventBus
  • #124 Smart dirty tracking (idle CPU)
  • #125 Async storage operations
  • #126 Plugin lifecycle events
  • #127 Responsive/adaptive layout (partially done — see comment there)

These are all infra-level and probably belong in a "Phase 8 — polish" before tagging v0.1.0.

## Status update — post-#129 Significant progress across phases 3, 4, and 5 from a series of recent rewrites. Re-checking against the phase list: ### ✅ Done / functionally covered - **Phase 2** (image rendering) — replaced by `ratatui-image` (#119); kitty/sixel/halfblock auto-detection handled by the crate. - **Phase 3 #20** Prompt editor — rebuilt on `rat-widget` TextArea (real cursor, selection, clipboard, word wrap). - **Phase 3 #22** Mode tabs — focusable, Left/Right switches mode. - **Phase 4 #27** Grid view — masonry layout with scroll virtualization. - **Phase 4 #30** Detail view, zoom & pan — works. - **Phase 5 #32 / #33 / #34** Model browser — three tabs (CivitAI, HuggingFace, Local), thumbnails, install (subdir bug fixed). - **Phase 6 #36** Entity screen — three-column nav, reference image, prompt boxes. ### 🟡 Partial / needs follow-up - **Phase 3 #20** — model/sampler are picker overlays (good), but full inline combobox (rat-widget Choice) not yet integrated. - **Phase 3 #25** Real-time preview pane — not visible on generate screen yet (preview state exists, no UI). - **Phase 4 #28 / #29** Search/filter/sort/folders — partially in place from earlier work. - **Phase 4 #31** Replay generation — `replay_params()` exists but no key binding (ticket still open). ### 🔴 Still open as filed - **Phase 6 #37** Face detection / AI describe entity - **Phase 6 #38** Presets screen - **Phase 6 #39** Settings — partial - **Phase 6 #40** Sharing overlay - **Phase 7 #44 / #45 / #46** Packaging / tests / CI ### Cross-cutting issues filed since this tracking ticket The following weren't in the original phase list and should be folded in for the v0.1.0 push: - #122 Gallery auto-refresh on storage mutations - #123 Settings change propagation via EventBus - #124 Smart dirty tracking (idle CPU) - #125 Async storage operations - #126 Plugin lifecycle events - #127 Responsive/adaptive layout (partially done — see comment there) These are all infra-level and probably belong in a "Phase 8 — polish" before tagging v0.1.0.
Collaborator

New batch from GTK↔TUI parity audit

Filed 16 follow-up tickets covering all gaps identified in the audit. Suggested implementation order (top to bottom, by value-per-effort):

Quick wins (small, high-impact)

  1. #131 — gallery replay key binding (just wires up existing replay_params)
  2. #138 — gallery move-to-folder (reuses string_picker)
  3. #136 — gallery batch operation toolbar (no new widgets, just rendering)
  4. #144 — presets hires fix + ADetailer (param fields only)
  5. #145 — settings theme picker (centralises hardcoded colors)

Mid-size features

  1. #134 — model browser detail view (carousel + metadata)
  2. #135 — gallery tagging + AI auto-tag
  3. #137 — gallery filter popover with chips
  4. #133 — entities face detection / AI describe
  5. #139 — per-entity LoRA association
  6. #146 — interactive keybindings editor

Large features

  1. #132 — inpainting canvas (full keyboard mask editor)
  2. #141 — ControlNet picker (units configuration)
  3. #140 — face crop dialog (depends on #133)
  4. #142 — cloud sync (WebDAV port from GTK)
  5. #143 — first-run wizard / dependency installer

Phase 8 — polish (already in roadmap)

  • #122–#127 (already merged or in PR #130)
  • #127 partially done; remaining: breakpoint system + sidebar/entity adaptation

Each ticket is self-contained with acceptance criteria, references to GTK code, and out-of-scope notes — designed for AI agent pickup.

## New batch from GTK↔TUI parity audit Filed 16 follow-up tickets covering all gaps identified in the audit. Suggested implementation order (top to bottom, by value-per-effort): ### Quick wins (small, high-impact) 1. **#131** — gallery replay key binding (just wires up existing `replay_params`) 2. **#138** — gallery move-to-folder (reuses string_picker) 3. **#136** — gallery batch operation toolbar (no new widgets, just rendering) 4. **#144** — presets hires fix + ADetailer (param fields only) 5. **#145** — settings theme picker (centralises hardcoded colors) ### Mid-size features 6. **#134** — model browser detail view (carousel + metadata) 7. **#135** — gallery tagging + AI auto-tag 8. **#137** — gallery filter popover with chips 9. **#133** — entities face detection / AI describe 10. **#139** — per-entity LoRA association 11. **#146** — interactive keybindings editor ### Large features 12. **#132** — inpainting canvas (full keyboard mask editor) 13. **#141** — ControlNet picker (units configuration) 14. **#140** — face crop dialog (depends on #133) 15. **#142** — cloud sync (WebDAV port from GTK) 16. **#143** — first-run wizard / dependency installer ### Phase 8 — polish (already in roadmap) - #122–#127 (already merged or in PR #130) - #127 partially done; remaining: breakpoint system + sidebar/entity adaptation Each ticket is self-contained with acceptance criteria, references to GTK code, and out-of-scope notes — designed for AI agent pickup.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/loom#47
No description provided.