Fujimod
브라우저에서 카메라 펌웨어를 시험하고 Fujimod SD 부팅 파일을 만든다
쿠키 커터 사진이나 손그림을 3D 출력 가능한 아이싱 연습용 틀로 변환, 브라우저만으로 작동
Turn a photo of a cookie cutter or a drawn shape into a 3D-printable royal-icing practice blank. Runs entirely in your browser.
라이프스타일JavaScript · CSSGitHub @iamdougsgithub온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Turn a photo of a cookie cutter or a drawn outline into 3D-printable STL files for a royal icing practice blank and a matching cookie cutter. Runs entirely in the browser, no files leave your computer..
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Turns a photo of a cookie cutter (or a drawn outline) into 3D-printable STLs, entirely in the browser (nothing is uploaded):
index.html: a royal-icing practice blankcutter.html: a matching cookie cutter, whose blade's inside edge is exactly the
blank's outlineBoth pages share the photo pipeline and settings; the photo and settings carry over between them in the same browser tab (sessionStorage).
ES modules need to be served over HTTP (opening index.html from disk won't work):
npm run serve # http://localhost:5173 (no-cache static server)
Libraries load from jsDelivr at pinned versions: OpenCV.js 4.10.0, three.js 0.170.0,
earcut 3.0.1, clipper-lib 6.4.2, opentype.js 1.3.4. The side-text font, Nunito ExtraBold,
is in fonts/ under the SIL Open Font License (fonts/OFL.txt).
There's no build step and no server code: host the files as they are. .nojekyll tells
GitHub Pages to serve them untouched.
main and / (root). The site appears at
https://<you>.github.io/<repo>/ within a minute or two.Only index.html, cutter.html, src/, fonts/ and samples/ are needed at runtime. Hosts serve
over HTTPS, which phones prefer for camera capture.
npm install
npm test
src/geometry.js: pure pipeline: outline → smoothed/rounded outline (mm) → mesh → validation → STLsrc/contours.js: pure: picks the cookie edge from an OpenCV-style contour tree, centerline, auto-mode guesssrc/vision.js: OpenCV.js: threshold (brightness, or chroma for colored cutters), morphology, contourssrc/cutter.js: pure: outline → cookie-cutter mesh (tapered blade + rim), validated like the blanksrc/text.js: pure: font outlines → raised text solids wrapped onto the cutter's outside wallsrc/colorpick.js: pure: select by colour (sampling, CIE Lab ΔE distance, colour mask)src/lettering.js: pure: ink outlines → a "bubble" cookie outline round hand letteringsrc/trace.js: pure: hand-traced points → smooth closed outline (centripetal Catmull-Rom, corner points), and a detected outline → editable pointssrc/trace-editor.js: the point editor on the photo (add, drag, insert, delete, corners, undo, zoom and pan)src/app-core.js: shared page logic (photo, overlay, settings, three.js preview, download)src/app.js, src/cutter-app.js: the two pages' configs (what to build, filename, extra settings)src/shared-markup.js: help panel, photo card and outline settings, used by both pagestest/*.test.js: unit tests (node:test) for the geometry, cutter, tracing, lettering and colour modulestools/make-test-images.mjs: regenerates samples/*.pngSelect by color (next to "Trace by hand" under the photo) works like a magic wand:
Choose Lettering under "Shape is a" and upload hand-drawn words (dark ink on light paper, or light on dark). The cookie becomes a soft "bubble" that follows the lettering, so you can pipe the words on top.
The result goes through the same pipeline as any other outline, so Smoothness, Fill gaps, size, Mirror, Rotate and Trace by hand all still apply, on both the blank and the cutter.
When the automatic outline isn't right, "Trace by hand" lets you place points round the shape instead. It starts from the detected outline, turned into about 28 editable points with corners where it bends sharply, or from nothing if detection found nothing.
The curve passes through every point without overshooting. The traced outline replaces detection for both the blank and the cutter, and it's remembered when you switch pages.
Defaults: 3.5 in longest side, 12.7 mm thick, flat top and bottom, a 2.0 mm top round-over (16 segments), and a 0.4 mm bottom chamfer.
The outline follows the photo: nothing is removed for being thin. For each outline point the mesh builder measures the local clearance (largest inscribed disc touching that point, the "shrinking ball" method). Where a part is too thin or too tightly curved for the full profile, as with a drawn figure's hands, the round-over and chamfer narrow there, blended over about 1 mm. The walls are stacked rings offset along per-point normals, and each ring is checked to be a simple polygon, with a more conservative scale tried if one isn't. The caps are earcut triangulations; any collinear vertices earcut drops are re-inserted as fans so there are no T-junctions.
"Fill gaps narrower than" (default 1 mm) closes small notches with a Clipper offset-out /
offset-in. Setting convexRadiusMM: 3, notchWidthMM: 6 in makeBlank gives the original
strict mode, which rounds every corner to at least 3 mm but drops parts thinner than 6 mm.
Modelled as printed: lip on the bed, blade up, and mirrored so that, flipped over, it cuts the shape the right way round. Defaults: 18 mm tall overall, a 1.6 mm blade that bevels (about 26°) over its top 2.5 mm to a 0.4 mm cutting edge, on a 3 mm thick lip that extends 6 mm beyond the blade. The lip has a 1.5 mm round-over on its outer top edge (the edge you press on) and a 0.6 mm chamfer at the bed. The inside face is vertical and is exactly the cookie outline.
Optional raised side text (default "Dispose of after use") sits on the outside face just above the lip. The letters are 0.6 mm proud, wrap round gentle curves, and go on the straightest stretch of wall with no bend tighter than 8 mm radius. They start at 4 mm cap height and shrink to 2.5 mm if needed; if nothing fits, the text is left off with a note. Each letter is its own closed solid sunk 0.4 mm into the wall, and slicers merge them.
Every outside ring is an exact Clipper offset of the outline, so the edge is 0.4 mm everywhere, including tight inside corners, and walls that meet across a narrow gap merge. The bevel is built from offset rings 0.2 mm apart. Each band between neighbouring rings is a strip whose every triangle touches both rings. If the shorter-diagonal walk would fold, the code tries nearest-point pairing; failing that, it uses an earcut triangulation with diagonals flipped so it doesn't leave flat terraces. Tests check the edge width on heart, star and figure, and that no bevel triangle folds.