3D convert: hybrid pipeline — vector outline for filled shapes, raster for icons/strokes
mlmihjaz+1: Claude Opus 4.8
176ac4c
Filled vector shapes (rect/circle/star/decorative/filled paths) use the exact
paper.js outline again (accurate); groups/icons and stroke-only shapes use the
rasterise+trace path so strokes become real rings (e.g. bicycle wheels). Both
feed buildGlyphMesh even/odd hole grouping, with a raster fallback on failure.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add 3D Studio Pro: full Babylon.js modeller + Edit Mode
mlmihjaz+1: Claude Opus 4.8
2e63441
- New "3D" tab below Vector with a self-contained Babylon workspace
- Floating in-stage "Add Object" palette (16 primitives) + lights
- Gizmos (move/rotate/scale), PBR materials, outliner, properties
- Booleans (CSG), duplicate, subdivide, smooth/flat, mirror
- Import GLB/GLTF/OBJ/STL, export GLB/PNG, render-to-2D-canvas
- Edit Mode: vertex / edge / face select + live transform (Tab, 1/2/3)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Rebrand to Sri Axis: remove AI + Three.js, rebuild 3D on Babylon.js
mlmihjaz+1: Claude Opus 4.8
be189e0
- DesignForge Pro -> Sri Axis; app.py now a minimal FastAPI static server
- Removed Claude AI Designer + Anthropic proxy and all Three.js
- Babylon.js 3D woven into the 2D app: Extrude / Revolve / Inflate
- Shapes AND text convert via one pipeline (rasterise -> ImageTracer ->
even/odd fill+hole grouping -> per-part ExtrudePolygon + merge):
keeps strokes as rings, letter counters open, decorative shapes intact
- 3D: per-object move/spin/tilt/roll/size, right-drag rotate, gizmo-free
Fabric-pointer selection (auto 2D<->3D), copy/paste/delete, ortho default,
wheel-zoom 3D, multi-light setup, save composites 2D+3D PNG
- UI: Inspector (dynamic right panel), top-bar tools, Pathfinder, Iconify
shape search (200k icons), unit-aware Position/Size + resize, unlimited zoom
- Typography: spacing/align/justify/line-height/bend (text-on-path)
- Fixed multi-selection copy/paste; removed promo/social/startup messages
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
AI: re-enable BYO-key as fallback when server has no key
Pen tool: Alt-click last anchor cuts its handle + convert cursor
mlmihjaz+1: Claude Opus 4.8
98dadd0
Match Illustrator: Alt-click ON the last anchor removes its forward handle so the
path continues from that point as a corner (Alt-drag there pulls a new
independent direction handle). Show a convert (caret) cursor when Alt hovers an
anchor; reset cursor when leaving the tool.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Update WORKLOG: session #6 — full Drawing Toolset + AI AutoDraw
mlmihjaz+1: Claude Opus 4.8
aa0793c
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Node editing: Alt-click an anchor to toggle corner <-> smooth
mlmihjaz+1: Claude Opus 4.8
1b888a6
Smooth anchors (with handles) drop their handles to become corners; corner
anchors gain symmetric handles along the tangent through their neighbours.
Endpoints of open paths get a single handle on the connected side.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Node editing: click a segment to insert an anchor
mlmihjaz+1: Claude Opus 4.8
51cf4ea
In point-edit mode, clicking an empty part of a segment adds an anchor there and
starts dragging it. Straight segments split at the projected point; Bézier
segments split with De Casteljau so the curve shape is preserved (handles
recomputed on both sides). Works on the closing segment of closed paths too.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Double-click a path/line/shape to edit its points: drag anchors (handles follow),
drag handles to reshape, Alt-drag a handle to break it (corner), double-click an
anchor to delete it. Live path + anchors/handles drawn on the canvas surface (no
history spam); Enter/Esc commits and rebuilds the fabric.Path. Path coords are
mapped through the object's transform so editing works after move/scale/rotate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Pen tool: Alt-drag breaks the handle (Illustrator-style corner/cusp)
mlmihjaz+1: Claude Opus 4.8
fc3968e
Pass the Alt state into penMove; when held, drag the out-handle independently
and freeze the in-handle instead of mirroring — so you can create corner points
within a curve.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the two standalone buttons with a 4-tool palette + options (color, size,
brush type). One tool active at a time via selectTool/deactivateAllTools:
- Magic Pencil: the AI sketch→suggestions tool (one-shot, renamed)
- Brush: fabric free-drawing (Pencil/Marker/Spray/Dots, size, color)
- Line: click points → straight open polyline (shift-constrain, dbl-click/Enter)
- Pen: Illustrator-style Bézier (click=corner, click-drag=curve, click first
point to close); live preview with anchors/handles on the canvas surface
Foundation for more brush options/library later. Esc exits, Enter finishes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Smart Draw: one-shot — pen deactivates on mouse release
mlmihjaz+1: Claude Opus 4.8
064522d
Split deactivateDraw() (turn tool off) from hideSuggestions() so releasing the
stroke turns the pen off while the suggestion bar stays up. Click Smart Draw
again to sketch the next shape.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Smart Draw: AutoDraw-style suggestion bar (DoodleNet + Iconify clip-art)
mlmihjaz+1: Claude Opus 4.8
42214e1
Sketch something and a row of matching clip-art appears (draw a butterfly -> get
butterflies); click one to swap your rough sketch for clean editable vector art.
DoodleNet (TF.js, in-browser) gives the top-5 guesses; each is searched against
the Iconify API (free, CORS, 200k+ icons inc. colored sets) and shown in a
suggestion pill. Your sketch stays editable until you pick. Graceful fallback
(sketch kept) if AI/icons are unavailable. Esc / × dismisses.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Smart Draw: AI recognition via TensorFlow.js + DoodleNet (345 QuickDraw classes)
mlmihjaz+1: Claude Opus 4.8
59f9ad4
Lazy-load TF.js + the DoodleNet classifier (yining1023, served from jsDelivr) on
first sketch — runs 100% in-browser, no server. The model names the doodle; for
geometric classes (circle/square/triangle/line/hexagon/octagon) we snap to a
clean editable primitive sized/rotated by the least-squares fitter (so the model
decides circle vs hexagon). Non-geometric doodles stay as an editable vector with
the guess surfaced. Graceful fallback to the geometric fitter if the model can't
load. Input rasterized to 28x28 centred, strokes=1/bg=0 per the model's training.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace corner-counting with proper geometric fitting: Kåsa circle fit + PCA
rotation-aware ellipse fit + line fit, plus a polygon residual (RMS of points to
the chords through detected corners). Decide by lowest fit error, biased x1.4
toward round shapes — a circle's points bulge off the chords (low circle error,
high polygon error) so it reads as a circle, while a true hexagon's points sit
on the edges (low polygon error) so it stays a hexagon. Strokes are arc-length
resampled (64 pts) first for stability. Ellipses keep their drawn rotation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New tool in the Shapes panel: drag to sketch and the stroke snaps to a clean
primitive (line, triangle, rectangle, circle/ellipse, pentagon/hexagon, or an
editable polyline for open curves) using RDP simplification + geometry
heuristics. Output is a normal Fabric object with editable fill/stroke. The
live stroke is painted via after:render (not a canvas object) so it never
pollutes layers/history. Esc exits the tool.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Polish AI Designer panel — larger, professional styling
mlmihjaz+1: Claude Opus 4.8
d18af89
Replace the tiny uppercase section title with a proper gradient-logo header,
bump chat/input text to 13px, add rounded suggestion chips and a larger send
button with focus ring.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Consolidate canvas resize into the topbar Resize modal
mlmihjaz+1: Claude Opus 4.8
8a4cd76
Remove the redundant right-sidebar Canvas section; the topbar Resize button +
modal (Common Sizes presets + custom W/H) is now the single resize path. Repoint
the current-size displays to the modal's custom-w/custom-h inputs so it always
opens showing the current size. Right sidebar is now Position & Size, AI
Designer, and Info.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Unite: bake absolute transform into point coords before boolean op
mlmihjaz+1: Claude Opus 4.8
d5048fc
Root cause: paper.js 0.12 boolean ops operate on raw segment coordinates and
ignore pending/unbaked matrices, so operands with a transform united in their
un-rotated frame. Fix: serialize each shape's geometry through its Fabric
calcTransformMatrix into an absolute path-data string (getPathData provably
transforms points), then rebuild a fresh identity-matrix path from that string.
unite now receives already-absolute geometry and preserves rotation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Unite preserves rotation; popup-first UI; AI Designer chat UI
mlmihjaz+1: Claude Opus 4.8
317336f
- Unite/pathfinder: capture each object's absolute matrix before discarding the
selection and apply it to transform-free local geometry, so rotation/scale/
position are reconstructed exactly as Fabric renders them
- Remove redundant right-panel Transform section (flip/rotate are in the popup)
- Move opacity into the popup next to the layer/arrange buttons
- Topbar: New/Open/Save/Undo/Redo grouped as icon-only buttons
- Add AI Designer chat UI placeholder (front-end only; generation coming later)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Unite: rebuild operands from absolute path data to preserve rotation
mlmihjaz+1: Claude Opus 4.8
1ddb96a
Rather than relying on paper's applyMatrix baking (which silently didn't take),
rebuild each operand from getPathData(globalMatrix) — confirmed against paper
0.12 source to transform segment coords — so each shape's full transform
(rotation/scale/position) is baked into identity-matrix geometry before the
boolean op runs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fix unite dropping rotation/position of transformed shapes
mlmihjaz+1: Claude Opus 4.8
83567c8
Imported SVG keeps transforms as unbaked matrices, and paper 0.12 boolean ops
run on raw segment coords — so a rotated/moved shape united in its un-rotated
initial frame. Bake every matrix into geometry before uniting, and read the
result via globalMatrix so output is in absolute canvas coords.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Contextual selection popup, unite fix, single export path, shared colors
mlmihjaz+1: Claude Opus 4.8
08e8482
- Pathfinder: switch to paper-full (SVG module), bake matrices, nonzero fill
- Remove duplicate right-panel Quick Export; topbar Download is the one path;
Copy-to-clipboard moved into the export modal
- Color button + recent swatches in the popup, shared across shapes & text
- Canva-style contextual popup: image -> Adjust(filters)/Crop, text/shape ->
color; image Adjustments/Filters moved from right rail into a popover
- Add Duplicate button to the popup
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Live size on transform, artboard-scaled shapes, recent colors, unite fix
mlmihjaz+1: Claude Opus 4.8
9a5fe5a
- Right-panel X/Y/W/H now update live while dragging/scaling/rotating
- New shapes scale to the artboard size (no more specks on large pages)
- Recently-used color swatches in the floating selection popup (persisted)
- Pathfinder unite: bake paper.js matrices so boolean ops use true coords
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Counter-scale Fabric selection handles/borders by 1/zoom so they stay a
constant on-screen size (CSS-transform zoom was inflating/shrinking them)
- Canva-style circular white handles with accent stroke
- Snap guide lines use 1/zoom line width + dashes (crisp at any zoom)
- Trim CSS-var colors, add ResizeObserver for ruler re-align on panel toggle,
rAF-throttle the ruler cursor redraw
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Update WORKLOG: new-laptop quickstart + full feature list + pan-fix notes
mlmihjaz+1: Claude Opus 4.8
3627e18
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fix middle-mouse pan: use Pointer Events + capture, kill autoscroll
mlmihjaz+1: Claude Opus 4.8
5ce943e
Routing pan through fabric mouse events missed the middle button because
Chrome's middle-click autoscroll captured the pointer. Now pan via
pointerdown/move/up on the wrap with setPointerCapture and capture-phase
preventDefault so autoscroll never starts.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Group/Ungroup as compact top-bar icon buttons.
- Trace replaces the source image (no leftover original on copy/paste).
- Fix middle-mouse pan (via canvas mouse events) and Alt-drag duplicate.
- Expand right-click menu: copy/cut/paste/duplicate/group/ungroup/flip/delete
(+ Ctrl+X). Cap Layers panel + defer ungroup to fix the big-vector freeze.
- Add rulers with px/mm/cm/inch/m unit selector, zoom/pan aware.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add deep color on groups/vectors + Pathfinder boolean ops
mlmihjaz+1: Claude Opus 4.8
02807ea
- Color now applies recursively into groups, traced vectors and
multi-selections (setStyleDeep) so every child path recolors at once,
even while grouped; right panel + panel-switch updated for groups.
- Pathfinder (paper.js): Unite / Subtract / Intersect / Exclude in the
Arrange menu. Combines 2+ shapes into one editable fabric.Path; subtract
is bottom-minus-top (Illustrator "Minus Front").
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add advanced vector tracing + persistent Library
mlmihjaz+1: Claude Opus 4.8
dede77e
- Image -> Vector tracing via ImageTracer.js: new Vector tab with B&W,
1-color silhouette, and 2/3/4/5-color quantized modes + detail slider.
Source from selected image, clipboard paste, or upload. Result is an
editable vector group (ungroup to edit each color).
- My Library tab: save any object/vector (with thumbnail) to localStorage,
click to re-add, delete, and Export/Import the whole library as JSON.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add Pro editing: snap guides, align/distribute, group, save/load
mlmihjaz+1: Claude Opus 4.8
34f3659
- Smart snap guides: snap object edges/centers to canvas + other objects
with pink alignment lines while dragging.
- Align & Distribute via new "Arrange" topbar menu (single obj -> canvas,
multi-selection -> within selection; distribute 3+).
- Group / Ungroup (Ctrl+G / Ctrl+Shift+G).
- Save/Open .dfp.json projects, debounced autosave to localStorage with
restore-on-load, and New to start blank. Ctrl+S saves.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>