aethersafta 0.21.3

Real-time media compositing engine — multi-source capture, scene graph, hardware-accelerated encoding, streaming output
[package]
name = "aethersafta"
version = "0.21.3"
edition = "2024"
rust-version = "1.89"
license = "AGPL-3.0-only"
description = "Real-time media compositing engine — multi-source capture, scene graph, hardware-accelerated encoding, streaming output"
homepage = "https://github.com/MacCracken/aethersafta"
repository = "https://github.com/MacCracken/aethersafta"
readme = "README.md"
keywords = ["compositing", "streaming", "capture", "video", "encoding"]
categories = ["multimedia", "multimedia::video", "multimedia::encoding"]

[features]
default = ["pipewire", "hwaccel"]
full = ["pipewire", "hwaccel", "rtmp", "srt", "openh264-enc", "vaapi"]
# Audio capture and processing via dhvani
pipewire = ["dhvani/pipewire"]
# Hardware-accelerated encoding (NVENC, VA-API, QSV, AMF)
hwaccel = ["dep:ai-hwaccel"]
# H.264 software encoding via openh264
openh264-enc = ["tarang/openh264-enc"]
# H.264 hardware encoding via VA-API (Intel/AMD)
vaapi = ["tarang/vaapi", "hwaccel"]
# Streaming output protocols
rtmp = []
srt = []

[[bin]]
name = "aethersafta"
path = "src/main.rs"

[dependencies]
# Core
serde = { version = "1", features = ["derive"] }
serde_json = "1"
chrono = { version = "0.4", features = ["serde"] }
uuid = { version = "1", features = ["v4", "serde"] }
thiserror = "2"
anyhow = "1"
bytes = "1"

# Async
tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "time", "signal", "sync", "io-util"] }

# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }

# CLI
clap = { version = "4", features = ["derive"] }

# Image loading (PNG, JPEG)
image = { version = "0.25", default-features = false, features = ["png", "jpeg"] }

# Image processing (color conversion, pixel format interchange)
ranga = { version = "0.21.4", default-features = false }

# Media encoding/muxing
tarang = { version = "0.21.3", default-features = false }

# Hardware detection
ai-hwaccel = { version = "0.21.3", optional = true, default-features = false }

# Audio capture, mixing, DSP, metering
dhvani = { version = "0.21.4", default-features = false, features = ["dsp", "graph"] }

[dev-dependencies]
tempfile = "3"
criterion = { version = "0.5", features = ["html_reports"] }
tokio-test = "0.4"

[[bench]]
name = "compose"
harness = false

[[bench]]
name = "encode"
harness = false

[[bench]]
name = "audio"
harness = false

[[bench]]
name = "convert"
harness = false

# Patch cros-libva for libva >= 1.23 compatibility (VP9 struct fields added upstream)
# Remove when cros-libva > 0.0.13 is released
[patch.crates-io]
cros-libva = { path = "patches/cros-libva" }