# Composition exploration

This batch contains **92 directions for each edition: 184 logos** with portable SVGs, transparent PNGs, and editable settings.
Candidates **01–24 are unchanged**, including their numbering, settings, and SVG bytes.
The 24-option checkpoint is Git commit `3fc259e`.

Candidates **25–40** use a continuous Clarendon line with one font scale and baseline for both words.
Candidates **41–48** add more source-artwork compositions.
Candidates **49–56** follow the supplied visual reference using **normal font typesetting**: native advances, native kerning, a native space, uniform scaling, and an exactly horizontal baseline.
All earlier 48 options are unchanged.
Candidates **57–80** add 24 more normal-font studies. All earlier 56 candidates remain unchanged.
The new set compares four casing combinations across six treatments: centered, large centered, close-word frames, open-word frames, side rules, and broad letter spacing. All retain the straight original MULLE MECK artwork.

## Compare

The primary sheets are 3000 × 12820 pixels on white. Each candidate has only its number and name.
Every name is shown at the same width, so layout size does not bias the comparison.

| Sheet | Bilar | Båtar |
| --- | --- | --- |
| All 92 | [Primary sheet](comparison-bilar.png) | [Primary sheet](comparison-batar.png) |
| Options 25 onward | [Compare](new-additions-bilar.png) | [Compare](new-additions-batar.png) |
| Newest 24 / same baseline | [Compare](same-baseline-bilar.png) | [Compare](same-baseline-batar.png) |
| Normal font / supplied reference | [Compare](reference-style-bilar.png) | [Compare](reference-style-batar.png) |
| Continuous line | [Compare](continuous-line-bilar.png) | [Compare](continuous-line-batar.png) |
| No rules | [Compare](no-rules-bilar.png) | [Compare](no-rules-batar.png) |
| Offset / original proportion | [Compare](offset-original-bilar.png) | [Compare](offset-original-batar.png) |
| Left / right rule | [Compare](left-right-rule-bilar.png) | [Compare](left-right-rule-batar.png) |
| Framed | [Compare](framed-bilar.png) | [Compare](framed-batar.png) |
| Experimental | [Compare](experimental-bilar.png) | [Compare](experimental-batar.png) |

The first 24 retain the previous mix of centered, offset, single-rule, framed, and double-rule designs.
Grouped sheets overlap where a candidate belongs to more than one design family.

Supporting phrase widths range from 54% to 94% of the name width. Row gaps range from 2% to 12% of name height.
Source-artwork candidates use subject heights from 78% to 96% of verb height.
Continuous candidates use the same font scale for both words; visible heights differ naturally because of descenders, capitals, and the å ring.

## Edit a candidate

Open [the editor](../../index.html). Find **Explore a wider range**, then click a candidate.
The card loads its exact settings, including capitalization. Undo restores your previous composition.
Switch between editions to compare the same directions. Each edition keeps its own current edits.

You can open a candidate directly with `?candidate=06&edition=batar`.
Use **Newest 12 · larger text** to isolate candidates 81–92, or open `?collection=newest#exploration`.
The earlier four hierarchy presets remain in a collapsed section.

Set **Phrase layout → One continuous line** to join both words into a single typographic line.
The verb controls move, scale, and rotate both words together. Subject transforms are linked and cannot be adjusted independently in this mode.
**Word space** sets the extra advance between words in font units. Capitalization and phrase color remain editable.
Choose **Original subject artwork** to return to independently adjustable source lettering.

The editor provides independent subject capitalization and all rule controls:
placement, length, right-side length, thickness, text gap, vertical offset, color, double lines, and line separation.
Rules follow the phrase bounds and stay horizontal. The default rule color follows the supporting phrase: green for cars, blue for boats.
All layer sizes and positions remain editable. The generated ratios resolve to these existing controls.

[Individual SVG, PNG, and settings links](files.md) cover every export.
Each candidate JSON is a complete editor project containing both editions, with the selected edition active.
[index.json](index.json) records specifications, actual scales, bounding boxes, ratios, offsets, row gaps, rule geometry, settings, and export paths.

## Generate another batch

The same engine generates editor previews and command-line exports. Geometry is implemented in `studio/engine.js`.
The curated data is in `studio/exploration.js`, also saved as [batch.json](batch.json).

```sh
node generate_variations.cjs
uv run python render_exploration.py
```

For a custom batch:

```sh
node generate_variations.cjs --batch batches/around-06.json --output results/around-06
uv run python render_exploration.py --directory results/around-06
```

The first command writes SVGs, settings, a batch copy, and the geometry index.
The second writes PNGs and comparison sheets, then checks collisions, clipping, portability, and source hashes.
Use a new output directory for each batch to keep older exports separate.

The editor's **Generate a controlled batch** panel accepts the same JSON.
It previews both editions, provides family filters, and saves the active batch specification.
Its initial example samples 12 alternatives around candidate 06.
The editor checks parameter validity; use the Python renderer for raster collision verification of new batches.

### Specification

A batch contains either `candidates` or `sweep`, plus optional shared `base` settings.
Candidate values override the base. Rule properties merge individually.
Unknown composition properties are rejected.

| Property | Meaning |
| --- | --- |
| `id`, `name`, `family` | Candidate identity, display label, and comparison group |
| `phraseMode` | `source` (default), `continuous` (calibrated), or `plain` (normal font) |
| `tracking` | Added letter spacing in font units, applied equally throughout normal-font phrases; default zero |
| `wordGap` | Extra inter-word advance in font units for continuous mode; default 180, range 0–600 |
| `capitalization` | `lower`: bygger bilar; `verb`: Bygger bilar; `title`: Bygger Bilar; `subject`: bygger Bilar; equivalent boat wording |
| `nameScale` | Name scale in editor percent; default 140 |
| `phraseWidth` | Combined supporting ink width / name ink width; default 0.52 |
| `subjectHeight` | Subject ink height / verb ink height; default 0.8 |
| `verbScale`, `subjectScale` | Optional direct editor percentages; override the ratio-based sizes |
| `align` | `left`, `center`, or `right` within the name width |
| `shift` | Additional phrase translation as a fraction of name width |
| `rowGap` | Visible gap above supporting ink as a fraction of name height |
| `subjectX` | Extra word gap as a fraction of final verb height, added to a 0.025-height clearance |
| `subjectY` | Subject offset from transferred source bottom alignment, as a fraction of final verb height |
| `rule.mode` | `none`, `left`, `right`, or `both` |
| `rule.length` | Rule length / name width |
| `rule.rightLength` | Separate right rule length for `both`; defaults to `length` |
| `rule.thickness` | Rule thickness / name width |
| `rule.gap` | Phrase-to-rule gap / name width |
| `rule.vertical` | Vertical displacement from phrase center / phrase height; positive moves down |
| `rule.color` | Six-digit hex color, or `null` to follow phrase color |
| `rule.double` | Boolean; use two parallel horizontal lines |
| `rule.separation` | Double-rule centerline separation / name width |

Continuous mode links subject scale, position, and rotation to the verb. `subjectHeight`, `subjectScale`, `subjectX`, and `subjectY` do not independently affect it.

Direct scale overrides take priority over `phraseWidth` and `subjectHeight`.
Alignment and row gap are calculated again from the resulting ink bounds.
The index always reports actual geometry, including when it differs from requested ratios.

For ratio-based construction, word spacing starts with 2.5% of verb height between horizontal ink bounds.
The curated base adds 6.5%; selected offset candidates use a smaller addition.
This prevents accidental joining when the subject grows larger. The original source gap is unchanged in the editor's older default layout.

Use `candidates` to curate specific combinations:

```json
{
  "name": "Focused comparison",
  "base": {"nameScale": 140, "phraseWidth": 0.68, "subjectHeight": 0.9},
  "candidates": [
    {"id": "01", "name": "Centered", "capitalization": "lower"},
    {"id": "02", "name": "Right with rule", "capitalization": "title", "align": "right",
     "rule": {"mode": "left", "length": 0.3}}
  ]
}
```

Use `sweep` for a bounded sample of ranges. It does not create a Cartesian product:

