matthewtrahan
e8c4921900
import: the picker offers model files on Android ( #237 ) -- accept lists the MIME types too, and octet-stream, since Android's picker matches by MIME and knows none of .stl/.3mf/.step/.obj; a file that isn't a model says so instead of a DataView error
2026-10-16 14:19:27 -05:00
matthewtrahan
bee8efc2b7
check_stl: review fixes -- the inside depth comes from the standoff pass's own samples (a second sampling doubled the judge on big parts: voron housing +269 s), check_props signs its samples with a ray test, and the 0.2 mm is called a sampling tolerance
2026-10-16 14:17:31 -05:00
matthewtrahan
7933de2112
check_stl: walls are also sampled over their surface for being inside the part -- a wedge through a channel's lower plate ( #254 , ~144 mm3 inside) had every vertex outside and passed; past the 0.2 mm gap fails
2026-10-16 14:17:31 -05:00
matthewtrahan
b65f156d27
tall coupon: review fixes -- the test pins where the face pairs land and a slim+tall wall (ends + a pair), the README says the site's Draw doesn't brace yet and a spine wobble isn't the wall's
2026-10-16 10:24:41 -05:00
matthewtrahan
ee78237579
tall coupon: plate walls 60-120 mm, bare vs face ribs rising 50 % / 80 % -- a user says fins over 10 cm wobble; BRACE.tallH (off) gives any wall over it a face rib pair every faceStep 30 mm
2026-10-16 10:24:41 -05:00
matthewtrahan
1dafafe434
import: an STL or STEP read after a 3MF drops the 3MF's import meta too -- a language switch brought the old 3MF note back over the new part
2026-10-16 10:00:56 -05:00
matthewtrahan
e700218b31
import: OBJ review fixes -- an inline # comment on a face line read as a vertex ref, a CR-only file's \ continuation wasn't joined, a big file split into millions of line strings (now one scan into growable typed arrays; a file past the string limit says so), and a 3MF's import note outlived the OBJ after it on a language switch
2026-10-16 10:00:56 -05:00
matthewtrahan
6582065595
cli: .obj input, --object picks from a multi-object OBJ as from a 3MF plate; the MCP server's path says so
2026-10-16 10:00:56 -05:00
matthewtrahan
a704c9c1f6
import: OBJ files on the site -- a text reader (polygons fan, v/vt/vn and negative refs, o splits objects into the picker, groups and materials don't), sniffed by content like STL/3MF/STEP; no unit, read as mm
2026-10-16 10:00:56 -05:00
matthewtrahan
63610e2cd3
wedges: review fixes -- the clear check samples every 0.25 mm under the blade and along the run between stations (a 0.3 mm rib slipped between stations 1.5 mm apart; a wide blade's three rays left 3 mm gaps), counts a clearly down-facing surface deep under the top (bridge Y45: past the real face the plane-fit top rides over more of the part), keeps the longest run that still stands minH, and tests a vertical step's station itself
2026-10-16 09:30:01 -05:00
matthewtrahan
4546a10c3d
wedges: a wedge stands only where its column is clear of the part ( #254 ) -- a channel stood at 45deg got a wedge under its upper plate that ran straight through the lower one, fused into the part; a station with an up-facing surface under the blade's top is dropped and the wedge keeps its longest clear run
2026-10-16 09:30:01 -05:00
matthewtrahan
e5c6909be9
fill rows: review fixes -- rows kept only on no more red bare (the 0.5 mm2 tie let a minGain patch go), no double build under the sparse slider, the candidate rows read their own band (sorted by offset, not every point per row), the search budget shrinks past 250k faces, the field's docs say what it does (one heading, null = x), fill reports rowsLost/rowBuilds, an old session restores with Long walls off; tests: rows strictly beat the patch fill where they win, Plate only, sparse
2026-10-16 08:41:38 -05:00
matthewtrahan
88e7184976
tests: rows -- build on the L-bracket and tube at X40 and leave less bare, never more bare than the patch fill where they lose (wedge, ramp, torus, bar), outside the part and clear of every support, deterministic; the length field's calls
2026-10-16 08:41:38 -05:00
matthewtrahan
c6aec8661b
ui: Long walls checkbox under Plate only, shown in Full coverage only, on by default -- untick for the patch fill alone; undoable and saved with the session; de/pt/ar strings; site-only in the plugin options test
2026-10-16 08:41:38 -05:00
matthewtrahan
ea158a4b84
fill: Long walls on by default in Full coverage (opts.longWalls) -- the rows run, then the patch lines exactly as before (the step-1 heading order on the patch lines is gone: little gain, and its extra lines ran a Plate only portal into the check cap); built with and without rows, the rows kept only if they leave no more red bare (a wedge at X40: 17 -> 47 mm2 with them); fill reports its rows
2026-10-16 08:41:38 -05:00
matthewtrahan
6f9f19fba2
fill rows: search budget back to 900 builds -- the grid made the greedy pick cheap; Isaac upright 81 -> 86% must-hold
2026-10-16 08:41:38 -05:00
matthewtrahan
8a0c157ee7
fill: rows (opts.alignFill, off) -- long walls along the model's length before the patch lines (fins/rows.js: each row's longest buildable pieces by Draw's builder, greedy by red held); keep() pulled out of wallFor; no clear length = x
2026-10-16 08:41:38 -05:00
matthewtrahan
b142a96d28
prototype: fill rows -- parallel rows along one heading, each row's longest buildable pieces by Draw's builder; Isaac must-hold 76 -> 89% (11 walls, 2.6 -> 4.3 g), mixed on other figures
2026-10-16 08:41:38 -05:00
matthewtrahan
f2393c0327
fill: opts.alignFill (experiment, off) -- each group's lines try the model's length first (fins/field.js: the plan long axis of the surface within 20 mm), then 15deg either side, then the best of the rest; on Isaac 14 -> 17 walls, must-hold 76 -> 77%, still 3-5 mm stubs
2026-10-16 08:41:38 -05:00
matthewtrahan
dd0c597b37
ui: search review fixes -- results follow an undo, a build or anything else that shows or hides a row (it watched only change events); the brace tine fields point at Tines when that's what hides them; Restore all points at Remove fins, Remove selected at nothing; the hidden mode menu's options no longer count as Placement's name; the no-match line is announced
2026-10-16 07:43:18 -05:00
matthewtrahan
1c9fe96c13
ui: search the settings -- a box at the top of the panel narrows it to the settings whose name matches, opening the sections they're folded in; a match the current mode hides brings the switch that reveals it
...
Local issue 42. Names first (shown and English), tooltips only when no name matches;
Esc or the x puts the panel back as it was, and a search never saves a section's
open state. Layout only: no value changes (ui/search.js).
2026-10-16 07:43:18 -05:00
matthewtrahan
8d353753bf
fill: note the box grid key's range (review)
2026-10-16 07:39:48 -05:00
matthewtrahan
ad57031711
fill: the support box grid buckets by height too -- a tall wall's boxes and Auto's tines stacked in one plan cell, so every clearance check walked them all; same walls, Full builds 2-6x faster on the real figures (Isaac X30 12.2 -> 2.0 s, bunny X-30 11.1 -> 1.6 s, buster X-30 40.9 -> 17.2 s)
2026-10-16 07:39:48 -05:00
matthewtrahan
6c6f9694b3
ui: a saved session restores its layer height and gap again (review) -- the fins it lists as removed are matched by heights the gap shifts, so opening it at another gap brought them back; the browser still starts a new part from your last values
2026-10-15 22:09:44 -05:00
matthewtrahan
4664bd627a
ui: More settings review fixes -- the changed count stays on the line while the section is open, the sway switch drops its 'tall parts' hint under the Tall parts heading, and the wall-lines exception is described as the guard it is
2026-10-15 22:09:44 -05:00
matthewtrahan
2d82ff6866
ui: More settings -- bed pad, wall lines, sway braces, wide-face coverage, plate only and the display toggle fold into one section grouped by intent (Hold the part / Tall parts / Where supports go / Display), with an "N changed" count and a dot on each changed field
...
Local issue 42, step 3. In view by default: the printer row, Placement, Tines and
Cutouts. Every control keeps its id; the Clearances, Sway, Walls and Display
headers and their recaps go. A field counts as changed only while the build reads
it (a hidden or disabled field doesn't), and Wall lines not when a big nozzle took
its default away (ui/more.js).
2026-10-15 22:09:44 -05:00
matthewtrahan
bd6470b17b
ui: the layer height and support gap are remembered across visits like the nozzle -- they're the printer's, so a saved session neither saves nor applies them; interface material stays with the part
2026-10-15 22:09:44 -05:00
matthewtrahan
3ee3de1fb2
ui: the layer height stays shown while Interface material is on -- the band is one layer of the wall top, but with tines off and a Sure hold pad the field hid and the printer line dropped it (review)
2026-10-15 21:36:44 -05:00
matthewtrahan
ec529e0a5b
ui: a printer row at the top of the settings -- nozzle, layer height, support gap and interface material on one line (0.4 nozzle · 0.2 layers · 0.2 gap) that unfolds in place; Placement stands under it without a header
...
Local issue 42, step 2. The four fields move unchanged (every id kept); the Tines
and Clearances recaps stop repeating the layer height and gap. The line names only
what the build reads: layers drops out while the layer height is hidden.
2026-10-15 21:36:44 -05:00
matthewtrahan
497f857c3d
export: waits while a rebuild is out (review) -- a nozzle or layer change exported mid-build named the old fins with the new settings, the mismatch #279 is about
2026-10-15 21:04:59 -05:00
matthewtrahan
66a5e4c62a
export: the file name carries the nozzle and layer height the fins were built for ( #279 ) -- part-fins-0.6nozzle-0.24layer.3mf, so the slicer gets set to match: a 0.4 build sliced at 0.6 prints its walls as one line and drops tines between 0.24 layers
2026-10-15 21:04:59 -05:00
matthewtrahan
bff031d484
placement: review fixes -- the button group takes its screen-reader name from the translated Placement label, and a focused button's ring draws over its neighbour
2026-10-15 20:49:39 -05:00
matthewtrahan
1ccec211cf
placement: Auto / Full coverage / Draw as three joined buttons with a one-line note on what the chosen mode does, in place of the dropdown (local issue 42) -- the select stays, hidden, as the one place the mode is kept (undo, saved sessions and ui-smoke read and set it); the buttons drive it and follow it through undo/redo
2026-10-15 20:49:39 -05:00
matthewtrahan
e562b67680
rotate: review fixes -- the drag label hides while any toolbar popover is open (it ran under Suggest, and over Rotate opened mid-fade), drops aria-live (a drag queued an announcement per frame), and follows the badge row's sideways scroll on a phone
2026-10-15 18:42:46 -05:00
matthewtrahan
f9351d8239
rotate: a ring drag with the Rotate popover folded shows its angle in a small label above the Rotate badge (the turn so far, then the pose), fading 1.2 s after release -- the readout moved into the popover in #286 , so a drag showed no angle; ui-smoke's ring drag now drives the rotate gizmo (it found the Section plane's)
2026-10-15 18:42:46 -05:00
matthewtrahan
684ab98cfb
toolbar: review fixes -- folding the Rotate popover disarms Lay a face flat (its button was the only sign it was armed, and a stray click re-laid the part), a popover scrolls inside a short window and stays inside the window's left edge, Esc hands focus back to the badge, Undo/Redo take their name from the translated title, the Suggest chevron's CSS goes
2026-10-15 15:51:17 -05:00
matthewtrahan
06a1322466
toolbar: the left pane's pose and view tools move into the bottom view toolbar -- Undo/Redo, then Rotate (90° steps, Reset, Lay a face flat, rotate rings), Suggest, Strength (lit while a load is set), Section and View (Mouse preset, Show layers); each popover opens above its own badge and extends right; the left pane keeps only the stats card (local issue 42)
2026-10-15 15:51:17 -05:00
Lucas Poentes and Claude Opus 5.5
5876d85629
i18n (pt-BR): route the remaining hard-coded UI text through t() -- readout, picker, recaps, tooltips
...
About 100 messages never reached the dictionary: written in English in the code, or on elements
without a data-i18n / data-i18n-title hook, so Portuguese showed them in English. 97 now go through
t()/tn() (107 keys, 10 singular/plural pairs) and pt.js has them: the Fins readout and selected-wall
line, the 3MF/STEP object picker, the section recaps and timings, the hookless tooltips and labels,
and the Draw / sway refusal reasons (translated where shown, so draw.js and sway.js stay free of UI
i18n, as orient.js after #222 ). de.js is untouched; the hooks are language-neutral, so the 33 strings
de.js already has will show in German too.
English is unchanged: every converted template rendered old vs new at n = 1, 2, 7 (104 cases,
identical), and in Chromium the English page matches main in every state checked. Strings that keep
their English grammar ("1 tines", "The 1 prop sit") keep it on purpose. deno test -A: 533 passed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-15 15:29:36 -05:00
matthewtrahan
292e8a16b6
plugins menu: review fixes -- the command line's slicer list moves to its plain line (the orange note is for warnings), the LayerLing route is said to be untried, Deno gets its command, Sie in German, Brazilian Portuguese, and Arabic agreement
2026-10-15 15:29:21 -05:00
matthewtrahan
20c2a9e95d
plugins menu: the MCP server, and who the command line is for -- slicers with no plugin system (Bambu Studio, QIDI Studio, Creality Print, Snapmaker Orca, Flashforge) use it in place of a plugin; design tools with an MCP server but no plugins (LayerLing) reach the fins through the MCP server
2026-10-15 15:29:21 -05:00
matthewtrahan
0bea7ad741
pad: review fixes -- a coarse block whose fan folds over (near the oval's tips: reversed facets lying on the top, which closed/oriented checks pass) is meshed fine, its hub is its corners' mean; a Custom pad thinner than half a layer marks the triangles its ramp follows
...
Reviewer fuzz (210 random boxes, Light/Custom, layers 0.08-0.4, gaps, grips, margins): every slice now equals the full 0.1 mm grid's at 13 heights, no folds, no open edges; 30 cases folded before. Main's band scan was itself coarse in a few places (tips, thin Custom pads), so a few golden slices move to the full grid's.
2026-10-15 14:30:23 -05:00
matthewtrahan
bb649270a7
pad: the Light/Custom pad is 0.1 mm only in the 1.2 mm blocks the part comes near -- every column shared one set of rows, so one dip near the rim made a 128 mm figure's pad 2M cells in Suggest (RangeError at 4x); now 19k, and every slice is the same segments as before
...
Fine blocks keep the full grid's nodes and diagonals, and the rim keeps every node, so the pad's sections at ten heights match main segment for segment (cube X20-45, Light/Custom, 0.12-0.28 layers; man bust, buster, Isaac). A coarse block beside a fine one fans from its centre through the shared nodes, so there are no T-junctions. A coarser grid was the other option and was dropped: at a 0.3 mm cell the gap closes to 0.080 mm at a cube's corners. Goldens re-recorded: only the pad's triangles changed.
2026-10-15 14:30:23 -05:00
matthewtrahan
ab0b25dbe8
mcp: review fixes -- the tools say they may replace a file (output can name one), object must be a number or name, an own-property check on tool keys, ids must be strings or integers, no 2025-03-26 (batches), errors in setting names throughout, and the release note's add command takes a full path
2026-10-15 14:27:57 -05:00
matthewtrahan
25a317722e
mcp: build it in CI, drive it over stdio on Node outside the checkout, and publish support-fins-mcp.mjs with the other plugins
2026-10-15 14:27:57 -05:00
matthewtrahan
9919c32bb8
mcp: Support Fins as an MCP server -- fin_part and fins_only for AI clients (Claude Code, Claude Desktop), each a CLI run underneath, so a tool call writes the CLI's exact bytes; settings schema from the CLI's flags in the site's units; stdio on Deno or Node
2026-10-15 14:27:57 -05:00
matthewtrahan
e0122ae429
cli: export the flag table and let the bundler take another entry -- the MCP server builds its settings schema from the same flags and ships as the same one-file bundle
2026-10-15 14:27:57 -05:00
matthewtrahan
4b46f94fec
ui-smoke: the PETG step sets Support gap 0.3 -- the Material dropdown it set is gone ( b625eed), so every run failed at that step; README counts 87 steps
2026-10-15 11:42:42 -05:00
matthewtrahan
b59de82e3a
cutout: review fix -- a piece that no line separates from a nearby hole (it would already overlap it) stays ungrown instead of growing further in
2026-10-15 11:42:12 -05:00
matthewtrahan
877ffc9100
calibration: rebuild the cutout coupon's print files with the review fixes -- still no edge on more than two faces, PrusaSlicer time and filament unchanged
2026-10-15 11:42:12 -05:00
matthewtrahan
fe90b6c857
cutout: review fixes -- each strip piece grows by moving its edges out (0.4-0.6 eps, its own distance) and clipping to a line separating it from each nearby hole, in place of slab overlaps, corner slides and corner pulls: those left pieces non-convex (a folded cap, 68 faces turned inward on a lattice wall) and opened sub-micron gaps; now every piece is convex, none reaches into a hole or leaves a gap, and the test checks for inward faces too
2026-10-15 11:42:12 -05:00