Skip to content

Epic: AI actions — provider-agnostic capabilities on the first-class pipeline #4

Description

@whaleen

Epic: AI actions — provider-agnostic capabilities on the first-class action pipeline

Rewritten from the old "Flux image-actions UI scaffold" plan. That plan was 90% UI and assumed ModelsLab/Flux specifics. The real work is architectural: make AI editing a first-class, provider-agnostic part of the existing action system.

Vision

tiles already edits images and videos and composes them into tiles. The goal is to add AI-powered editing workflows as ordinary actionsprovider-agnostically. ModelsLab/Flux is just the first implementation; the same actions must adapt to Replicate, Fal, etc.

Principles (decided)

  1. Actions are generic capabilities (verbs); providers/models are configuration. image-edit, image-upscale, image-animate — never flux-*.
  2. First-class lifecycle. AI runs as tiles-cli subcommands emitting TILES_PROGRESS → progress, batch, output-modes, Outputs page for free. (Flux's mistake: a Tauri reqwest command on a parallel path.)
  3. One active provider at a time, chosen in Settings. Actions gate on media type AND active-provider capability support — reusing existing media-type gating.
  4. Design for many, implement one. Build the capability/provider abstraction + per-provider credential map now; only declare/implement ModelsLab.
  5. Descriptor is the single source of truth. Provider/capability/model descriptors live in Rust, exposed via a Tauri command (like list_actions). Settings, gating, forms, and payload preview all render from it.
  6. Hybrid forms. Generic core hand-coded; provider-specific advanced + payload preview descriptor-driven.
  7. Full media matrix eventually: image→image, image→video (on-brand), text→image, video→video, text→video — incrementally.

Sequencing — scaffold first, no API keys required

No accounts yet, so the only deferred piece is the live HTTP call. Everything else is built against a dry-run backend that validates inputs and emits the exact payload it would send. The app becomes fully clickable end-to-end before any key exists; the day a key arrives, only one inner function changes.

#5 (A) contract + dry-run backend   →  #6 (B) registry + gating + kill parallel path
        ↘ #8 (D) hybrid forms + payload preview (alongside B)
                                    →  #7 (C) matrix capabilities, incrementally
                                    →  [deferred] live API call once a key exists

Taxonomy

Capability (generic, user-facing)  →  Provider (active, in Settings)  →  Model
  image-edit / image-upscale            ModelsLab / Replicate / Fal       Flux / SDXL / …
  image-animate (image→video)           Replicate / Fal / …               Kling / SVD / …

Sub-issues

Status of existing code

The current flux-img2img (image_actions.rs + flux-img2img-form.tsx + single modelslab_api_key) is an unverified spike on the wrong path. Superseded: rewritten onto the CLI/dry-run path in A/B; single key → credential map. See #3 (closed) for history.

Out of scope

Frontend test coverage is tracked separately in #2 (Vitest), unaffected by this epic.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions