# The Last Remaining Typewriter

Question: does a broken typewriter feel more convincing through persistent key faults, erratic ink transfer, or both? The current revision adds graded bends to more keys while retaining the stronger faults introduced after the first pass. It has its own website specimen and remains a separate build from the three regular wear levels.

Open `/last-typewriter.html` on the ordinary local preview server. The dedicated page is linked from the main navigation and loads the full weight overview by default. The earlier `/index.html?experiment=scrap-heap&variant=combined` URL remains for the fault-isolation comparisons. Jump straight to the letter with `#scrap-reading-section`. Its weight stays in sync with the main comparison. Its separate reading-style control defaults to one upright machine and can switch the whole letter to a separate italic machine. “Mixed (editorial use)” is an optional typography preview, not the simulated output of one fixed-typebar machine. The floating switcher compares:

- `mechanical` / Broken Keys: large missing chunks, attached debris, tilt and uneven pressure on bent faces. Weight 400 upright.
- `ribbon` / Dry Ribbon: broad ink losses, weak strikes and occasional rebounds. Weight 400 upright.
- `combined` / The Last Remaining Typewriter: both. Weights 100–1000 in steps of 100, upright and italic (twenty faces).

The combined italic faces have their own deterministic distribution of chips, debris, bends, misalignment, ribbon scuff and retries. They retain the agreed 90% height and original width. Each style acts as its own machine: case and shifted-symbol pairs still share a typebar within that style, while upright and italic do not repeat the same faults. The same italic key keeps its personality across the weight range, subject to the existing small-detail protection threshold. Switching style in a build worker clears cached fault assignments. A fixed-typebar machine cannot switch between these two styles. The letter therefore uses one style at a time by default. The optional editorial mode has six italic passages, using real italic outlines with the same advance and line metrics as upright. This keeps historical plausibility separate from the typeface’s usefulness for ordinary typography, a distinction that also applies to the regular TT2026 family. The isolated Broken Keys and Dry Ribbon trials remain upright only.

The italic treatment is deliberately gentler: its base is Worn rather than Battered, missing chunks target about 14% rather than 23% of ink area, negative ribbon pressure is halved, ribbon patches occur on 40% rather than 62% of eligible strikes and use 70% of the upright radii. Tilt pressure is 60% as strong, and collisions remove 55% as much ink. The independent fault assignments, alignment biases, thirty impressions and fixed advances remain. These style-specific allowances protect narrow italic joins. To compensate for the extra retained ink, a final optical-weight adjustment insets italic contours linearly by one font unit at weight 100 through ten at 1000, retaining the approved four units at 400 and eight at 800. Each connected part keeps its connectivity and at least 65% of its area: the inset is halved locally when it would split or erase that part. This lightens the strokes without adding fresh damage, scaling the glyphs or changing their advances. The amount is an optical trial, not a claim that equal ink area makes different letterforms look equally dark.

All twenty-two experimental faces have **30 stored impressions** for the existing 114-character core, fixed 547-unit advances and contextual OpenType cycling. `cv01`–`cv29` expose individual impressions. The release remains at ten impressions and its three existing wear levels; none of its geometry code or fonts is changed.

