mirror of
https://github.com/storytold/effectcraft.git
synced 2026-11-07 02:51:24 +00:00
Add After Effects project import with bounded parsing, explicit loss reports, and regression coverage. Fetch the cleaned external test corpus at commit 97262276f625afdeeb61787e4cbb74b3f17af510 and verify each fixture against the pinned SHA-256 manifest.
258 lines
12 KiB
TOML
258 lines
12 KiB
TOML
[workspace]
|
|
resolver = "3"
|
|
members = ["crates/*", "apps/*", "xtask"]
|
|
default-members = ["crates/*", "apps/*"]
|
|
|
|
[workspace.package]
|
|
version = "0.21.0"
|
|
edition = "2024"
|
|
license = "MIT OR Apache-2.0"
|
|
rust-version = "1.95"
|
|
repository = "https://github.com/storytold/effectcraft"
|
|
|
|
[workspace.dependencies]
|
|
craft-pdf = { git = "https://github.com/storytold/craft-libs", rev = "92d392cff132eaf53e13afff77f38b5c11b73aa0", version = "=0.1.0", default-features = false, features = ["read"] }
|
|
craft-docpath = { version = "0.1.0", git = "https://github.com/storytold/craft-libs", rev = "92d392cff132eaf53e13afff77f38b5c11b73aa0" }
|
|
craft-quit = { version = "0.1.0", git = "https://github.com/storytold/craft-libs", rev = "92d392cff132eaf53e13afff77f38b5c11b73aa0" }
|
|
craft-ecproj-format = { version = "0.1.0", git = "https://github.com/storytold/craft-libs", rev = "ca1b5e2edb8568335c6c14f390307bd5beae8238" }
|
|
# craft-update: app-specific pretend versions apply to startup and manual checks.
|
|
craft-update = { git = "https://github.com/storytold/craft-libs", version = "=0.1.0", rev = "c5a1cbfb5f9049f9270955caffb5bee5997aebf7", features = ["egui"] }
|
|
# internal
|
|
effectcraft-time = { path = "crates/time" }
|
|
effectcraft-geom = { path = "crates/geom" }
|
|
effectcraft-color = { path = "crates/color" }
|
|
effectcraft-raster = { path = "crates/raster" }
|
|
effectcraft-path = { path = "crates/path" }
|
|
effectcraft-keyframe = { path = "crates/keyframe" }
|
|
effectcraft-project = { path = "crates/project" }
|
|
effectcraft-text = { path = "crates/text" }
|
|
effectcraft-effects = { path = "crates/effects" }
|
|
effectcraft-track = { path = "crates/track" }
|
|
effectcraft-segment = { path = "crates/segment" }
|
|
effectcraft-sam2 = { path = "crates/sam2" }
|
|
effectcraft-model = { path = "crates/model" }
|
|
effectcraft-render = { path = "crates/render" }
|
|
effectcraft-gpu = { path = "crates/gpu" }
|
|
effectcraft-media = { path = "crates/media" }
|
|
effectcraft-export = { path = "crates/export" }
|
|
effectcraft-expr = { path = "crates/expr" }
|
|
effectcraft-lottie = { path = "crates/lottie" }
|
|
effectcraft-interchange = { path = "crates/interchange" }
|
|
effectcraft-pdf = { path = "crates/pdf" }
|
|
effectcraft-psd = { path = "crates/psd" }
|
|
effectcraft-aep = { path = "crates/aep" }
|
|
effectcraft-vp9enc = { path = "crates/vp9enc" }
|
|
effectcraft-svg = { path = "crates/svg" }
|
|
effectcraft-engine = { path = "crates/engine" }
|
|
effectcraft-host = { path = "crates/host" }
|
|
effectcraft-ui-egui = { path = "crates/ui-egui" }
|
|
effectcraft-automation = { path = "crates/automation" }
|
|
effectcraft-opusenc = { path = "crates/opusenc" }
|
|
effectcraft-script = { path = "crates/script" }
|
|
effectcraft-hevcenc = { path = "crates/hevcenc" }
|
|
effectcraft-av1enc = { path = "crates/av1enc" }
|
|
effectcraft-plugin = { path = "crates/plugin" }
|
|
|
|
# foundation
|
|
thiserror = "2"
|
|
serde = { version = "1", features = ["derive", "rc"] }
|
|
serde_json = { version = "1", features = ["float_roundtrip"] }
|
|
log = "0.4"
|
|
# All date/time conversion goes through chrono (no hand-rolled calendar code beyond the 400-year range extension; AGENTS.md).
|
|
chrono = { version = "0.4.45", default-features = false, features = ["std"] }
|
|
rayon = "1"
|
|
# std::time::Instant/SystemTime on native; the browser clock on wasm32 (std's panic there).
|
|
web-time = "1"
|
|
gif = "0.14"
|
|
proptest = "1"
|
|
|
|
# scripting (expressions)
|
|
boa_engine = { version = "0.22", default-features = false }
|
|
# WebAssembly effect plug-ins (sandboxed interpreter; MIT/Apache-2.0, pure Rust)
|
|
wasmi = { version = "2", default-features = false, features = ["std", "validate", "wat", "deterministic", "portable-dispatch"] }
|
|
|
|
# geometry / fonts
|
|
kurbo = { version = "0.13", features = ["serde"] }
|
|
tiny-skia = { version = "0.12", default-features = false, features = ["std", "simd"] }
|
|
skrifa = { version = "0.44", default-features = false, features = ["std"] }
|
|
harfrust = { version = "0.12", default-features = false, features = ["std"] }
|
|
exr = "1.74"
|
|
image = { version = "0.25", default-features = false, features = ["png", "jpeg"] }
|
|
same-file = "1.0"
|
|
tempfile = "3.27"
|
|
|
|
# media codecs + containers: FilmCraft's pure-Rust crates, pinned to a revision (plan/adr/0001).
|
|
# Only `crates/media`, `crates/export` and `crates/interchange` may depend on these.
|
|
filmcraft-codecs = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
filmcraft-media = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
filmcraft-frame = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
filmcraft-color = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
filmcraft-time = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
# encoders + muxer (crates/export)
|
|
filmcraft-h264enc = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
filmcraft-prores = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
filmcraft-aac = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
filmcraft-isobmff = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
# container headers read for AAC channel layouts (crates/media)
|
|
filmcraft-matroska = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
filmcraft-mpegts = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
# decoder used as the round-trip oracle of effectcraft-opusenc (crates/export dev-dependency)
|
|
filmcraft-opus = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
filmcraft-vp9 = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
# decoders used as the round-trip oracles of effectcraft-hevcenc / effectcraft-av1enc (dev-dependencies only)
|
|
filmcraft-hevc = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
filmcraft-av1 = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
# timeline interchange (EDL, FCP7 XML, FCPXML, OTIO) for Premiere Pro interop (crates/interchange only)
|
|
filmcraft-interchange = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
filmcraft-project = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
filmcraft-geom = { git = "https://github.com/storytold/filmcraft", rev = "09aaf9bf15d510eda1c413c0ccabb1d7e08b41c5" }
|
|
|
|
# gpu (the same wgpu eframe / egui-wgpu use)
|
|
wgpu = { version = "30.0.1", features = ["fragile-send-sync-non-atomic-wasm"] }
|
|
bytemuck = "1"
|
|
pollster = "1"
|
|
|
|
# ui
|
|
# Shared frontend components; keep this dependency above the engine boundary.
|
|
# Shared UI and the complete egui family select reviewed immutable commits below.
|
|
craft-ui = { version = "0.1.0", git = "https://github.com/storytold/craft-libs", rev = "92d392cff132eaf53e13afff77f38b5c11b73aa0", features = ["serde"] }
|
|
# `default_fonts` and `monochrome_emoji_fonts` are explicit: the app's `FontDefinitions::default()`
|
|
# and its `✔`/`▣` chrome glyphs need both, and kittest's own dev-dependencies do not propagate.
|
|
egui = { version = "0.37", default-features = false, features = ["default_fonts", "monochrome_emoji_fonts"] }
|
|
eframe = { version = "0.37", default-features = false }
|
|
egui_kittest = "0.37"
|
|
rfd = "0.17"
|
|
cpal = "0.16"
|
|
# The operating system's interface language (MIT/Apache-2.0, no dependencies on desktop).
|
|
sys-locale = "0.3"
|
|
|
|
# Local co-development against a FilmCraft checkout next to this repo: uncomment.
|
|
# [patch."https://github.com/storytold/filmcraft"]
|
|
# filmcraft-codecs = { path = "../filmcraft/crates/codecs" }
|
|
# filmcraft-media = { path = "../filmcraft/crates/media" }
|
|
# filmcraft-frame = { path = "../filmcraft/crates/frame" }
|
|
# filmcraft-color = { path = "../filmcraft/crates/color" }
|
|
# filmcraft-time = { path = "../filmcraft/crates/time" }
|
|
# filmcraft-h264enc = { path = "../filmcraft/crates/h264enc" }
|
|
# filmcraft-prores = { path = "../filmcraft/crates/prores" }
|
|
# filmcraft-aac = { path = "../filmcraft/crates/aac" }
|
|
# filmcraft-isobmff = { path = "../filmcraft/crates/isobmff" }
|
|
# filmcraft-matroska = { path = "../filmcraft/crates/matroska" }
|
|
# filmcraft-mpegts = { path = "../filmcraft/crates/mpegts" }
|
|
|
|
[workspace.lints.rust]
|
|
unsafe_code = "forbid"
|
|
|
|
[workspace.lints.clippy]
|
|
cognitive_complexity = "deny"
|
|
too_many_arguments = "deny"
|
|
wildcard_imports = "deny"
|
|
dbg_macro = "warn"
|
|
todo = "warn"
|
|
needless_range_loop = "allow"
|
|
type_complexity = "allow"
|
|
|
|
[profile.dev.package."*"]
|
|
opt-level = 2
|
|
debug = false
|
|
|
|
[profile.dev]
|
|
opt-level = 1
|
|
# Panics and backtraces keep file and line; full debug info only made the many test binaries large.
|
|
debug = "line-tables-only"
|
|
|
|
# Same settings as `dev`, but with full debug info for interactive debugger sessions: local
|
|
# variables, parameters and column breakpoints work. Use `--profile dev-full` when debugging;
|
|
# everything else stays on the fast default. See CONTRIBUTING.md, "Setup".
|
|
[profile.dev-full]
|
|
inherits = "dev"
|
|
debug = true
|
|
|
|
# Pixel hot loops: keep debug builds interactive.
|
|
[profile.dev.package.effectcraft-raster]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.effectcraft-render]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.effectcraft-gpu]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.effectcraft-effects]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.effectcraft-track]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.effectcraft-path]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.effectcraft-media]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.effectcraft-opusenc]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.effectcraft-export]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.effectcraft-vp9enc]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.effectcraft-hevcenc]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.effectcraft-av1enc]
|
|
opt-level = 3
|
|
|
|
# FilmCraft codec hot loops (same settings as FilmCraft's own workspace).
|
|
[profile.dev.package.filmcraft-h264]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-h264enc]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-hevc]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-vp9]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-prores]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-dnx]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-av1]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-aac]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-opus]
|
|
opt-level = 3
|
|
|
|
[profile.release]
|
|
lto = "thin"
|
|
codegen-units = 1
|
|
|
|
[patch.crates-io]
|
|
hayro-syntax = { git = "https://github.com/storytold/craft-libs", rev = "92d392cff132eaf53e13afff77f38b5c11b73aa0", version = "=0.7.2" }
|
|
hayro-jbig2 = { git = "https://github.com/storytold/craft-libs", rev = "92d392cff132eaf53e13afff77f38b5c11b73aa0", version = "=0.3.0" }
|
|
ecolor = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
emath = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
epaint = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
epaint_default_fonts = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui-winit = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui-wgpu = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui_glow = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui_extras = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui_kittest = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui_system_font_provider = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
eframe = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui_demo_lib = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui_inspection = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
winit = { git = "https://github.com/storytold/winit.git", rev = "a517b3846ee8457d84ee4975110bfda6797c44dc" }
|