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

Closed
opened 2026-10-03 17:30:27 +00:00 by Mark · 1 comment
Owner

Finding

src/components/workspace/types.ts:262 defines export 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:

Hoop-accurate canvas: Work on a 1:1 scale representation of your actual Brother hoop.

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;
  • Home page claim: src/pages/Home.tsx:460-463 ("Hoop-accurate canvas")
  • Render Scale setting: 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:

  1. Rename MM_TO_PX to MM_TO_PX_REFERENCE and 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).".

  2. 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_PX for the user's monitor. This is heavier work but fulfills the claim.

The lighter fix is to update the Home page text:

Digital hoop workspace: Work on a precisely-scaled digital representation of your Brother hoop. Every millimeter on screen maps to a fixed canvas unit; the workspace coordinates match the stitch file the embroidery machine sees.

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.

  • #113 (closed) — Render Scale setting for backing store. Different concern (sharpness, not physical scale).
  • #158 (open) — Help page fabrications. Same family of marketing copy vs implementation.
## Finding `src/components/workspace/types.ts:262` defines `export 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: > **Hoop-accurate canvas**: Work on a 1:1 scale representation of your actual Brother hoop. 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;` - Home page claim: `src/pages/Home.tsx:460-463` ("Hoop-accurate canvas") - Render Scale setting: `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: 1. **Rename `MM_TO_PX` to `MM_TO_PX_REFERENCE`** and 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).". 2. **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_PX` for the user's monitor. This is heavier work but fulfills the claim. The lighter fix is to update the Home page text: > **Digital hoop workspace**: Work on a precisely-scaled digital representation of your Brother hoop. Every millimeter on screen maps to a fixed canvas unit; the workspace coordinates match the stitch file the embroidery machine sees. 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 - #113 (closed) — Render Scale setting for backing store. Different concern (sharpness, not physical scale). - #158 (open) — Help page fabrications. Same family of marketing copy vs implementation.
Author
Owner

Fixed in commit 57ff845 on 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.

Fixed in commit 57ff845 on 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.
Mark closed this issue 2026-10-03 18:10:15 +00:00
Sign in to join this conversation.
No description provided.