Varve v0.2.0
·
3664 commits
to master
since this release
Varve 0.2.0
Added
- Motion/prototyping P1-P3 improvements — timeline virtualization (only
visible tracks rendered), Lottie fill/stroke color keyframe export, motion
path drag-to-edit on canvas, prototypestartAnimation/stopAnimation
playback wiring, prototype interaction section UI for Play/Stop animation
actions, and prototype click-through E2E test. 413 tests pass across 31
files. - Figma REST JSON import — official Figma file JSON (REST API or plugin
export) is now a first-class import source. A bounded source normalizer
(figma/source.ts) enforces 64 MB / 100k node / 256 depth limits, then
a semantic converter (figma/converter.ts) maps pages, frames, groups,
shapes, text, Auto Layout, components/instances, variables, styles, and
prototype interactions into native Varve document fragments with fresh
IDs and deduplicated image assets. Opaque.figbinaries are rejected
with actionable guidance. Fidelity is honest: boolean operations,
remote image refs without embedded data, and unsupported effects are
reported rather than silently dropped. See
docs/architecture/figma-import-system.mdfor the full conversion
matrix and architecture. - Image Enhance — Deblur and Auto/Recommended — the Enhance workflow
now ships a validated Deblur operation backed by a reproducible
conversion of NAFNet-GoPro-width64 (MIT, ~138 MB fp16 ONNX, downloaded
on demand through the model manifest with a pinned checksum; conversion
parity is bit-exact with the trusted PyTorch reference — 98.9 dB on the
official GoPro test subset). Deblur runs through the same shared
native→worker provider chain as Denoise, with adaptive tiling that
keeps tiles single-shot up to 1280 px because NAFNet's global
receptive field makes small tiles visibly seamed. The dialog opens in
Auto/Recommended mode: a cheap classical analysis (noise, blur, JPEG
blockiness, resolution) proposes a restoration in human terms with a
confidence number, andRestore + Upscalecomposes only the stages it
needs (denoise, deblur, or deblur+upscale, always restoration before
super-resolution). - Denoise fix: graph-safe padding — the SCUNet ONNX conversion
actually requires padded dimensions divisible by 64 (its baked
attention reshape crashes otherwise), so 1080p and other non-64-
multiple images failed denoise. Padding, the native spec, and the
manifest contract were corrected (previously claimed 8). - Restore benchmark tooling —
scripts/bench/restore-reference/
provides a deterministic degradation corpus (JPEG, Gaussian, motion
blur recipes with fixed seeds), TS-exact ONNX reference runners, and
contact-sheet rendering; measured results are in
docs/quality/image-enhancement-benchmark.md. Compression-artifact
removal remains unavailable by design: no model passed the
design-content corpus (SCUNet destroys 1px line patterns; the only
JPEG-trained NAFNet checkpoint was rejected on provenance). - Natural-language asset search — the Asset Browser search field now
combines filename, OCR, tags, and metadata with an optional local visual
lane. Describe what you remember ("orange sunset over mountains") and
matching local assets rank by visual content even when the file is named
IMG_4281.jpg. Images are indexed in the background with a bounded,
cancellable queue (deduplicated by content hash, so renames and copies
never re-embed), search results keep match reasons, and exact filename
queries keep their ordering guarantee. The text tower and tokenizer are
parity-verified against the reference implementation; everything runs
locally with no uploads. Visual search is opt-in: the SigLIP image and
text models plus tokenizer download explicitly, verify SHA-256, and
filename/OCR/metadata search keeps working without them. See
docs/architecture/asset-search-system.mdand ADR-0221. - Object Selection — select an image and use the Select Object tool
(or the Adjustments tab) to prompt a local SAM2-Hiera-Tiny model with
positive/negative points and drag boxes. The preview is transient until
you apply it: candidate masks can be cycled before applying, and Apply
creates one undoable non-destructive raster mask that survives save,
reload, and model removal. The ~155 MB model is an explicit, checksum-
pinned download (Apache-2.0) loaded lazily; embeddings live in a bounded
session cache and are never written into the document. Promptable
segmentation is not semantic subject detection and is not a perfect
alpha matte — brush and trimap refinement remain the edge-quality tools. - Depth-aware effects — a reusable, model-independent DepthMap resource
powers non-destructive Depth Blur: pick a focus point, adjust focus range
and blur strength, preview the depth field, or convert a depth range into a
layer mask. Depth maps are generated on demand by a ~27 MB local model
(Depth Anything V2 Small, Apache-2.0, SHA-256 pinned), cached per source
revision, persisted in the document (16-bit scalar field), and rendered
without the model, so saved documents reopen with identical results and no
inference. The blur compositor is occlusion-aware (sharp subjects do not
smear into blurred backgrounds) and premultiplied-alpha correct. Relative
depth only; no metric calibration is claimed. - Experimental asset similarity — the Intelligence panel now separates
image-to-image Similar search from Near duplicates. The image lane uses a
local DINOv2-small encoder (Apache-2.0, SHA-256 pinned, reference-vector
parity verified against an independent runtime; selected over the SigLIP
image encoder from a Varve-corpus evaluation — see
docs/audits/semantic-asset-similarity-evaluation-2026-08-13.md).
Near-duplicate ranking keeps exact identity and perceptual fingerprints
separate. Computed embeddings are cached locally by content hash, so
unchanged images never re-run inference. The current workflow is
document-local, capped at 30 image candidates, and does not provide
automatic deletion. See
docs/architecture/semantic-asset-similarity.md. - Image palette extraction — select one image and open Appearance → Palette
to generate a deterministic local palette in perceptual Oklab, review
generated harmonies and WCAG 2.1 contrast pairs, copy HEX values, and save
extracted colours as document swatches or colour variables. Analysis is
bounded, cancellable, worker-backed when available, and does not upload
image pixels or add derived analysis data to the document schema. - Email workspace (desktop) — a new workspace mode
(Ctrl+Shift+7) for visual email authoring with a dedicated IR, HTML and
plain-text compilers, embedded-asset packaging, URL preflight diagnostics,
and multi-provider output. Template types, preview, and export are
available today; rendering fidelity depends on the recipient's email
client. - Browser demo — a bounded public demo at
/try/runs a curated sample
poster document in WASM with honest capability messaging, stale-asset
recovery, and a desktop CTA. Seedocs/architecture/browser-demo.md. - Auto-layout improvements — drag-to-reorder children within a flex
frame, "Add Auto Layout" command to wrap a selection, per-axis child
sizing (width/height, fit/hug/absolute), grid hug sizing, and
double-click a resize edge to reset that axis to Hug. - OS file associations —
.varveand.stratafiles register with
the operating system's "Open With" on Linux, macOS, and Windows so
double-clicking a document opens it in Varve. - Onboarding — canvas empty-state shortcuts, micro-hints for new
tools, learning preferences, and a What's New dialog that surfaces
recent changes. - Workspace mode redesign — the mode picker now uses per-mode accent
colours, elevated depth, and improved hover states for faster switching. - Contact channels — canonical contact and security surfaces in both
the application and the website (support@varve.studio,
security@varve.studio, GitHub Private Vulnerability Reporting). - Paint tools — raster brush system with a Brush Browser (portable
brush packages, deterministic previews) and Brush Editor (size, flow,
hardness, spacing, scatter, texture, grain). Wet-media lifecycle
(wet-edge blending, sample-all-layers clone), real smudge transport with
vector-pressure support, symmetry guides, clone source markers, alpha
lock, and mask painting on raster layers. The paint inspector wires
presets and per-stroke settings to the worker pipeline. See
docs/architecture/paint-system.md. - Gradient map adjustments — a non-destructive gradient-map adjustment
layer remaps tonal values through a user-editable colour gradient with a
built-in preset browser. Affects vector and raster content; export
preflight flattens to raster for SVG/PDF targets. See
packages/scene/src/gradientPresets.tsfor the preset model. - Selection improvements — object marquee with configurable shape modes
(rectangle, ellipse, lasso), area-aware selection commands (select all
in area, deselect, toggle), hierarchy navigation (select parent/child),
select-similar expansion, and indexed geometry for fast broad-phase
overlap. Raster masks can now be bridged from area selections.
Changed
- Windows installer shrunk ~75% — the NSIS installer now bootstraps
WebView2 via the Microsoft-provideddownloadBootstrapperinstead of
bundling it, and the bundled ORT WASM runtime was trimmed. - Licensing — eight engine crates (
varve-core,varve-colour,
varve-trace,varve-layout,varve-media,varve-effects,
varve-upscale,varve-bgremove) are now published under MIT OR
Apache-2.0 for ecosystem reuse and grant eligibility. - Brand cleanup — remaining Strata references in export identifiers,
wordmark SVGs, product screenshots, and website copy have been corrected
to Varve. - Render resource management — adaptive image fidelity policy and
pressure-signal integration improve frame pacing under memory pressure. - Marketing website — comparison page, feature screenshots, SEO
metadata, download-page troubleshooting, and download funnel with
platform recommendation.
Fixed
- Accessibility — dialog touch targets,
focus-visibleoutlines,
keyboard navigation in RecoveryDialog,aria-disabledon inactive
buttons, and error-boundary auto-focus. - Canvas performance —
getBoundingClientRectis now cached in the
input-pipeline hot path instead of called on every pointer-move. - Layout engine — flex bugs repaired (recursive hug sizing, per-axis
child sizing, frame own-size reflow, grid hug sizing). - Motion playback — hardened sampler and prototype runtime against
edge cases that could stall or crash. - Popover and Select — portaled custom Select no longer leaks
outside-click closures; submenus position correctly. - Multi-selection — Ctrl+drag preserves the existing selection when
the target is already selected. - Panel styling — previously unstyled surfaces (ErrorBoundary,
AdjustmentEditor, Design Audit panels, VariablePanel headers) now
receive consistent design-token styling. - Branding — stale
.stratareferences replaced with.varvein
user-facing code and current-state docs; export identifiers no longer
emit Strata names.
Before you install
These builds are not code-signed. That is a statement about this project’s budget, not about the files — but your operating system cannot tell the difference, and neither can you without checking. Verify the SHA-256 checksum below against your download before running it.
- Windows shows "Windows protected your PC". Choose More info → Run anyway.
- macOS refuses to open the app. Use System Settings → Privacy & Security → Open Anyway. Do not disable Gatekeeper system-wide.
- Linux has no equivalent prompt; verify the checksum instead.
Downloads
| Platform | Package | Size | Install |
|---|---|---|---|
| Linux aarch64 | Varve-0.2.0-linux-aarch64.AppImage |
40.3 MB | chmod +x, then run. Needs FUSE2. |
| Linux aarch64 | Varve-0.2.0-linux-aarch64.deb |
48.9 MB | sudo apt install ./ |
| Linux aarch64 | Varve-0.2.0-linux-aarch64.rpm |
48.9 MB | sudo dnf install ./ |
| Linux x86_64 | Varve-0.2.0-linux-x86_64.AppImage |
40.3 MB | chmod +x, then run. Needs FUSE2. |
| Linux x86_64 | Varve-0.2.0-linux-x86_64.deb |
49.8 MB | sudo apt install ./ |
| Linux x86_64 | Varve-0.2.0-linux-x86_64.rpm |
49.8 MB | sudo dnf install ./ |
| macOS aarch64 | Varve-0.2.0-macos-aarch64.dmg |
49.0 MB | Open, drag to Applications. |
| Windows aarch64 | Varve-0.2.0-windows-aarch64.exe |
37.4 MB | Per-user install, no admin needed. |
| Windows x86_64 | Varve-0.2.0-windows-x86_64.exe |
38.8 MB | Per-user install, no admin needed. |
Verify your download
9b209f4320ba053f6f48933ee8b80bb6560fc2f8b7dfafc3d46e6fd3a647e982 Varve-0.2.0-linux-aarch64.AppImage
cf03c7295cba67ad7577145572bc9d6ca08dc9f1299d79c56ab5e53d0fcaad95 Varve-0.2.0-linux-aarch64.deb
c6ee75a5106f0d492cdbd431b9fcc83b5174ce88c810db922ef0bb5622dfd164 Varve-0.2.0-linux-aarch64.rpm
1ea6d1931bde5b1a253bc49ce1ba599e58368a6a2453d1e52c7c7caa81e2405f Varve-0.2.0-linux-x86_64.AppImage
424ec1f69671eb46306c5b71b16a0da5f3b707413a9308eed02ba0ee3c8f0232 Varve-0.2.0-linux-x86_64.deb
4f64570dfd0b58f09454597fb938fced277efb280905a8a7ff60284f62dbf718 Varve-0.2.0-linux-x86_64.rpm
69a6f4aab8edc6465fe7f2024f55d123f7321c11f354197db29ddca124e40601 Varve-0.2.0-macos-aarch64.dmg
44cf328bac96a9e7404e780a835e9ac0052f87f91b4c9e02e3713a9362bb34c3 Varve-0.2.0-windows-aarch64.exe
f8f65117671310f2784b674f6c5d4a70a731a43c5acb634ce23a0eb4695bbcae Varve-0.2.0-windows-x86_64.exe
Or download SHA256SUMS.txt and run sha256sum -c SHA256SUMS.txt (shasum -a 256 -c on macOS, Get-FileHash on Windows).
Known limitations
- This is early software. Keep backups of anything you care about. The
.varvedocument format may still change in ways that break older files. - Updates are manual — there is no in-app updater yet.
A CycloneDX software bill of materials is attached as varve-0.2.0-sbom.cdx.json.