mirror of
https://github.com/bybrooklyn/alchemist.git
synced 2026-04-18 01:43:34 -04:00
Since v0.2.9, Alchemist gains the first stable 0.3.0 release with: Security: - Fixed a critical bug where a config parse failure on a configured instance could re-enable unauthenticated setup endpoints. - Session cookies are no longer marked Secure by default, restoring plain HTTP and LAN login flows unless ALCHEMIST_COOKIE_SECURE=true is set. - Restricted /api/fs/* filesystem browsing to loopback clients during initial setup. - Hardened proxy header handling with explicit trust configuration. Library and encoding: - Added per-library transcoding profiles with built-in presets. - Added lossless MP4/MOV to MKV remuxing when a file is already in the target codec. - Added subtitle sidecar extraction for text subtitle tracks. - Added stream rules for commentary stripping, language filtering, and default-track retention. - Added optional VMAF quality gating. - Added duplicate detection in Library Intelligence. - Added Library Doctor health scanning. - Added mirrored output roots. Job management: - Added Skipped and Archived tabs. - Added sort controls for jobs. - Added per-job priority promotion. - Added live retry countdowns. - Added structured skip explanations. - Added structured failure explanations. Engine control: - Added Background, Balanced, and Throughput runtime modes with manual overrides. - Added drain mode. - Added boot-time auto-analysis of queued jobs. UI redesign: - Replaced page h1 blocks with a compact engine control strip. - Restructured the dashboard around compact stats, savings, and recent activity. - Grouped log viewer entries by job. - Rebuilt the setup wizard inside the main shell. - Redesigned library selection around recommendations and chips. - Replaced custom stats bars with Recharts area and bar charts. - Merged hardware into Transcoding settings. - Merged notifications and automation into one tab. - Improved mobile navigation and jobs layout. - Tightened typography and token usage across the design system. - Added analyzing shimmer states and protected terminal job states from poll overwrites. Reliability and stability: - Added exponential retry backoff. - Cleaned orphaned temp outputs and subtitle sidecar temp files on startup. - Fixed infinite analysis loops and boot-analysis pagination. - Kept the engine running when the queue drains so new watcher jobs are picked up. - Serialized analysis passes and dropped overlapping watcher-triggered passes. - Added job stall detection. - Fixed graceful shutdown on Ctrl+C and SIGTERM. - Added log retention pruning. - Added auth session cleanup. - Cached /api/system/resources for 500ms. - Added a Drop guard for in_flight_jobs. - Stopped re-probing completed job detail source files when encode_stats already exist. Hardware and encoding: - Fixed Apple VideoToolbox encodes with -allow_sw 1, yuv420p conversion, and hvc1 tagging. - Switched Intel Arc selection to VAAPI-first with QSV as last resort. - Improved audio planning so lossless codecs transcode while common Atmos/EAC3 tracks can copy. - Added libopus runtime fallback to AAC when libopus is unavailable. - Surfaced fuller FFmpeg failure logs and VideoToolbox-specific failure explanations. Backend architecture: - Upgraded to Rust 2024 and MSRV 1.85. - Upgraded sqlx to 0.8 and rand to 0.9. - Removed async-trait in favor of native async fn traits with trait-variant where needed. - Split server.rs into focused submodules. - Moved ffprobe execution to tokio::process::Command with a timeout. - Split high-volume and low-volume broadcast channels. - Hardened cancellation-lock recovery and stderr truncation. - Added warnings for invalid notification and schedule JSON plus safer analysis pagination limits. Database: - Extended decisions with structured reason codes and payload JSON. - Added job_failure_explanations with legacy fallback support. - Added indexes for structured explanation filtering. - Preserved automatic upgrades from 0.2.5 onward. CI/CD and tooling: - Added nightly workflows using the shared build pipeline. - Added actionlint to release checks. - Added the Playwright reliability suite to CI. - Documented and validated the Windows contributor workflow. - Expanded just release-check to cover fmt, clippy, tests, actionlint, web verify, docs build, E2E, and backend build. - Standardized release binaries and checksums. - Published multi-arch Docker images for linux/amd64 and linux/arm64. Release metadata and docs cleanup: - Bumped Cargo, VERSION, web, web-e2e, and docs manifests to 0.3.0. - Updated stable changelog dates and nightly image references. - Removed stale RC-era Windows wording from the README and docs. - Clarified that the Windows core contributor path is supported while broader utility and release recipes remain Unix-first. - Clarified that AMD AV1 remains outside the validated 0.3.0 support matrix. - Aligned Docker Compose, Helm, and release-facing docs on ghcr.io/bybrooklyn/alchemist.
12 KiB
12 KiB
Changelog
All notable changes to this project will be documented in this file.
[0.3.0] - 2026-04-06
Security
- Fixed a critical bug where a config parse failure on a configured instance would re-enable unauthenticated setup endpoints (filesystem browse, settings bundle) for any network client.
- Session cookies are no longer marked
Secureby default, which was breaking login over plain HTTP/LAN. Opt in withALCHEMIST_COOKIE_SECURE=truefor reverse-proxy deployments. /api/fs/*filesystem browsing is now restricted to loopback connections only during the initial setup flow.- Proxy header handling hardened with explicit trust configuration for reverse-proxy deployments.
New Features
Library & Encoding
- Per-library profiles — each watch folder gets its own transcoding profile. Four built-in presets (Space Saver, Quality First, Balanced, Streaming) are ready to use or customize.
- Container remuxing — files already in the target codec but wrapped in MP4/MOV are remuxed to MKV losslessly, skipping a full re-encode.
- Subtitle sidecar extraction — text-based subtitle tracks (SRT, ASS, VTT) can be extracted as separate files alongside the output rather than muxed in.
- Stream rules — strip audio tracks by title keyword (e.g. commentary tracks), filter by language code, or keep only the default audio track.
- VMAF quality gating — encodes scoring below a configurable threshold are rejected and the source is preserved.
- Library Intelligence — duplicate detection surfaces files with matching stems across the library.
- Library Doctor — health scanning detects corrupt or broken files directly from System Settings.
- Mirrored output root — write transcoded files to a separate directory tree that mirrors the source structure, rather than alongside the source.
Job Management
- Skipped tab — dedicated tab for skipped jobs with structured skip reasons.
- Archived tab — cleared completed jobs are preserved in an Archived tab rather than disappearing permanently.
- Sort controls — sort the job list by last updated, date added, file name, or file size.
- Per-job priority — promote individual jobs up the queue from the job detail panel.
- Retry countdown — failed jobs waiting to retry show "Retrying in 47m", updated live every 30 seconds.
- Structured skip and failure explanations — skip reasons and failure summaries are stored as structured payloads with a code, plain-English summary, measured values, and operator guidance; surfaced in the job detail panel before the raw FFmpeg log.
Engine Control
- Engine runtime modes — Background (1 job), Balanced (half CPU count, capped at 4), and Throughput (half CPU count, uncapped). Manual concurrency and thread overrides available in the Advanced panel.
- Drain mode — stop accepting new jobs while letting active encodes finish cleanly.
- Boot auto-analysis — ffprobe runs on all queued jobs at startup so skip/transcode decisions are pre-computed before the engine starts.
UI Redesign
- Removed page
h1headers; replaced the old header block with a thin engine control strip showing the status dot, Start/Pause/Stop, mode pills, About, and Logout in one row. - Dashboard restructured around a compact stat row, savings summary card, and a larger Recent Activity panel.
- Log viewer groups entries by job into collapsible sections; system-level log lines render inline between groups.
- Setup wizard rebuilt inside the main app shell with a grayed sidebar, 2px solar progress line, and a welcome step (logo + tagline + Get Started) before the admin account form.
- Library selection redesigned around a flat recommendation list with Add buttons, selected-folder chips, and a Browse/manual path option; the old preview panel was removed.
- Statistics page uses recharts
AreaChartfor savings over time andBarChartfor codec breakdown, replacing custom CSS bars. - Hardware settings merged into the Transcoding tab. Notifications and Automation merged into one tab.
- Mobile layout: hamburger sidebar overlay, jobs table collapses date/priority columns below
mdbreakpoint, stat cards use a 2×2 grid on small screens. - Font updated from Space Grotesk to DM Sans; sidebar active state uses a left accent bar; border radius scale tightened throughout.
- Design system token compliance pass across all settings components: toggle switches, form labels, and text-on-color elements now use helios tokens exclusively.
- Analyzing job rows show an indeterminate shimmer instead of a static 0.0% label.
- Poll-based job state updates no longer overwrite terminal states that arrived via SSE.
Reliability & Stability
- Exponential retry backoff for failed jobs: 5 / 15 / 60 / 360 minute delays by attempt count.
- Orphaned temp file cleanup on startup: interrupted encodes and subtitle sidecar temp files no longer accumulate on disk.
- Fixed infinite analysis loop: jobs with an existing decision row are excluded from analysis batches, preventing transcodable jobs from being re-analyzed on every pass.
- Boot analysis processes jobs in batches of 100 from offset 0, fixing a pagination bug where transcodable jobs shifted out of later pages after earlier jobs were decided.
- Engine no longer auto-pauses when the queue empties; it stays Running and picks up new files as the watcher delivers them.
- Analysis semaphore serializes all analysis passes; watcher-triggered passes are dropped (not queued) when a pass is already running.
- Job stall detection added to surface encodes that stop making progress.
- Ctrl+C / SIGTERM exits cleanly after graceful shutdown. Background tasks no longer prevent process exit.
- Log table pruning: configurable retention period (default 30 days) prevents unbounded log growth.
- Auth session cleanup: expired sessions pruned on startup and every 24 hours.
- Resource endpoint caching:
/api/system/resourcescached 500ms to prevent redundant OS probes from multiple open tabs. Dropguard added toin_flight_jobscounter so it decrements correctly even on panic.- Completed job detail no longer re-runs ffprobe on the source file;
encode_statsis the authoritative source for post-encode metadata.
Hardware & Encoding
- Apple VideoToolbox — encode commands now include
-allow_sw 1(software fallback) andformat=yuv420p(required pixel format), fixing all VideoToolbox encodes on macOS. HEVC output tagged ashvc1for Apple device compatibility. - Intel Arc — VAAPI-first detection with
i915/xedriver; QSV retained as last-resort fallback only. - Audio planning — lossless codecs (TrueHD, MLP, DTS-HD, FLAC, PCM) trigger transcoding; standard Atmos/EAC3 at any bitrate now copies through without re-encoding.
- libopus fallback — audio transcoding for MKV now checks for
libopusavailability at runtime and falls back to AAC when it is absent (common on macOS FFmpeg builds). - FFmpeg encode failures write the full error (last 20 lines of stderr) to the job log; failure explanations in the UI include VideoToolbox-specific patterns (
vt_compression,mediaserverd,no capable devices).
Backend Architecture
- Upgraded from Rust 2021 to Rust 2024 edition, MSRV set to 1.85.
sqlxupgraded to 0.8 withruntime-tokio-rustls;randupgraded to 0.9.- Removed
async-trait; all traits use nativeasync fn.trait-variantadded for object-safeArc<dyn ExecutionObserver>. server.rssplit into focused submodules:auth,jobs,scan,settings,stats,system,sse,middleware,wizard.ffprobeexecution moved totokio::process::Commandwith a 120-second timeout.- Typed broadcast channels separate high-volume events (progress, logs) from low-volume system events (config, status).
- Poisoned cancellation lock recovery added to the orchestrator; oversized FFmpeg stderr lines truncated before logging.
- Invalid notification event JSON and invalid schedule day JSON now log a warning rather than silently disabling the target or treating it as empty.
- Database connection pool capped; OOM protection added to analysis batch queries via
LIMIT/OFFSETpagination.
Database
decisionstable extended withreason_codeandreason_payload_jsonfor structured skip reason storage.job_failure_explanationstable added for structured failure explanations, withlegacy_summaryfallback for pre-0.3 rows.- Index on
decisions(reason_code)andjob_failure_explanations(code)for fast filtering. - All databases from v0.2.5 onwards upgrade automatically; no manual migration required.
CI/CD & Tooling
- Nightly workflow: runs on every push to
mainafter checks pass, builds all platforms, publishesghcr.io/bybrooklyn/alchemist:nightlywith{VERSION}-nightly+{short-sha}versioning. - Shared reusable
build.ymlworkflow so nightly and release builds use identical pipelines. actionlintadded tojust release-check.- E2E reliability suite (
just test-e2e) runs in CI after the frontend check passes. - Windows contributor workflow documented and validated:
just install-w,just dev,just check. just release-checkcovers fmt, clippy (-D warnings -D clippy::unwrap_used -D clippy::expect_used), tests, actionlint, web verify, docs build, E2E, and backend build in sequence.- Release binaries ship as
.tar.gz(Linux/macOS) and.exe(Windows), each with a SHA256 checksum. Multi-arch Docker images published forlinux/amd64andlinux/arm64.
[v0.2.9] - 2026-03-06
- Runtime reliability pass: watcher/scanner hardening, resilient event consumers, config reload improvements, and live hardware refresh.
- Admin UX refresh across dashboard, settings, setup, logs, jobs, charts, and system status with stronger error handling and feedback.
- Frontend workflow standardized on Bun, Playwright reliability coverage added under
web-e2e, and deploy/docs/container updates shipped together.
[v0.2.8] - 2026-01-12
- Setup wizard auth fixes, scheduler time validation, and watcher reliability improvements.
- DB stability pass (WAL, FK enforcement, indexes, session cleanup, legacy watch_dirs compatibility).
- Build pipeline updates (rustls for reqwest, cross-platform build script, WiX workflow fix).
- Documentation and design philosophy updates.
- More themes!!
[v0.2.5] - 2026-01-11
Fixes
- Dashboard Crash: Fixed a critical bug where the dashboard would render as a blank screen if GPU utilization was
null. Added strict null checks beforetoFixed()calls inResourceMonitor.tsx. - Animation Glitch: Resolved an issue where the "Engine Status" button would fly in from the top-left corner on page navigation. Implemented unique
layoutIdgeneration usinguseId()to maintain the morph animation while preventing cross-page artifacts. - Migration Checksum: Fixed a startup error caused by a modified migration file. Reverted the original migration to restore checksum integrity and created a new migration for the version bump.
Improvements
- Resource Monitor Layout: Repositioned the GPU Usage section to appear between "Active Jobs" and "Uptime" for better logical flow.
- Animation Timing: Adjusted staggered animation delays in the Resource Monitor to match the new layout order.
Documentation
- Codebase Overview: Added
codebase_overview.mdexplaining the monolith architecture (Rust + API + Frontend) and directory structure. - Migration Policy: Updated
MIGRATIONS.mdto explicitly forbid modifying existing migration files to prevent checksum errors. - Walkthrough: Updated
walkthrough.mdwith detailed debugging logs and verification steps for all recent changes.
Infrastructure
- Version Bump: Updated project version to
0.2.5inCargo.toml,web/package.json, andVERSION. - Database: Established
0.2.5as the new minimum compatible version schema baseline.