Swipe left = A, right = B via a node-testable cmpSwipeSide(); pane taps go
through cmpPaneTap so a swipe never also casts a tap vote. Videos get
muted/playsinline set before the source loads and play() only after insertion,
with a tap-to-play fallback. Docs: README + ProjectStructure.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header buttons (standalone only): share via navigator.share, else clipboard on
secure contexts, else execCommand with the result checked, else a prompt.
The picker button opens the settings panel at the session list; phone CSS gives
the rows touch-sized targets. A background websocket resync no longer closes
the settings panel the user has open.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Preview on top, form below, six-button action bar (Prev, Favorite, Reject,
Compare, Revise, Next) as icon+label spans. Desktop and the fine-pointer node
iframe are untouched. Favorite state is synced via _syncModalFavBtn (also on
open). e2e: new tests/e2e/test_phone_dashboard.py + phone_dashboard fixture.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
CSS error recovery merged the stray ======= line with the following selector,
so .cmp-setting-row was lost in every browser. A lint test guards resources/.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Quick Filter / Logic Filter (wf:<key>) / label overlay use item.wf_params. Sweep items get a
JOB button opening a read-only Workflow job panel with download/copy of the job's API prompt.
Standalone progress bar shows paused/cancelled.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Metric sorts (primary + secondary, missing last), Logic Filter Metrics group
with a min/max range row, Metrics label checkbox. Everything degrades to
nothing on sessions without metrics.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
PREVIEW badge on cards and a modal note, a Pass filter row (hidden until previews exist),
previews superseded by a full image (config_fp/base_fp match) hidden by default, a preview bar
with 'Full pass for survivors (N)'. The button asks web/dashboard.js (postMessage) to switch
Preview pass off in the matching Config Builder and call app.queuePrompt; a marked stub
covers a future run API; fallback is an instructions toast.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Touch-sized card/lightbox/header buttons under a coarse-pointer media query,
a sticky Prev/Favorite/Reject/Revise/Next bar in the lightbox, and a 2-column
session landing on the standalone page at phone width (all scoped so the node
iframe is unchanged). README documents the standalone dashboard and the run
API with curl examples; ProjectStructure lists the routes and new files.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The CSS rules and variables (--accent-steps/cfg/upscale/media) were already
added in 2c3851e; user reporting the bug was viewing a stale inlined dashboard
HTML generated before that commit. Since html_generator.py inlines report.css
at generation time, regeneration is required for CSS edits to take effect.
Added belt-and-suspenders box-shadow: inset to the four filter types so that
even if a theme override or cached page interferes with background, the inset
ring remains visible. Added a code comment documenting the regeneration
requirement.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds video file support throughout the Dashboard with zero new Python
dependencies — browsers handle all playback, metadata, and thumbnails
natively via HTML5 <video> elements.
directory_scanner.py:
- Add VIDEO_EXTENSIONS (.mp4, .webm, .mov, .m4v) to scan list
- _process_single_image() detects videos by extension and creates a
video manifest item with media_type="video"
- Videos get default 1280x720 dimensions; browser updates on loadedmetadata
- Image items now tagged with media_type="image" for symmetry
Dashboard (logic_ui.js createCard):
- Renders <video preload="none" muted loop playsinline> for video items
- Hides REVISE and upscale buttons for videos (don't apply)
- Shows "▶ VIDEO" badge in top-left corner
- Hover-play: videos play on mouseenter, pause+reset on mouseleave
- Click: requests native browser fullscreen with controls
- loadedmetadata handler updates card aspect ratio from videoWidth/videoHeight
Dashboard (logic_virtual.js):
- Lazy loader extended to swap data-src → src for <video> elements
CSS (report.css):
- .video-badge styling (purple pill, top-left)
- .card video positioning (absolute, cover-fit)
Works with any codec the browser supports (H.264, VP9, AV1, H.265).
Existing features unchanged: favorites, rejects, sorting, filtering,
DOM card pool, merge sessions, quick favorite hotkeys all work on videos.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The ⬆ button now shows on touch devices (pointer: coarse) with
0.7 opacity, same as the other card action buttons.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Purple button positioned between favorite star and revise button on
the right side. Appears on hover, calls openUpscaleModal(imageId).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Slider in Label Mode settings (6-16px range) controls overlay text size.
Uses CSS custom property for instant updates. Persisted to localStorage.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace flat upscale configs with pipeline/steps/repeat architecture:
- Pipelines run independently from base image
- Steps chain sequentially within a pipeline
- Steps support repeat count for iterative refinement
Add "Save Pre-Upscaled Output" option to also keep the base image.
Add "Adjust Prompt During HiRes Fix" with prepend/append/replace
behaviors. HiRes-adjusted prompts are batch pre-encoded for efficiency.
Results written to manifest metadata and exposed as label overlays.
Fix fmtVal scoping error in buildLabelOverlay (was referenced outside
the upscale block where it was defined).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds color-coded metadata labels (model, lora, prompt, sampler,
scheduler, cfg, steps, seed, denoise) as image overlays in the
dashboard grid. Settings panel with per-field toggles and unique-only
mode that hides values shared by every card. Per-lora filtering skips
global loras while showing unique ones. Persisted via localStorage,
backwards compatible with older sessions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>