Workspace MM_TO_PX = 2 is a constant, not device-DPI-accurate — the "Hoop-accurate canvas: Work on a 1:1 scale representation of your actual Brother hoop" Home page claim is unfulfilled #163
Labels
No labels
blocked:commit-ready-failed
blocked:gate-fetch
blocked:gate-lint
blocked:gate-plan
blocked:gate-research
blocked:needs-attention
blocked:needs-decision
blocked:needs-human
blocked:no-changes
blocked:verify-failed
bug
deferred
feature-request
in-progress
needs-decompose
needs-triage
quickfix
security/medium
triage-approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/Kimi_Agent_Brother_10_Digitizing_App#163
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Finding
src/components/workspace/types.ts:262definesexport const MM_TO_PX = 2;— every millimeter in the workspace renders as 2 canvas pixels. This is a fixed display constant; it does not account for the user's monitor DPI (window.devicePixelRatio), physical screen size, or browser zoom.The Home page feature grid advertises:
A 100mm × 100mm hoop renders as 200px × 200px on every monitor. On a high-DPI display, that's about 100mm in browser zoom but the user has no way to verify. The "1:1 to actual hoop" claim is only true in the abstract sense of "the math is mm → 2px"; the user's on-screen rendering does not match their physical hoop size.
A power user with a 14×8 hoop trying to lay out a design wants the on-screen ruler to match the actual stitch dimensions, not a constant multiplier.
Where
src/components/workspace/types.ts:262—export const MM_TO_PX = 2;src/pages/Home.tsx:460-463("Hoop-accurate canvas")src/components/workspace/types.ts:131-133("Render Scale (#113) — backing-store multiplier for the workspace canvas. 'auto' defers to dpr; explicit 1×/2×/3× lets the user override the device's pixel density..."). The render scale is for the canvas backing store (sharpness), not for the on-screen mm→px ratio. Two different things.Suggested fix shape
Two changes:
Rename
MM_TO_PXtoMM_TO_PX_REFERENCEand document that it's a baseline, not a 1:1-to-physical display. The Home page claim should be qualified: "1:1 to the digital representation of the hoop (every mm = 2px on the canvas regardless of monitor).".Or: implement actual 1:1 to a calibrated size. Let the user pick a "physical ruler calibration" — drag a card-stock ruler to a known dimension, set the on-screen mm count, derive a real
MM_TO_PXfor the user's monitor. This is heavier work but fulfills the claim.The lighter fix is to update the Home page text:
This drops the "1:1 to actual" promise (which was always unfulfilled) and replaces it with the actual property: the workspace coordinates are what the PES file contains. The on-screen scale is consistent across monitors; the file is the source of truth.
Severity
Low. Cosmetic. The math is internally consistent (every monitor shows the same workspace for a given design); the user can stitch correctly because the PES file is faithful. The Home page claim is the issue, not the implementation.
Discovered by
Gap analysis (2026-10-02) of canvas display.
Related
Fixed in commit
57ff845on main.Replaced the unfulfilled "1:1 to actual hoop" claim with truthful copy: the workspace is a digital representation whose coordinates match the PES file the machine stitches. MM_TO_PX=2 is left as-is — it is intentionally a constant canvas scale, not a device-DPI-accurate physical scale, so design files round-trip identically across monitors. The "actual hoop size" claim was always unreachable without a per-monitor calibration flow, which is out of scope for a low-severity cosmetic issue.
Closes #163.