Review
The one-card-at-a-time triage deck — keep, favorite, or archive generated videos and freshly ingested clips.
/review is a triage deck: one card at a time, autoplaying, with three buttons under it. You decide Keep, Favorite, or Archive and the next card comes up. It exists so a night's worth of output can be sorted in one sitting without opening anything.
It is not a publishing screen. Publishing to CivitAI happens from Jobs — there is no publish button here.
Despite the internal name, there is no swipe gesture. Everything is buttons and arrow keys.
What "reviewed" means in the database, the limits of undo, and the deck's paging are in docs/architecture/swipe-review.md.
Choosing a deck
The dropdown at the top left picks what you are reviewing. It opens on Generated jobs:
- Generated jobs — jobs with status
completed. Already-published jobs are excluded from both the deck and the progress count, because they were reviewed on the way to being published. - Recently captioned — media that just got a caption. Use it to catch a caption that came out wrong before it turns into a generation.
- Recently ingested — raw media as it lands, for culling before anything is spent on it.
Switching decks resets that session's undo history and refetches a fresh progress baseline, so a deck you already worked on this session shows the right count when you come back to it.
Actions
Three buttons, fixed to the bottom of the viewport so the targets never move when a card's aspect ratio changes. Left to right on screen they run ✕ Archive, ★ Favorite, ✓ Keep — destructive on the left, matching the arrow keys:
| Button | Key | What it writes |
|---|---|---|
| ✕ Archive | ← |
Marks it reviewed and archived. It leaves the galleries and every other deck. |
| ★ Favorite | ↑ |
Marks it reviewed, favorited, and timestamped. It shows up under /favorites and behind the Favorites filters elsewhere. |
| ✓ Keep | → |
Marks it reviewed and kept. Nothing else changes. |
All three mark the item reviewed, which is what takes it out of this deck permanently. There is no "skip" — every card you advance past is a decision.
Two more controls in the header:
- Undo — single-step only. It restores the last card to the deck by clearing its review fields. The accepted cost: undo also clears
isFavorited, so undoing on an item that was already favorited before you swiped it loses that flag too. - Trim — opens the trim modal on the current top card without reviewing it. Saving re-renders the card with the new trimmed video and leaves it in the deck; the deck knows whether it is a job or a media item and writes to the right one.
Keyboard shortcuts are suppressed while focus is in a text field, a menu, a listbox, or a dialog, and any modifier combination is ignored — so ⌘C over selected caption text copies rather than toggling the caption sheet.
Reading a card
Tap the video to pause and unmute it for a closer listen; tap again to resume the muted loop. Cards autoplay muted and looping otherwise.
A generated-job card whose driving clip is genuinely different from the result renders as an A/B compare: the Reference clip on the left, the Generated result on the right, and the Subject portrait used for the job in a rail beside them. That is the layout that makes it obvious whether a dud came from the reference motion rather than the generation. When the reference and the result resolve to the same URL, the compare collapses to a single video rather than showing you the same clip twice.
On a compare card only the Generated pane responds to a tap. The Reference pane is a plain muted loop with no handler — you cannot pause or unmute the driving clip, only the result.
Show caption (or the c key) opens a sheet with the card's full caption text. Job and recently-captioned cards put their text there rather than on the card. Recently-ingested cards have no caption to show, so they keep their short post title printed on the card instead and the button is disabled.
Under the buttons is a progress bar: how many of this deck's items you have reviewed out of its total. It advances the moment you press a button rather than waiting on a refetch.
Generation details (generated jobs only)
A job card carries the record of what produced it, below the deck. On a desktop-width screen the positive prompt sits beside the card, sharing the row fifty-fifty; the LoRAs & resources list and the run details strip (segment, ComfyUI runtime, and the two dispatched seeds) span the full width underneath. On a phone everything stacks into one column and simply follows the card, so it never competes with the action buttons.
The prompt is tinted by where each run of text came from: pink for the subject/persona record, blue for the Muse caption, and muted grey for the template's own connective words like "Woman. " and "Wearing ". The prompt is assembled from both sources and the dominant template interleaves them — the persona block sits in the middle of several caption blocks, so the colours are not simply a top half and a bottom half. The tinting is purely a re-colouring: the text is exactly what dispatched to ComfyUI, byte for byte.
A small number of jobs (about 1%) cannot have their provenance recovered — their stored prompt and the template it was rendered from no longer line up. Those render as plain untinted text rather than risk colouring a run with the wrong source.
Below the prompt is a Tags box: the tags resolved onto the source clip, each with its confidence, coloured by origin — blue for a tag matched out of the caption text, green for one that came from a subreddit rule. Hovering a chip shows the evidence string that matched. These are not emitted by the captioner; they are derived from its output by the resolver described in the Tags guide. Most clips match nothing, in which case the box says so.
The same breakdown, with the media stages, lives on the job's own Breakdown page — see the Jobs guide.
Running out
Cards load twelve at a time and the next page fetches as soon as fewer than five are left in the deck, so you should never see it stall mid-run. When there is genuinely nothing left you get "All caught up — nothing left to review."
If a write fails, the card comes back into the deck rather than disappearing silently.