```json
{
  "name": "Subject study",
  "base": {"phraseWidth": 0.68, "subjectY": 0.10, "rowGap": 0.08},
  "sweep": {
    "count": 12,
    "axes": {
      "subjectHeight": {"range": [0.78, 0.96]},
      "shift": {"range": [-0.04, 0.08], "stride": 5},
      "capitalization": {"values": ["lower", "verb", "title"]},
      "rule.mode": {"values": ["none", "left"]},
      "rule.length": {"values": [0.15]}
    }
  }
}
```

Numeric ranges are evenly sampled. `stride` changes their order; choose a value coprime to the count to visit every position.
Lists cycle through their values. Sampling is deterministic. A batch can contain 1–120 candidates.
The [ready-to-run candidate 06 example](../../batches/around-06.json) uses its full measured composition specification as the base.

## Normal font mode

Choose **Phrase layout → Normal font · one line**, or start at candidate 49.
Both words use uniformly scaled Regular Clarendon outlines, native advances and kerning, and a horizontal baseline.
This mode does not apply the historical Bygg pair corrections, estimated negative tracking, or separate subject transforms.
The default word space comes from the font. Global tracking remains adjustable; pair-specific Bygg corrections do not affect this mode.
The eight reference studies use zero added tracking. Side rules and row spacing follow the supplied screenshot.
These are composition studies, not a pixel-exact reconstruction of that screenshot.

## Continuous-line typography

Continuous mode uses the supplied Regular Clarendon outlines for every letter in both words.
The subject is newly outlined from the font in this mode; it does not use the separately traced source subject paths.
The original artwork remains available through source mode, including every pre-existing candidate.

Both words use the fitted Bygg transformation and a common baseline direction. The verb retains its calibrated pair advances.
New subject pairs start from native advances and kerning plus the estimated tracking.
Their horizontal ink boxes have at least 20 transformed font units of clearance at zero manual tracking.
This conservative spacing policy avoids new outline intersections. It is a design inference for the continuous phrase.
`wordGap` follows the last verb glyph’s native advance; side bearings also contribute to the visible word space.

## Capitalized subject: measured facts and inference

The initial lowercase b in both original subjects closely matches Regular Clarendon.
The source **b** was fitted independently against all three supplied weights with translation and an affine transform.

| Edition | Regular RMS | Bold RMS | Light RMS |
| --- | ---: | ---: | ---: |
| Bilar | 0.131891 | 1.681413 | 1.904580 |
| Båtar | 0.116358 | 2.277516 | 2.393125 |

Errors are in original SVG units. The measurement supports Regular as the source family and weight for the subject b.
It does not prove the historical placement of a capital B, which the original subject does not contain.

The capital extension applies that fitted transform and baseline to the font's B.
It aligns the left ink edge with the original b and moves the remaining subject letters horizontally by the width change.
Their paths, relative positions, and the original horizontal gap after the first letter remain intact.
The i dot and å ring are preserved. No other subject letters are retyped.

This is an inferred extension of the established typography system, not an exact historical capitalized logo.
Fits and construction parameters are saved in [car measurements](../subject-capital-bilar.json) and [boat measurements](../subject-capital-batar.json).
`prepare_subject_capitals.py` reproduces the assets through `prepare_studio.py`.

## Validation

- The 16 existing engine checks pass.
- All 184 compositions match the shared engine and their editable JSON exports.
- Desktop and mobile browser tests cover capitalization, rules, custom batches, filtering, undo, dragging, settings, PNG, and ZIP exports.
- Raster checks at 3× find no overlapping ink between name, verb, subject, and rules.
- Capital B does not collide with the remaining subject letters in source mode.
- Continuous mode uses a shared scale and baseline, including after resizing and rotation.
- All 48 SVGs from the original 24-option set match their checkpoint hashes.
- SVGs contain outlined geometry without external font, image, or asset dependencies.
- Original source SVG and font hashes remain unchanged.

See [verification.json](verification.json) and [the browser test report](../editor_browser_tests.json).
Raster collision checks use alpha ≥ 128; they are sampled checks, not a symbolic proof of curve separation.
Manual adjustments and future sampled batches can introduce overlaps and should be checked separately.

Candidates **81–92** add larger, shared-baseline phrases at 84%, 89%, and 94% of MULLE MECK’s width. All previous 80 candidates remain unchanged.

Larger-text comparison sheets: [Bilar](larger-text-bilar.png) · [Båtar](larger-text-batar.png).
