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.
53 lines
1.3 KiB
TOML
53 lines
1.3 KiB
TOML
[package]
|
|
name = "alchemist"
|
|
version = "0.3.0"
|
|
edition = "2024"
|
|
rust-version = "1.85"
|
|
license = "GPL-3.0"
|
|
build = "build.rs"
|
|
|
|
[features]
|
|
default = ["embed-web"]
|
|
embed-web = []
|
|
|
|
[lib]
|
|
name = "alchemist"
|
|
|
|
[[bin]]
|
|
name = "alchemist"
|
|
path = "src/main.rs"
|
|
|
|
[dependencies]
|
|
tokio = { version = "1", features = ["full"] }
|
|
clap = { version = "4.4", features = ["derive"] }
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
|
walkdir = "2"
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = "1.0"
|
|
anyhow = "1.0"
|
|
sqlx = { version = "0.8", features = ["runtime-tokio-rustls", "sqlite", "macros", "chrono", "migrate"] }
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
num_cpus = "1.16"
|
|
inquire = { version = "0.7" }
|
|
futures = { version = "0.3" }
|
|
toml = "0.8"
|
|
axum = { version = "0.7", features = ["macros"] }
|
|
rayon = "1.10"
|
|
tokio-stream = { version = "0.1", features = ["sync"] }
|
|
thiserror = "2.0.17"
|
|
notify = { version = "6" }
|
|
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] }
|
|
rust-embed = { version = "8", features = ["axum"] }
|
|
mime_guess = "2.0"
|
|
argon2 = "0.5.3"
|
|
rand = "0.9"
|
|
sysinfo = "0.32"
|
|
uuid = { version = "1", features = ["v4"] }
|
|
sha2 = "0.10"
|
|
trait-variant = "0.1.2"
|
|
|
|
[dev-dependencies]
|
|
http-body-util = "0.1"
|
|
tower = { version = "0.5", features = ["util"] }
|