Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/distribution.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ jobs:
with:
node-version: '22'
- name: Install outline, raster and shaping verification tools
run: pip install 'fonttools[woff]>=4.62' 'skia-pathops>=0.9' 'freetype-py>=2.3' 'uharfbuzz>=0.56' 'playwright==1.63.0' 'fontbakery==1.1.0'
run: pip install 'fonttools[woff]>=4.62' 'skia-pathops>=0.9' 'freetype-py>=2.3' 'uharfbuzz>=0.56' 'numpy>=2.0' 'playwright==1.63.0' 'fontbakery==1.1.0'
- name: Install Chromium for title width parity
run: python -m playwright install chromium
- name: Gate every Display glyph and construction regression
Expand Down
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,19 @@

Newest first.

- **SEIHouse Noto Redraw 02, a candidate reimagining (2026-11-12)**
Added `noto/studies/redraw/`: a new drawing engine (`pen.py`) with direction-based stroke
modulation, tapered joins and one family-wide corner softness; every letter redrawn on it
(`letters.py`); outline-based automatic kerning (`spacing.py`); and Light, Regular, Medium and
Bold fonts with 314 characters (keyboard symbols, Latin-1 and Latin Extended-A). Balanced's
softness, full curves, two-storey a/g, hooked l and distinct I/l/1 are kept. The new
[comparison page](noto/studies/redraw/index.html) shows it beside the unchanged Refinement 01
and is now the homepage's Noto workspace; the version archive lists it with all four weights.
It is a candidate for owner review, not a release: Balanced stays the approved direction and
all earlier study fonts are byte-for-byte unchanged. `tests/test_noto_redraw.py` gates
outlines, counters, heights, weights, shaping, kerning clearance and delivery; the test job
now installs `numpy`. See [the study notes](noto/studies/redraw/README.md).

- **Monochrome studio symbol refinement, Sans 0.43 & Living Titles 0.1.4 (2026-11-12)**
Redrew and tuned all 44 monochrome brand, cultivation, web-novel, player, and music
symbols (`★ ☯ ⚡ ☀ ☾ ☽ ⚔ ✦ ☆ ◆ ◇ ▲ ▼ ▶ ◀ ♥ ♡ ♪ © ® ™ Ⓢ ♩ ♫ ♬ ♭ ♮ ♯ ⏸ ⏹ ⏺ ⏭ ⏮ 🎧 💻 📖 🔖 🔍 🔔 ⚙ ⌂ 🎤 💿 🔊`,
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ under [`display/`](display/README.md).
## Font Lab homepage, version archive & Vercel

Open [`index.html`](index.html) for the workshop homepage, organized into two clear sections:
- **01 / Regular & Reading Fonts:** Live specimen and workspaces for **SEIHouse Sans 0.43** (Reader Lab, 3-chapter reading test, Literata/Rubik benchmark, and quick version comparison) alongside the **SEIHouse Noto (`Balanced · Refinement 01`)** warmth study.
- **01 / Regular & Reading Fonts:** Live specimen and workspaces for **SEIHouse Sans 0.43** (Reader Lab, 3-chapter reading test, Literata/Rubik benchmark, and quick version comparison) alongside **SEIHouse Noto (`Balanced · Redraw 02`, a candidate for review)**.
- **02 / The Title Engine:** Live cut switcher (**Soft, Edge, Ink, Wide**) and workspaces for **SEIHouse Display 0.1**, **Living Titles 0.1.4**, and **Elemental Title 0.1.0** (Display Lab, Elemental Title Lab, specimen gallery, and NovelExpanded living-title cover mock).
- **Version History & Compare ([`site/versions/index.html`](site/versions/index.html)):** Browse and compare every preserved version side by side across **SEIHouse Sans** (`0.6` → `0.43`), **Display** (8 milestones), and **SEIHouse Noto** (4 warmth studies). Both Labs can save browser drafts and download JSON settings on a normal website.
- **Version History & Compare ([`site/versions/index.html`](site/versions/index.html)):** Browse and compare every preserved version side by side across **SEIHouse Sans** (`0.6` → `0.43`), **Display** (8 milestones), and **SEIHouse Noto** (4 warmth studies and Redraw 02). Both Labs can save browser drafts and download JSON settings on a normal website.

Import this repository into Vercel with **Other** as the framework and the repo
root as the Root Directory. `vercel.json` builds the website with
Expand Down
53 changes: 35 additions & 18 deletions archive_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -353,12 +353,27 @@
}

