mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-25 10:37:11 -06:00
AI masks from Meta's SAM 3, run in LightCraft itself: a new
`lightcraft-segment` crate ports the Hugging Face transformers
implementation (Apache-2.0) to candle, on the GPU through Metal on macOS
(CPU elsewhere), with no C/C++ and no `unsafe`.
- Object: click to include, ⌥-click to leave a part out (SAM 3's
interactive prompt encoder + two-way mask decoder).
- Describe: a text prompt selects every instance ("sky", "the red car";
"car, road" merges several) via the CLIP text encoder and DETR detector.
- Both as new masks and as Add / Subtract / Intersect components; + / −
buttons under the selected mask combine selections.
- The segmentation is stored with the mask (288² quantized logits, ~10-30
KB), so renders, exports and the web build never need the model.
- A zoomed-in detail pass (background, ~5 s on an M4 Pro) re-segments the
area around a selection from a sharper source: 5-10x finer edges on
small objects.
- Per-selection Edge slider (hard ↔ soft); hovering a mask in the list
shows it in red (the always-on overlay is now off by default, O toggles).
- The engine feature `sam` (on in the desktop app) gates the model; the
image is encoded once per photo in the background, clicks take ~35 ms.
- Weights are not bundled (SAM License): tools/install-sam3.sh / .ps1
download and verify facebook/sam3; docs/ai-masks.md.
- Clearer errors (missing file, missing model) and a stderr logger in the
app (LIGHTCRAFT_LOG=info).
candle is pinned at 0.9.2: later releases make candle-core depend on
tokenizers with the Oniguruma C library. Every stage is checked against
the Python reference (tests/reference.rs, tools/sam3_reference.py): on
Metal the backbone matches to 7e-5 relative error, masks to ~5e-5.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C8BkS7JDqa1EMcjW6spDGA
41 lines
1.2 KiB
TOML
41 lines
1.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-meta = { workspace = true }
|
|
miniz_oxide = { workspace = true }
|
|
lightcraft-merge = { workspace = true }
|
|
rayon = { workspace = true }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
log = { workspace = true }
|
|
ab_glyph = { workspace = true }
|
|
lightcraft-segment = { workspace = true, optional = true }
|
|
|
|
[features]
|
|
# AI masks with SAM 3 (Object / Describe). Off for the web and CLI builds.
|
|
sam = ["dep:lightcraft-segment"]
|
|
|
|
[dev-dependencies]
|
|
libc = { workspace = true }
|