The comparison includes the existing Battered face, editable text, a side-by-side overview of all ten weights in both styles, a longer original letter at reading size (18/20/22 px, 1.4 line height) and all thirty impressions of a selected character. Shortcuts select a missing chunk, attached debris, or a mild, medium or severe bend. Mechanical faults now belong to a physical typebar shared by both faces. Unicode case pairs share bend severity, direction, alignment bias and strike-pressure variation; shifted number and punctuation pairs use US ANSI (for example 1/!, 8/* and ;/:). Chips and attached debris remain specific to each face. To preserve the existing extreme bends, each pair inherits the more pronounced of its previous assignments; ties prefer the unshifted face. The “Other face” shortcut makes the relationship easy to inspect. These are algorithmic choices, not hand-edited glyph exceptions. Extra bends are selected independently of chips and debris, so faults can coexist. Mild and medium bends use 35% and 65% of the severe pressure gradient, with proportionally smaller alignment offsets and rarer, thinner edge traces. The shared defect is anchored to one reference outline per character, while the underlying ten release impressions repeat beneath thirty new ink/alignment variations. This is an economical experiment, not thirty entirely independent remakes of the original texture.

Run from the repository root:

```sh
uv run python website/prototype-scrap-heap/build.py --workers 4
uv run --group dev python website/prototype-scrap-heap/verify.py
python3 website/preview.py
```

The builder checkpoints each completed face under `build/last-typewriter-cache/`. Running it again reuses a face only when its file hash, source font and generator/source-code signature match. `--force` regenerates every face. Preview metadata is replaced when the complete build succeeds.

The script reads the committed Battered upright and Worn italic Latin WOFF2 files in `website/fonts/`. Combined faces then receive the approved Extra compact curve pass from `curve_compaction.py`; the two isolated reference trials retain their previous outlines. It writes only to this prototype directory; it never invokes the production build or web-font sync. Font licensing is unchanged; see the accompanying license and notice.

Implementation choices to judge: most full-size keys now have an obvious fault. Upright missing chunks target roughly 23% of the reference ink area; the italic allowances above reduce damage to its narrower strokes. Other types carry attached irregular blobs, while bent types print more heavily on one side and faintly on the other. A continuous signed-distance pressure field makes that weight change smooth across the type. Some strikes also print short, thin fragments of the deeper side of the type’s edge, occasionally a corner; never a complete rectangle. The bent direction is stable per key, with slight strike-to-strike pressure variation. Per-strike ink offsets and tilt pressure change continuously with weight: the ink-offset range is 0.35× at 100, 1× at 400, 3.2× at 800 and 4.3× at 1000. Tilt-strength variation also broadens with weight. The approved 400/800 settings remain the interpolation anchors. The two original fault-isolation trials are retained byte for byte; the combined faces now receive only the final curve reduction described below. Combined weight 400 receives a final two-unit contour expansion upright and one-unit expansion italic, making the reading weight a little fuller while preserving the lighter italic balance. The other weights use the continuous settings without that reading-weight adjustment. Weights 100–700 occasionally carry a thin, broken first impression shifted sideways and vertically, as if the typist backed up and struck again. These impressions are marked “retry” in the grid. Retry selection peaks at 16% per eligible impression at weight 400, tapering to 4% at 100 and 700 and zero from 800: in the upright 400 face, 112 of 113 eligible characters have at least one retry among their thirty impressions (533 of 3,390 impressions, about 15.7%). Eligibility uses reference ink area, not a letter-only list; many punctuation marks qualify too. Very small shapes are excluded. Small rebounds fade in above 400, reaching a 10% chance at 800 and 15% at 1000; at the heaviest weights they replace faint first-strike retries. The first strike is represented by thinner, incomplete outlines, not opacity or a browser text shadow. Punctuation remains more restrained. An area floor prevents complete disappearance and falls back to the mechanically damaged form, not the pristine letter. Shape fitting uses the existing quadratic-curve encoder. No continuous randomness or browser transforms are used.

The collision trial adds intermittent sideways deflection to a deterministic subset of severely bent letter keys. The upright machine selects N/n, V/v, Y/y and P/p; the independent italic machine selects L/l. On selected impressions, a smooth pressure gradient thins the strokes toward the weak side, with broad unevenness in ribbon contact. Thin strokes fade first; thicker ones leave tapered or broken remnants. The gradient is calibrated to retain approximately 55–76% of the pre-collision ink, followed by an extra 3–7° rotation and a 55–90-unit sideways kick. The advance stays 547 units. The direction is stable per key; the contact strength and displacement vary per strike. The working basket order supplied for this experiment is `QA1Z WS2X ED3C RF4V TG5B YH6N UJ7M IK8, OL9. P;0-`: forty bars, with each shift face sharing its bar. It chooses an immediately adjacent interfering bar on the opposite side of the sideways kick. This is an artistic collision model, not a claim that every typewriter uses this order. Unlisted bars have no inferred neighbours. The neighbour does not print an extra letter. Interference is reciprocal: the upright pairs are N–U, V–T, Y–B and P–;, while the italic pair is L–9, including both shift faces. A bar participates in at most one pair, so reciprocity is unambiguous. The damaged bar has a 16% candidate chance per impression; its neighbour has an 8% chance, before excluding retry impressions. Neighbours retain roughly 78–90% of their ink, shift 20–45 units and rotate an extra 1–3°. They are marked “nudged” instead of “knocked”. Ordinary impressions on a neighbour keep its existing bend and alignment; the interference does not permanently bend it. “Basket neighbour” switches between the two bars. These are physical basket neighbours, independent of the letters next to each other in the text. This replaces the initial hard clipping boundary while preserving the existing uppercase/lowercase seed’s kick and rotation. Counterpart faces inherit that seed; exclusions for retry impressions can differ between faces. Faintness is encoded as thinner outlines, not transparency. Marked retry impressions are excluded from this effect. The grid labels the affected variants “knocked”, and a shortcut selects an example. This is a single incomplete, displaced impression; it adds no other letter. The [Smith-Corona manual](https://manualzz.com/doc/22741041/smith-corona-typewriter-user-manual) documents simultaneous-key jams, but does not establish a two-letter printed result. The displaced partial impression is an artistic approximation, not a mechanical simulation or a documented reconstruction of a particular machine’s fault.

The full ten-weight range, italic balance and Extra compact curves are approved and presented on the dedicated website page. The two fault-isolation trials remain available through the earlier comparison URL.

Coverage is still the 114-character experimental core, with thirty impressions per character; this extension adds weights, not the full Latin and expansion packages. The 100 and 1000 endpoints deliberately remain extreme. Both source styles keep their original fixed advance and shared line metrics.

## Current web-font sizes

These sizes cover the 114-character prototype, with thirty impressions per character. Each weight/style is a separate WOFF2 file.

| Weight | Upright (KiB) | Italic (KiB) |
| --- | ---: | ---: |
| 100 | 671.7 | 619.2 |
| 200 | 690.2 | 598.4 |
| 300 | 748.0 | 616.6 |
| 400 | 481.3 | 393.9 |
| 500 | 493.0 | 372.3 |
| 600 | 413.1 | 336.3 |
| 700 | 365.2 | 314.2 |
| 800 | 339.1 | 298.5 |
| 900 | 319.2 | 292.4 |
| 1000 | 302.7 | 277.4 |

All twenty 1.0.1 faces total **8.73 MiB**, including thirty impressions and built-in correction marks. A page using only one weight/style downloads its matching face; the full-range overview intentionally requests every face. The revised base weights make 400 fuller while preserving the 1000 endpoint.

For context, the local TT2020 Style B WOFF2 originals are 1,841.9 KiB upright (762 characters) and 1,860.1 KiB italic (478 characters). A fontTools subset to this prototype’s character set, retaining layout features and their glyph closure, is 281.2 KiB upright (112 characters: Ø/ø are absent) and 394.4 KiB italic (all 114). These are coverage comparisons, not equivalent impression sets.

## Extra compact curves

Extra compact is now applied to all twenty combined faces (weights 100–1000, upright and italic). The regular Subtle, Worn and Battered releases keep their previous outlines: the first tested light italic faces saved only about 0.1–0.4%, so their conversion was stopped without publishing any files.

Open `experiments/lrt-curves/curves.html` with a local server rooted at the repository (see the [experiment archive](https://git.hex9d.com/kludge/tt2026/src/branch/main/experiments/README.md)) to compare the saved previous 400 faces with the original Compact and Extra compact trials, upright or italic, at reading and heading sizes. The originals are preserved separately so the comparison stays meaningful after adopting Extra compact. Run `uv run python experiments/lrt-curves/compare_curves.py` to rebuild them; valid per-face checkpoints are reused. The final pass and both saved trials retain all thirty impressions and fixed metrics. A candidate must have fewer points, preserve components and holes, and remain within a per-glyph area-difference limit; otherwise that impression keeps its existing outline. Compact uses simplification/curve tolerances 6/3 and a 6% area-difference limit; Extra compact uses 10/4 and 10%.

The saved trial files use comparison family names, so their WOFF2 sizes can differ slightly from the final faces above.

| Style | Previous (KiB) | Compact trial (KiB) | Extra compact trial (KiB) |
| --- | ---: | ---: | ---: |
| Upright | 517.4 | 484.4 | 481.1 |
| Italic | 425.6 | 399.3 | 396.2 |

## Integrated corrections

Every published LRT face includes thirty variants each of x, dash and underscore corrections. They reuse the finished damaged types after curve simplification, with zero-advance overlays and independently shuffled mark sequences. The ordinary thirty letter impressions are unchanged. Select `ss01`, `ss02` or `ss03`; add `ss04` for translucent red ink. See [shared correction mechanics](../../docs/corrections.md). Separate two-impression overprint files are historical experiments and no longer part of the download packs.

The builder reads individual TT2026 desktop outlines from `build/full/` (Battered upright and Worn italic), not the shared-accent web export. Build the full desktop set before rebuilding LRT. This preserves its independent damaged letterforms in both web and desktop formats.