NOTO_VERSIONS = [
{
'version': 'Redraw 02',
'label': 'Balanced · Redraw 02 (candidate)',
'shortTitle': 'Modulated strokes, tapered joins, four weights & kerning',
'date': '2026-11-12',
'current': True,
'summary': 'A full redraw on the Balanced foundation: strokes that swell and thin, arches that taper into their stems, a proper reading weight, automatic kerning, four weights and 314 characters. A candidate for review; Balanced remains the approved direction.',
'highlights': [
'Keeps Balanced softness, full bowls, two-storey a and g, and the hooked l',
'Light, Regular, Medium and Bold from one set of drawing rules',
'Keyboard symbols and accented letters for most European languages',
],
'faces': [(f'noto/studies/redraw/fonts/SEIHouseNoto-{name}.woff2', name, weight)
for name, weight in (('Light', 300), ('Regular', 400), ('Medium', 500), ('Bold', 700))],
},
{
'version': 'Refinement 01',
'label': 'Balanced · Refinement 01',
'shortTitle': 'Smoother bowls, clearer openings & steadier spacing',
'date': '2026-11-11',
'current': True,
'current': False,
'summary': 'Refined pass on the chosen Balanced foundation: smoother curves in a, c, e, g, and s, coordinated arches in n, m, h, and r, lighter crossbars on e/f/t, and steadier word spacing.',
'highlights': [
'Builds directly on your selected Balanced (Study B) warmth direction',
Expand Down Expand Up @@ -761,9 +776,19 @@ def build_versions_manifest(extra_sans_meta: dict | None = None, extra_display_m
# 3. SEIHouse Noto studies
noto_entries = []
for item in NOTO_VERSIONS:
rel_path = item['path']
data = (ROOT / rel_path).read_bytes()
verify_woff2(data, rel_path)
faces = []
for rel_path, style_name, weight in item.get('faces') or [(item['path'], 'Regular', 400)]:
data = (ROOT / rel_path).read_bytes()
verify_woff2(data, rel_path)
faces.append({
'path': rel_path,
'styleName': style_name,
'weight': weight,
'style': 'normal',
'night': False,
'bytes': len(data),
'sha256': sha256_bytes(data),
})
noto_entries.append({
'version': item['version'],
'label': item['label'],
Expand All @@ -772,16 +797,8 @@ def build_versions_manifest(extra_sans_meta: dict | None = None, extra_display_m
'current': item['current'],
'summary': item['summary'],
'highlights': item['highlights'],
'capabilities': {'weights': [400], 'italic': False, 'nightWeights': []},
'faces': [{
'path': rel_path,
'styleName': 'Regular',
'weight': 400,
'style': 'normal',
'night': False,
'bytes': len(data),
'sha256': sha256_bytes(data),
}],
'capabilities': {'weights': [face['weight'] for face in faces], 'italic': False, 'nightWeights': []},
'faces': faces,
})

default_sans_compare = '0.39' if any(v['version'] == '0.39' for v in sans_entries) else sans_entries[1]['version']
Expand Down Expand Up @@ -814,10 +831,10 @@ def build_versions_manifest(extra_sans_meta: dict | None = None, extra_display_m
'id': 'noto',
'name': 'SEIHouse Noto',
'subtitle': 'Warm Noto-based reading foundation study',
'currentVersion': 'Refinement 01',
'defaultCompareVersion': 'Study B',
'workspaceUrl': '../../noto/studies/warmth/index.html',
'workspaceLabel': 'Open Noto Warmth Study',
'currentVersion': 'Redraw 02',
'defaultCompareVersion': 'Refinement 01',
'workspaceUrl': '../../noto/studies/redraw/index.html',
'workspaceLabel': 'Open Noto Workspace',
'versions': noto_entries,
},
},
Expand Down
4 changes: 4 additions & 0 deletions build_site.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ const root = dirname(fileURLToPath(import.meta.url));
const output = join(root, 'dist', 'site');
const pages = [
'index.html', 'site/home.css', 'site/home.js', 'site/favicon.svg',
'noto/studies/redraw/index.html', 'noto/studies/redraw/README.md', 'noto/studies/redraw/manifest.json',
'noto/studies/redraw/proofs/redraw-glyphs.svg',
...['compare','details','dark','mobile','family'].map(view => `noto/studies/redraw/proofs/redraw-${view}.png`),
...['Light','Regular','Medium','Bold'].map(style => `noto/studies/redraw/fonts/SEIHouseNoto-${style}.woff2`),
'noto/studies/warmth/index.html', 'noto/studies/warmth/README.md',
'noto/studies/warmth/warmth-01.html',
'noto/DESIGN.md', 'noto/studies/warmth/proofs/balanced-glyphs.svg',
Expand Down
6 changes: 3 additions & 3 deletions docs/WEBSITE.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@ dedicated **Version History & Side-by-Side Compare** page at [`site/versions/ind
release with a live interactive specimen (weight, real italic, size, Night-mode optical
grade status, and a Quick Compare dropdown for older milestones), workspace cards for the
Reader Lab, 3-chapter reading test, Literata/Rubik benchmark, and version archive, plus a
companion card for **SEIHouse Noto (`Balanced · Refinement 01`)** linking directly to
`noto/studies/warmth/index.html`.
companion card for **SEIHouse Noto (`Balanced · Redraw 02`, candidate)** linking directly to
`noto/studies/redraw/index.html`.
- **Section 02 — The Title Engine:** Showcases **SEIHouse Display 0.1**, **Living Titles 0.1.3**,
and **Elemental Title 0.1.0** with interactive cut tabs (**Soft, Edge, Ink, Wide**), a live
title tester, workspace cards for the Display Lab, Elemental Title Lab (`display/elemental/index.html`),
finished cut gallery, and NovelExpanded living-title cover mock, plus direct `.otf` starter downloads.
- **Version History & Compare (`site/versions/index.html`):** Tracks and compares every
preserved release across **SEIHouse Sans** (`0.6` through `0.42`, 17 versions),
**Title Engine / Display** (7 milestones across Soft, Edge, Ink, and Wide), and
**SEIHouse Noto** (Studies A, B, C, and `Balanced · Refinement 01`). Fonts are loaded on
**SEIHouse Noto** (Studies A, B, C, `Balanced · Refinement 01`, and `Redraw 02`). Fonts are loaded on
demand via `FontFace` so visitors only download the two versions they are actively comparing.

## Deploy to Vercel
Expand Down
10 changes: 5 additions & 5 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -163,14 +163,14 @@ <h3>SEIHouse Sans</h3>
<div class="companion-panel noto-panel">
<div class="companion-copy">
<div class="badge-row">
<span class="version-pill noto-pill">Balanced · Refinement 01</span>
<span class="meta-pill">Warmth study</span>
<span class="version-pill noto-pill">Balanced · Redraw 02</span>
<span class="meta-pill">Candidate for review</span>
</div>
<h3>SEIHouse Noto</h3>
<p class="panel-summary">A warmer, custom-drawn cousin to Google Noto Sans, refining lowercase bowls and steady word spacing on the Balanced foundation.</p>
<p class="panel-summary">A warmer, custom-drawn cousin to Google Noto Sans. Redrawn on the Balanced foundation with modulated strokes, tapered joins, kerning and four weights.</p>
<div class="companion-actions">
<a class="button noto-button" href="./noto/studies/warmth/index.html">Open Noto Workspace <span aria-hidden="true">↗</span></a>
<a class="history-link" href="./site/versions/index.html?track=noto">Compare 4 studies →</a>
<a class="button noto-button" href="./noto/studies/redraw/index.html">Open Noto Workspace <span aria-hidden="true">↗</span></a>
<a class="history-link" href="./site/versions/index.html?track=noto">Compare 5 versions →</a>
</div>
</div>
<div class="companion-preview">
Expand Down
24 changes: 23 additions & 1 deletion noto/DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,29 @@ Compare using the same size, weight, colors, and passage. Review both full parag
and enlarged letter details. The comparison is the default Noto test page in the
Font Lab navigation; the first three studies remain accessible from its footer.

## Evidence and boundaries
## Redraw 02 — candidate, not a new owner decision

On 2026-11-12 the owner asked for SEIHouse Noto to be reimagined: more professional,
keeping its flavour. Source and outputs: `studies/redraw/` (version 0.010).

- New construction: stroke thickness follows direction (88 upright / 74 horizontal
at Regular) and tapers where arches and bowls meet a stem. The constant 74-unit
line of the earlier drawings is retired in this candidate.
- Regular carries a text weight. Light is close to the earlier colour; Medium and
Bold come from the same rules.
- Kept from Balanced: the softness (one corner radius, 13 units at Regular), the
.585 full curve, two-storey a and g, hooked l, distinct I / l / 1.
- Changed from Balanced: vertical proportions (x-height 520, capitals 700,
ascender 744), the 1.025 horizontal factor (letters are drawn to width instead),
and all spacing, which is now shape-based with automatic kerning.
- 314 characters: keyboard symbols and composed Latin-1 / Latin Extended-A letters.
Not complete: `¤ ¦ § ¨ © ª ¬ ® ¯ ² ³ ´ µ ¶ ¸ ¹ º ¼ ½ ¾` and `ĸ IJ ij Ŀ ŀ ʼn Ŋ ŋ ſ` are not drawn.

The owner has not yet compared or approved it. Until then Balanced is the approved
direction and Refinement 01 the last reviewed drawing. See
[the study notes](studies/redraw/README.md) for limits.

## Evidence and boundaries (Refinement 01)

This pass has 94 encoded characters / 95 glyphs including .notdef: Latin letters,
digits, selected punctuation and nine precomposed accented letters. It adds no new
Expand Down
78 changes: 78 additions & 0 deletions noto/studies/redraw/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# SEIHouse Noto — Redraw 02 (candidate)

Owner brief: **a warmer version of Google Noto Sans**, as an original family. On
2026-11-12 the owner asked for SEIHouse Noto to be reimagined: more professional,
with its own flavour intact. This folder is that candidate. **Balanced (study B)
remains the approved direction** until the owner decides otherwise; nothing in
`../warmth/` is changed.

![Redraw 02 beside Refinement 01](proofs/redraw-compare.png)

[Enlarged letters](proofs/redraw-details.png) ·
[On dark](proofs/redraw-dark.png) ·
[Four weights](proofs/redraw-family.png) ·
[Phone width](proofs/redraw-mobile.png) ·
[Every glyph](proofs/redraw-glyphs.svg)

## What changed, and why

The earlier drawings expand one centreline by a constant 74 units. That is why they
read light, why joins clot, and why horizontals look heavier than verticals. Redraw 02
replaces that construction:

| | Refinement 01 | Redraw 02 |
|---|---|---|
| Stroke | One 74-unit line everywhere | Follows direction: 88 upright, 74 horizontal (Regular) |
| Joins | Arch meets stem at full weight | Arch and bowl taper to about half weight at the stem |
| Regular weight | Reads as a Light | Text weight, near Noto Sans Regular |
| Proportions | x-height 530, capitals 717, ascender 710 | x-height 520, capitals 700, ascender 744 |
| Spacing | Grouped sidebearings, 34 pairs | Shape-based sidebearings, automatic kerning |
| Weights | Regular | Light, Regular, Medium, Bold |
| Characters | 94 | 314 (keyboard symbols, most Latin-1 and Latin Extended-A; gaps listed below) |

## What stays (the SEIHouse flavour)

- Balanced's moderate softness: every outside corner is rounded by one radius
(13 units at Regular), at every weight.
- Balanced's full curve (the .585 bowl parameter) on every round letter.
- Two-storey a and g, hooked l, curved y tail, serifed I and flagged 1, so I / l / 1
stay distinct.
- Original construction. No outlines, metrics or kerning come from SEIHouse Sans,
Display, Google Noto or any other font. The Noto reference file is opened only
by the comparison page.

## How it is built

- `pen.py` — the drawing engine: a modulated ribbon around a centreline (thickness
from stroke direction, optional taper per node), straight bars, unions and one
corner-softening pass.
- `letters.py` — every drawing, plus the accent table. A weight is one number;
heavier weights are drawn slightly wider and fitted slightly closer.
- `spacing.py` — kerning from the outlines: each pair is adjusted until its
weighted gap matches "nn" / "HH", with a clearance floor. Accented letters
share their base's kerning, with exceptions where an accent meets an overhang.
- `build.py` — fonts, `manifest.json`, the glyph sheet, and the page's character list.

```sh
pip install -r requirements.txt
python noto/studies/redraw/build.py
python -m unittest tests.test_noto_redraw
```

## Scope and honest limits

Latin only. This is a design candidate, version 0.010, not a release.

- Bold and Light come from the same rules as Regular and have had less individual
attention; Bold counters in a, e, g and s are the first place to look.
- Coverage is not complete Latin-1 or Latin Extended-A. Not drawn yet:
`¤ ¦ § ¨ © ª ¬ ® ¯ ² ³ ´ µ ¶ ¸ ¹ º ¼ ½ ¾` and `ĸ IJ ij Ŀ ŀ ʼn Ŋ ŋ ſ`. The exact set is
in `manifest.json`; the comparison page reports any character it has to borrow.
- Accented letters are composed by rule and have not had native-reader review.
Decomposed (combining-mark) input is not supported yet.
- No italic, no Night grade, no hinting beyond alignment zones, and no native
iPhone / Windows rendering review yet.
- The stress-angle setting exists in the engine and is left at 0°: at this low
contrast a tilt was not visible in text.
- The public family name is still an open owner decision (handbook OD-01); the
fonts carry "SEIHouse Noto" as the working name.
Loading
Loading