bflatastic
1ae0c22c26
Merge wp/A1
2026-10-04 21:46:02 +07:00
bflatastic
0af6734b70
Merge M3/M4 wave 0: neutral labels and brands gate, per-area paint modules, one engine loader/encoder (M3.7, M3.8, M4.10-M4.13)
...
# Conflicts:
# crates/engine/src/cmd/file.rs
# crates/mcp/src/headless.rs
# crates/mcp/src/tools.rs
# crates/ui-egui/src/io.rs
2026-10-04 21:46:01 +07:00
Brandon Thomas
6b93a3dded
Merge pull request #9 from storybored379/pr/raster-export-size-limit
...
Raster export: refuse sizes the renderer can't produce instead of crashing
2026-10-04 10:16:39 -04:00
storybored379 and Claude Opus 5.5
152228d76d
Raster export: refuse sizes the renderer can't produce instead of crashing
...
PNG/JPEG/WebP export renders the artboard at the requested scale with no size check. The CPU
rasteriser addresses at most 65535 pixels a side (and panics at that edge), so a large artboard at
a print resolution, e.g. the maximum 16383 pt artboard at 300 ppi (~68 000 px), or a screenshot at
scale 16, panicked inside vello_common: the desktop app or the MCP server exited and unsaved work
was lost.
`vectorcraft_render::raster_size` checks the pixel size first (at most 32 768 px a side and 268
megapixels, like Rasterize already refuses oversized images) and the export paths return an error
that names the size: `document.export` / `exportSelection` / `serialize`, the MCP `export` and
`screenshot` tools, File ▸ Export and the control protocol's `ui.render`.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 01:25:18 -07:00
storybored379 and Claude Opus 5.5
c20b7deec5
Stroke dashes: an invalid dash pattern draws a solid stroke instead of hanging the renderer
...
A dash pattern with a negative value (for example [-5, 3], from `stroke.set` or a PDF `d`
operator) was handed to the dasher whenever any value was positive. When the values sum to zero
or less the dasher never advances, so rendering the document hung forever (canvas, screenshot,
PNG/JPEG export, `vectorcraft-cli convert`).
PDF (32000-1 §8.4.3.6) and SVG (`stroke-dasharray`) both define such a pattern as invalid and the
stroke as solid. `Dash::is_dashed` now says whether a pattern draws dashes (finite, non-negative,
not all zero), and the renderer, the width-profile outline, the SVG and PDF exporters and the PDF
importer use it, so an invalid pattern is drawn, written and read back as a solid stroke everywhere
(the PDF exporter used to clamp negatives to 0, writing zero-length dashes).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 01:25:17 -07:00
bflatastic and Claude Opus 5.5
00a0874d4d
M3.9: swatches in colour groups are first-class — Document Color Mode converts them, they can be spot colours with their own plate and PDF Separation, and Document Info counts them
...
Document::swatches_iter/_mut, swatch_mut, swatch_group_of, remove_swatch and a copy-on-write
walk over linked solid paints (map_solid_paints) cover every colour group.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 12:15:10 +07:00
bflatastic and Claude Opus 5.5
7bc50901e4
M4.13: review fixes — template sublayers are left out of raster exports too (the check moves into draw_arc), Export Selection skips art under a template layer at any depth, Export for Screens drops @Nx suffixes on SVG/PDF rows, names files without case clashes and calls an unnamed artboard Artboard-N, oversized raster exports are refused instead of writing empty files, a named MCP artboard/range replaces the option picks, and control app.export without a path returns dataBase64 instead of opening a save dialog
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 11:49:45 +07:00
bflatastic and Claude Opus 5.5
45a7302601
M4.13: export correctness and MCP export parity — document.export/serialize honour artboard, artboards or range ("1-3, 5") for PDF (one page per artboard) and return dataBase64 without a path; Export for Screens writes one page per PDF, ignores scale and @Nx suffixes for vector formats, names duplicate artboards -2/-3 and returns bytes without a folder; raster exports, thumbnails and Export Selection leave template layers out (RenderOptions.skip_templates); file.exportForScreens with params runs the engine; the MCP export tool takes artboard/range/options, lists formats from the engine and never retargets the document; CLI convert --range
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 11:38:23 +07:00
Brandon Thomas and Claude Opus 5.5
dcc5a006a2
M3.6: opacity-mask editing mode — click the mask thumbnail to edit the mask art on a temporary isolated layer with any tool; the mask updates live after every edit; the object thumbnail (or transparency.stopEditingOpacityMask) leaves the mode
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 08:40:18 -04:00
Brandon Thomas and Claude Opus 5.5
3b48776607
M5.2: render perf — drop shadows/outer glows from a cached CPU-blurred raster composited per draw (600 shadows: ~300–1500 ms → 17–70 ms/frame); object blend modes on single plain fills applied per draw instead of a full-viewport layer; effect catalogue indexed once (lookups 300× faster)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 23:31:22 -04:00
Brandon Thomas and Claude Opus 5.5
1c1fd0f139
M9.3: Effect → Pathfinder (Add, Intersect, Exclude, Subtract, Minus Back, Divide, Trim, Merge, Crop, Outline) as live effects on groups/layers; rendered via the live cache, baked by Expand Appearance
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 20:57:14 -04:00
Brandon Thomas and Claude Opus 5.5
7d95f146ce
M11.4: View → Trim View (artwork clipped to the artboards; RenderOptions::trim)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 20:56:45 -04:00
Brandon Thomas and Claude Opus 5.5
4878f1c5dd
Rename DrawCraft → VectorCraft: crates (vectorcraft-*), apps, binaries, types, env vars, docs, examples (.vectorcraft); old .drawcraft files and preferences still load. Fix: text bounds exact after opening a file; selection no longer marks a document modified (dirty = content differs from the saved document). Screenshots and renders regenerated.
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 14:30:09 -04:00
Brandon Thomas and Claude Opus 5.5
2dafc7634b
M5: cache expanded stroke outlines across frames (pans reuse them), skip per-frame bounds for solid paints, pointer hasher for render caches (~7% less CPU per frame on the 20k bench); perf suite budgets reflect reprojection + background refresh
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 09:32:43 -04:00
Brandon Thomas and Claude Opus 5.5
f855da4fb8
M5: raster effects render on the multithreaded pipeline (each filter layer offscreen, composited with its blend/opacity; tested equal to single-threaded); fix inner glow blend isolated by its clip layer
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 00:41:55 -04:00
Brandon Thomas and Claude Opus 5.5
5e15994012
M3: opacity masks — model (linked transform), luminance mask rendering, transparency.* commands, SVG <mask> export/import, PDF luminosity soft masks, Transparency panel controls
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 00:30:38 -04:00
Brandon Thomas and Claude Opus 5.5
c06fad7b2b
M5: drawcraft-cli bench; canvas keyed by per-document uid (no stale frame from another tab); brushed strokes keep brush art under effects
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 23:38:38 -04:00
Brandon Thomas and Claude Opus 5.5
acb2566d89
Distortion tools (Width, Liquify, Puppet Warp, Perspective Grid), Patterns + Repeat, colour management (CMS, proofing, separations), Preferences/Shortcuts/Workspaces; original brand mark; fix filter panic in thumbnails; README demo scenes
...
- New original DrawCraft mark (gradient + pen nib) replaces the two-letter badge
- render: thumbnails and pattern tiles use a single-threaded context (vello's default is
multithreaded and panics on filters); per-item raster effects detected
- Type tool state no longer leaks across documents
- ui.set {status} for clean screenshots
- README: new hero, feature shots, Made in DrawCraft gallery; examples/neon-drive, ribbons,
feature-sheet; ASSETS.md updated; heading renamed to Crafting Apps
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 22:44:39 -04:00
Brandon Thomas
c9f38685b4
wip
2026-09-30 11:37:31 -04:00
Brandon Thomas
6dd0d2dcff
continued work; wip
2026-09-30 11:24:38 -04:00
Brandon Thomas and Claude Opus 5.5
f8136f1e35
Live Blends/Envelopes/Gradient Mesh, Shape Builder, Live Paint, Image Trace (drawcraft-trace), Recolor Artwork, Export for Screens, Actions panel, prefs persistence, real layer thumbnails; menus bound
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 11:02:16 -04:00
Brandon Thomas
d083c2ab50
continued progress
2026-09-30 09:36:51 -04:00
Brandon Thomas and Claude Opus 5.5
42df20ca7f
Panels to Illustrator parity (19 panels), ~70 menu commands, generic param dialogs, view rotation, property/model-based tests + MCP e2e; fix arrange overflow, compound grouping, double journaling, float round-trip, coordinate sanity, simplify growth, batch rollback of session state
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 09:32:20 -04:00
Brandon Thomas and Claude Opus 5.5
a2fd35cd32
M5: cache text glyph geometry per node (Arc identity)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 07:17:05 -04:00
Brandon Thomas and Claude Opus 5.5
60c562c956
M5.2/M5.4: render geometry cache (Arc identity), opacity folding, LOD, multithreaded rasterizer (20k objects: 187→21 ms); native macOS menu bar; Effect menu + live-preview dialogs; PDF open/save; bench example
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 07:07:59 -04:00
Brandon Thomas and Claude Opus 5.5
6d21d36d16
M2/M8/M9/M4.4: drawing + transform tools, live effects, PDF export/import, file/batch commands; UI restyled to measured Illustrator metrics (Medium Dark, categorized toolbar, hint bar, task bar, Layers)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 06:55:49 -04:00
Brandon Thomas and Claude Opus 5.5
bfee80a22c
M0: workspace skeleton — geom, color, doc, render, text, pathops, svg, tools, engine
...
Engine-first Cargo workspace for DrawCraft (clean-room Illustrator):
- geom: anchor-based path model, shapes, hit testing, snapping
- color: colours, paints, gradients, swatches, blend modes, harmonies
- doc: persistent Arc document tree, appearance stacks, text model, selection
- render: vello_cpu renderer (appearance, gradients, clip groups, blend modes)
- text: font DB, harfrust shaping, point/area/path layout
- pathops: curve booleans (linesweeper), Pathfinder, offset, simplify
- svg: import (usvg) and export
- tools: selection/direct/pen/shape tools emitting commands
- engine: Session, history with interactions, ~110 commands
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 05:53:29 -04:00