mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-26 19:17:02 -06:00
- New crate lightcraft-slideshow (L1, no UI): SlideSettings (margins linked or
independent, guides, aspect preview, zoom to fill, stroke border, cast shadow,
backdrop colour, colour wash, background image; lengths relative to the slide's
shorter side; validated and clamped) and a CPU compose() used by playback, the
Settings preview and slideshow.preview.
- Engine: slideshow.layout (partial merge, saved in prefs.json) and
slideshow.preview {id?, width?, height?, path?} (PNG to path or base64);
RenderJob::with_slide composes on the render worker; the background photo is
rendered once and shared.
- Playback: with a non-default layout each slide is the composed screen-sized
slide, prepared ahead like before; the default layout plays as before.
- Settings > Slideshow: Layout, Options and Backdrop sections and a debounced
live preview of the active photo's slide (with margin guides).
- Tests: composer geometry/pixels/hostile input, command get/set/persist/preview,
headless playback of a composed slide and of the default layout.
57 lines
2.2 KiB
TOML
57 lines
2.2 KiB
TOML
[package]
|
||
name = "lightcraft-engine"
|
||
version.workspace = true
|
||
edition.workspace = true
|
||
license.workspace = true
|
||
description = "LightCraft engine: session, command registry, history, render jobs, view-models (L4)"
|
||
|
||
[lints]
|
||
workspace = true
|
||
|
||
[dependencies]
|
||
lightcraft-geom = { workspace = true }
|
||
lightcraft-color = { workspace = true }
|
||
lightcraft-raster = { workspace = true }
|
||
lightcraft-develop = { workspace = true }
|
||
lightcraft-scenes = { workspace = true }
|
||
lightcraft-pipeline = { workspace = true }
|
||
lightcraft-gpu = { workspace = true }
|
||
lightcraft-catalog = { workspace = true }
|
||
web-time = { workspace = true }
|
||
lightcraft-preview = { workspace = true }
|
||
lightcraft-codecs = { workspace = true }
|
||
lightcraft-raw = { workspace = true }
|
||
lightcraft-denoise-core = { workspace = true }
|
||
lightcraft-denoise = { workspace = true, optional = true }
|
||
lightcraft-meta = { workspace = true }
|
||
lightcraft-faces = { workspace = true }
|
||
miniz_oxide = { workspace = true }
|
||
lightcraft-merge = { workspace = true }
|
||
lightcraft-slideshow = { workspace = true }
|
||
rayon = { workspace = true }
|
||
serde = { workspace = true }
|
||
serde_json = { workspace = true }
|
||
thiserror = { workspace = true }
|
||
log = { workspace = true }
|
||
ab_glyph = { workspace = true }
|
||
# Apply the font’s vertical substitutions and origins to Japanese watermarks.
|
||
harfrust = { version = "0.12", default-features = false, features = ["std"] }
|
||
unicode-segmentation = "1.13"
|
||
lightcraft-segment = { workspace = true, optional = true }
|
||
|
||
# model downloads run natively only (the web build fetches no models)
|
||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
||
lightcraft-fetch = { workspace = true }
|
||
|
||
[features]
|
||
# AI masks with SAM 3 (Object / Describe). Off for the web and CLI builds.
|
||
sam = ["dep:lightcraft-segment"]
|
||
denoise = ["dep:lightcraft-denoise", "lightcraft-denoise/runtime", "lightcraft-gpu/denoise"]
|
||
rawnind-model = ["denoise", "lightcraft-denoise/rawnind-model", "lightcraft-denoise-core/rawnind-model"]
|
||
|
||
[dev-dependencies]
|
||
# Lossless synthetic HEIC files (the import test; decoded when the codecs' `heif` feature is on).
|
||
lightcraft-heif = { workspace = true, features = ["testdata"] }
|
||
libc = { workspace = true }
|
||
lightcraft-tiff = { workspace = true }
|