mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-30 04:57:22 -06:00
Preserve current main, adapt frame/input and IME handling, and keep library check results stable across layout passes. Include the matching Nix font lock and reviewed attribution changes.
193 lines
9.0 KiB
TOML
193 lines
9.0 KiB
TOML
[workspace]
|
|
resolver = "3"
|
|
members = ["crates/*", "apps/*", "xtask"]
|
|
|
|
[workspace.package]
|
|
version = "0.13.0"
|
|
edition = "2024"
|
|
license = "MIT OR Apache-2.0"
|
|
rust-version = "1.95"
|
|
repository = "https://github.com/storytold/lightcraft"
|
|
|
|
[workspace.dependencies]
|
|
craft-ui = { git = "https://github.com/storytold/craft-libs", rev = "25da1314d443171b4adeaad2cd9454b273f35c6f", features = ["serde"] }
|
|
craft-docpath = { version = "0.1.0", git = "https://github.com/storytold/craft-libs", rev = "82a24b006eefa036b43c09a67fb9a3fbd17ffe63" }
|
|
# internal
|
|
lightcraft-denoise-core = { path = "crates/denoise-core" }
|
|
lightcraft-denoise = { path = "crates/denoise", default-features = false }
|
|
lightcraft-geom = { path = "crates/geom" }
|
|
lightcraft-faces = { path = "crates/faces" }
|
|
lightcraft-sysmem = { path = "crates/sysmem" }
|
|
lightcraft-color = { path = "crates/color" }
|
|
lightcraft-raster = { path = "crates/raster" }
|
|
lightcraft-tiff = { path = "crates/tiff" }
|
|
lightcraft-raw = { path = "crates/raw" }
|
|
lightcraft-codecs = { path = "crates/codecs" }
|
|
lightcraft-meta = { path = "crates/meta" }
|
|
lightcraft-develop = { path = "crates/develop" }
|
|
lightcraft-lensdb = { path = "crates/lensdb" }
|
|
lightcraft-inpaint = { path = "crates/inpaint" }
|
|
lightcraft-scenes = { path = "crates/scenes" }
|
|
lightcraft-pipeline = { path = "crates/pipeline" }
|
|
lightcraft-gpu = { path = "crates/gpu" }
|
|
lightcraft-catalog = { path = "crates/catalog" }
|
|
lightcraft-preview = { path = "crates/preview" }
|
|
lightcraft-merge = { path = "crates/merge" }
|
|
lightcraft-engine = { path = "crates/engine" }
|
|
lightcraft-ui-egui = { path = "crates/ui-egui" }
|
|
lightcraft-mcp = { path = "crates/mcp" }
|
|
lightcraft-fetch = { path = "crates/fetch" }
|
|
lightcraft-heif = { path = "crates/heif" }
|
|
lightcraft-segment = { path = "crates/segment" }
|
|
lightcraft-geocode = { path = "crates/geocode" }
|
|
lightcraft-slideshow = { path = "crates/slideshow" }
|
|
lightcraft-testkit = { path = "crates/testkit" }
|
|
|
|
# foundation
|
|
thiserror = "2"
|
|
sha2 = "0.10"
|
|
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"
|
|
proptest = "1"
|
|
bytemuck = { version = "1", features = ["derive"] }
|
|
crc32fast = "1"
|
|
siphasher = "1"
|
|
libc = "0.2" # dev-only: process CPU time in benches
|
|
dhat = "0.3" # opt-in heap profiling (lightcraft-cli --features dhat-heap) and heap tests; never in product builds
|
|
|
|
# formats
|
|
quick-xml = "0.41"
|
|
miniz_oxide = "0.8"
|
|
|
|
# codecs
|
|
image = { version = "0.25", default-features = false, features = ["png", "jpeg", "tiff", "webp"] }
|
|
zune-jpeg = { version = "0.5", default-features = false, features = ["std", "x86", "neon"] }
|
|
zune-core = { version = "0.5", default-features = false, features = ["std"] }
|
|
jpeg-decoder = { version = "0.3", default-features = false }
|
|
jpeg-encoder = { version = "0.7", default-features = false, features = ["std"] }
|
|
ab_glyph = { version = "0.2", default-features = false, features = ["std"] } # Apache-2.0, pure Rust glyph rasterizer (export watermarks)
|
|
png = "0.18"
|
|
tiff = "0.11"
|
|
image-webp = "0.2"
|
|
moxcms = { version = "0.9", default-features = false, features = ["lut"] }
|
|
jxl-oxide = { version = "0.12", default-features = false }
|
|
jixel = "=0.3.4" # BSD-3-Clause OR Apache-2.0, pure-Rust JPEG XL encoder (export; port of libjxl-tiny)
|
|
zune-jpegxl = { version = "0.5", default-features = false, features = ["std"] } # MIT/Apache-2.0/Zlib lossless JXL encoder (test fixtures only)
|
|
ravif = { version = "0.13", default-features = false, features = ["threading"] } # no "asm": it needs nasm (non-Rust)
|
|
# HDR AVIF (PQ): ravif fixes the sRGB transfer curve, so HDR files drive its rav1e + avif-serialize directly
|
|
rav1e = { version = "0.8.1", default-features = false, features = ["threading"] }
|
|
avif-serialize = "0.8.6"
|
|
|
|
# gpu (crates/gpu; native backends only, no GL: everything stays pure Rust)
|
|
# SAM 3 inference (lightcraft-segment). 0.9.2: later releases pull `tokenizers` with the
|
|
# Oniguruma C library into candle-core, and the product is pure Rust.
|
|
candle-core = { version = "=0.9.2", default-features = false }
|
|
candle-nn = { version = "=0.9.2", default-features = false }
|
|
wgpu = { version = "30", default-features = false, features = ["std", "parking_lot", "metal", "vulkan", "dx12", "wgsl"] }
|
|
pollster = "1"
|
|
|
|
# ui
|
|
# 0.37: `default_fonts` is no longer an egui default and the monochrome emoji faces moved behind
|
|
# `monochrome_emoji_fonts`. Every resolution root (native, CLI/headless, kittest, wasm) needs both:
|
|
# kittest's own dev-dependencies do not propagate to its consumers.
|
|
egui = { version = "0.37", default-features = false, features = ["default_fonts", "monochrome_emoji_fonts"] }
|
|
egui_extras = { version = "0.37", default-features = false }
|
|
eframe = { version = "0.37", default-features = false }
|
|
egui_kittest = "0.37"
|
|
rfd = "0.17"
|
|
muda = { version = "0.21", default-features = false } # native menu bar (macOS: objc2/AppKit, pure Rust; no GTK)
|
|
# macOS: the profile of the screen showing the window (safe AppKit bindings; muda and wgpu use the same)
|
|
objc2 = { version = "0.6", default-features = false, features = ["std"] }
|
|
objc2-app-kit = { version = "0.3", default-features = false, features = ["std", "NSApplication", "NSColorSpace", "NSResponder", "NSScreen", "NSWindow"] }
|
|
objc2-foundation = { version = "0.3", default-features = false, features = ["std", "NSArray", "NSData"] }
|
|
# Linux: the desktop's dark/light setting from the XDG settings portal (Settings ▸ Interface ▸
|
|
# Appearance Mode ▸ Auto). Pure Rust; the version accesskit already brings in, pinned to it.
|
|
zbus = "=5.19.0"
|
|
web-time = "1"
|
|
|
|
# web (apps/lightcraft-web)
|
|
wasm-bindgen = "0.2.129"
|
|
wasm-bindgen-futures = "0.4"
|
|
js-sys = "0.3"
|
|
web-sys = "0.3"
|
|
|
|
[workspace.lints.rust]
|
|
unsafe_code = "deny"
|
|
|
|
[workspace.lints.clippy]
|
|
dbg_macro = "warn"
|
|
todo = "warn"
|
|
too_many_arguments = "allow"
|
|
needless_range_loop = "allow"
|
|
type_complexity = "allow"
|
|
excessive_precision = "allow"
|
|
|
|
[profile.dev.package."*"]
|
|
opt-level = 2
|
|
debug = false
|
|
|
|
[profile.dev]
|
|
opt-level = 1
|
|
debug = "line-tables-only"
|
|
|
|
[profile.release]
|
|
debug = "line-tables-only"
|
|
|
|
[profile.dist]
|
|
inherits = "release"
|
|
lto = "thin"
|
|
codegen-units = 1
|
|
debug = false
|
|
|
|
# `cargo xtask web`: the browser build. Size matters more than build time: fat LTO, one codegen
|
|
# unit, no symbols, abort on panic (wasm32 can't unwind anyway), size-optimized code — except the
|
|
# crates that do per-pixel work, which stay at opt-level 3 (opt-level "s"/"z" there costs ~50 %/
|
|
# ~130 % render time; measured in docs/web.md → Bundle size).
|
|
[profile.web]
|
|
inherits = "release"
|
|
debug = false
|
|
lto = "fat"
|
|
codegen-units = 1
|
|
strip = true
|
|
panic = "abort"
|
|
opt-level = "s"
|
|
|
|
[profile.web.package]
|
|
lightcraft-pipeline = { opt-level = 3 }
|
|
lightcraft-raster = { opt-level = 3 }
|
|
lightcraft-color = { opt-level = 3 }
|
|
lightcraft-develop = { opt-level = 3 }
|
|
lightcraft-geom = { opt-level = 3 }
|
|
lightcraft-raw = { opt-level = 3 }
|
|
lightcraft-codecs = { opt-level = 3 }
|
|
lightcraft-scenes = { opt-level = 3 }
|
|
lightcraft-preview = { opt-level = 3 }
|
|
zune-jpeg = { opt-level = 3 }
|
|
zune-core = { opt-level = 3 }
|
|
jpeg-decoder = { opt-level = 3 }
|
|
jpeg-encoder = { opt-level = 3 }
|
|
png = { opt-level = 3 }
|
|
miniz_oxide = { opt-level = 3 }
|
|
|
|
# Keep the complete egui family and native event bridge on reviewed fork commits.
|
|
[patch.crates-io]
|
|
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" }
|