Release history
What's new in
Cuttify
Every update, fix, and improvement — newest first. Click the version badge in the app to come back here anytime.
v1.7 · Latest
Fix
- Handle Height range corrected — slider now runs 0.5–4.0 mm (was 2–12 mm), matching the Handle Width range and keeping the handle proportional to the cutter.
v1.6
New
- Handle Height slider — when "Add Handle" is enabled, a new slider controls how tall the grip flange is from the base up (2–12 mm). Combined with the Handle Width slider from v1.5, the handle is now fully customizable in both dimensions.
v1.5
New
- Cookie Area stat — the stats bar now shows the actual interior area of the cookie shape in square inches, computed from the inner-wall polygon. A color-coded badge marks whether you're in the industry-standard 7.5–8 sq in range.
- Handle Width slider — when "Add Handle" is enabled, a new slider appears to control how far the grip flange extends outward (0.5–4.0 mm). Previously hardcoded at 2.5 mm.
Improvements
- Combined dimensions column — Width, Length, and Height are now shown together in a single stat cell (W × L and depth on separate lines) rather than three separate columns, freeing space for the new Cookie Area stat.
v1.4
Security
- Rate limiting — detect endpoint limited to 10 requests/min per IP; generate endpoints limited to 60/hour.
- Upload validation — images are now limited to 10 MB and must be JPEG, PNG, or WebP; unsupported types are rejected before the body is read.
- Security headers — every response now includes X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, and Content-Security-Policy headers.
- CORS locked down — API access is now restricted to cuttify.app; wildcard origin removed.
- Path traversal hardened — model filenames are validated with a strict allowlist regex and realpath containment check.
- Three.js SRI — CDN script tag now includes a Subresource Integrity hash to detect tampering.
- Label text sanitized — server-side Pydantic validator strips control characters and enforces 40-character maximum.
Improvements
- Async STL generation — model generation now runs in a thread pool with a 30-second timeout, keeping the server responsive under load.
- 500 MB disk ceiling — models directory is guarded against runaway disk usage; emergency cleanup runs automatically if the limit is exceeded.
- Self-hosted fonts — Outfit and Fraunces fonts are now served locally; no Google Fonts requests on page load.
- Smoothness preference saved — the outline smoothness slider value is persisted in localStorage and restored on next visit.
- Mobile layout improved — new 640px breakpoint tightens spacing, hides decorative elements, and keeps controls usable on phones.
- WebGL error boundary — if 3D preview fails to start, a clear friendly message is shown instead of a blank viewer.
- Structured request logging — API requests now log IP, method, path, status code, and response time; 4xx/5xx logged at warning/error level.
- STL file permissions — generated STL files are created with mode 0600 so only the service user can read them.
- Removed vestigial smooth_amount parameter — client-side Chaikin smoothing is the sole smoothing mechanism; the unused backend parameter has been removed.
- Pinned requirements.txt — all Python dependencies are now pinned to exact versions for reproducible deploys.
v1.3
New
- Add Label feature — raise custom text on the outer wall of your cookie cutter. Control text size, depth, and font style.
- Add Label toggle — label settings are hidden by default and appear only when you enable the "Add Label" toggle, keeping the interface clean.
Bug Fixes
- Handle label mirroring fixed — debossed handle-top text now reads correctly when viewed from the grip side.
- Side label orientation fixed — cutter-side raised text was appearing rotated 180° and mirrored; both issues corrected.
- Handle label moved to grip face — text is now debossed into the palm/grip face (z=0) where it's legible in use, not the dough-facing underside.
- Side label positioned clear of handle and taper — text is centered in the clean body zone between the grip flange and taper section.
- Handle ring slightly thinner — reduced from 3 mm to 2.5 mm for a cleaner profile.
Improvements
- Outline smoothing removed from STL pipeline — the detected outline is used as-is; the canvas-preview smoothing no longer affects the generated model.
- Default cutter size is now 3.5" — matches the most common cookie cutter size.
- Version badge updated to v1.3 — click the badge in the top-left to return here.
v1.2
New
- Progressive 3-phase sidebar — the app now guides you through three distinct phases: Upload & Detect → Outline Review → Customize & Generate. Customize and Generate sections are hidden until your outline is submitted.
- Live outline canvas preview — after detection, the detected outline displays on a dark canvas with a glowing caramel stroke so you can see exactly what shape you're cutting.
- Smooth Outline toggle with real-time preview — toggle smoothing on and adjust strength 1–5 to apply Chaikin corner-cutting. The canvas updates live as you drag the slider.
- Submit Outline workflow — review and approve your outline before the customize controls appear. After submitting, the upload section collapses to keep the interface clean.
- Instructions page — a full on-brand help page covering every feature, mode, slider, and tip. Linked from the viewer placeholder and the instructions button.
- Download button now requires a rendered preview — the Download STL button stays grayed out until you click Preview 3D. Adjusting any slider re-grays it, ensuring you always download what you see.
- Version badge links to changelog — click the version pill (v1.2) in the top-left to open this page.
Bug Fixes
- Outline preview was upside-down — the canvas coordinate mapping now applies a 180° correction to match the original image orientation.
- Smooth outline slider had no visible effect — fixed a canvas sizing race condition where the canvas was measured before the section became visible, resulting in a 0-pixel drawing buffer.
- Upload section stayed visible after submitting outline — the upload zone, tips, image type selector, and status message now collapse when the outline is submitted.
- 3D viewer placeholder text was nearly invisible — text brightness bumped from ~35% to 76% lightness at full opacity for legibility on the dark viewer background.
Improvements
- Taper zone now configurable — the cutting edge taper fraction (10–50% of total height) is now a controllable slider rather than hardcoded at 20%.
- Viewer hint pill dismisses on click only — the 3D rotation hint stays visible until you intentionally dismiss it by clicking the pill.
- Start Over button — resets the entire session back to the upload step from anywhere in the flow.
- AI image tips added to instructions — guidance on using ChatGPT, Firefly, and Midjourney to generate clean silhouettes. Slicer ironing tip added for sharper printed edges.
v1.1
New
- Branded loading screen — animated progress bar with Enter button before the app loads.
- Cuttify rebrand — new name, logo mark, and Fraunces italic wordmark replacing the previous working title.
- Terms & Privacy footer — legal pages linked from the sidebar footer.
- Configurable taper geometry — cutting edge taper baked in at 20% of total height (now user-adjustable in v1.2).
v1.0
New
- Image-to-cookie-cutter pipeline — upload a photo, drawing, or clipart and get a printable STL in seconds.
- Three detection modes — Photo (AI background removal via rembg), Drawing (Canny edge detection), and Clipart (adaptive threshold).
- 3D preview viewer — Three.js-powered in-browser STL preview with rotate, zoom, top/bottom views, and wireframe mode.
- Customization controls — size, height, wall thickness, cutting edge thickness, taper zone, and wide-base flange toggle.
- STL download — generates a print-ready STL optimized for FDM printers, no supports required.
- FastAPI backend — Python backend with Shapely + trimesh geometry, OpenCV contour detection, and automatic STL cleanup.