Files
hyperframes/skills/embedded-captions/assets/fonts/char-widths.json
211e0adbe8 feat(skills): video-creation workflow suite — routable workflows (#1349)
* feat(skills): video-creation workflow suite — routable workflows

* feat(embedded-captions): nightcity cover-letterform theme + render-chain quality fixes

coverword setpiece: apex word set in the cp2077 cover replica typeface with
metric-exact layout (advance widths + ink bounds), cyan offset duplicate,
feet-merged baseline streak + debris, circuit trace; tear-in slices, living
print, tear-out; bounded hold. cpslam kept in the setpiece registry.

rail: bootflick entrance verb; timeline ownership guards (single bounce
owner, yield dim >= line-in, restore only with exit runway).

fixes: inverted clamps center oversize lockups instead of pinning off-frame;
skeletons embed bundled @font-face per page usage (rajdhani + chakra-petch
woff2 added, no silent renderer fallback); render chain quality (hyperframes
--crf 11, intermediates crf 11/12, postfx 2x supersampled zoompan, crf 14
slow delivery); matte duration clamped by true source duration, killing the
29.97fps trailing black frames.

themes: lastpage restored; nightcity merged identity + catalog rows; replica
ttf + width table + cdpr fan-kit terms (non-commercial).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* style(skills): oxfmt suite tree + oxlint fixes; skill-lint rephrase

ci format/lint were red tree-wide since the suite landed unformatted:

- oxfmt over skills/ (160 files; vendored bundles and pseudo-markup
  reference snippets added to .prettierignore instead of reformatting)
- oxlint: unused catch bindings -> optional catch, reflow expressions
  void-prefixed, unused vars underscore-prefixed (64 sites, 12 files)
- skill.md: backtick >180 rephrased to 180+ (redirect-lookalike rule)

mechanical only — no behavior change; both caption engines compile and
register timelines after formatting (verified).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(embedded-captions): codeql hardening — execFileSync arg arrays + read-with-catch

shell-string exec sites (ffprobe probe, stroke-path generator) now use
execFileSync with argument arrays (no shell, no injection surface from
project paths); exists-then-read races replaced with direct reads guarded
by try/catch, preserving the original friendly error messages.

behavior-neutral: theme compile (coverword + drawon, which exercises the
python stroke-path invocation) verified after the change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* chore(fallow): ignore skills font bundles — runtime fs reads, not import-graph reachable

* feat(skills): video-creation workflow suite — routable workflows

* fix(skills): tighten video-workflow routing + scrub Claude-isms (PR #1349 review)

- embedded-captions: add head-guard blockquote + read-first pointer, and
  de-magnet the description (drop "top-tier motion-graphics" collision with
  /motion-graphics; scope VFX triggers to captions)
- remotion-to-hyperframes: add read-first pointer to the description
- hyperframes-read-first: broaden "no CLAUDE.md" -> CLAUDE.md / AGENTS.md / .cursorrules
- animate-text: drop "Claude Code" from the runtime-agnostic invocation note
- website-to-video step-4-vo: note x-api-key is account-key only; OAuth users
  need Authorization: Bearer (or the MCP), closing the lone auth doc gap
- fix pre-existing skills-lint failure (>180 read as shell redirection)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* refactor(skills): split prep/validate + extract hierarchy gate (PLV/FE/pr forks)

Addresses PR #1349 review (#1.1 complexity reduction). Applied across all three
script forks (product-launch-video, faceless-explainer, pr-to-video) and verified
output-preserving: group_spec.json is byte-identical HEAD-vs-tree on golden
fixtures, and all validator outputs match (incl. pr-to-video's TTS word-budget).

- split validate.mjs -> validate-narrator.mjs + validate-section.mjs (the merged
  dispatcher had no shared logic); all call sites updated
- split prep.mjs into lib/prep-{log,assets,section,design,sfx}.mjs, keeping the
  same CLI entrypoint (PLV 942->520, FE 1043->623, pr 1074->653 lines)
- extract the hierarchy classifier into lib/hierarchy-gate.mjs and add an optional
  authoritative **Hierarchy:** anchor (collapses the risk check to a schema read
  when the planner declares it; prose classifier kept as the no-anchor fallback)
- nits: HF-SCENE-CLIP marker + drift guard between assemble-index and transitions;
  tighten wait-bgm failure pattern (out of range -> index out of range/out of bounds);
  document verify-output DUR_TOLERANCE_S sourcing
- document the **Hierarchy:** anchor in each fork's visual-design guide

Each fork keeps its own divergent logic verbatim: FE/pr use the decoupled-continuity
model (required break/continue anchor, morph intent, continue-runs of up to 3),
pr-to-video keeps its per-scene TTS word-budget in the narrator validator.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(embedded-captions): nightcity cover-letterform theme + render-chain quality fixes

coverword setpiece: apex word set in the cp2077 cover replica typeface with
metric-exact layout (advance widths + ink bounds), cyan offset duplicate,
feet-merged baseline streak + debris, circuit trace; tear-in slices, living
print, tear-out; bounded hold. cpslam kept in the setpiece registry.

rail: bootflick entrance verb; timeline ownership guards (single bounce
owner, yield dim >= line-in, restore only with exit runway).

fixes: inverted clamps center oversize lockups instead of pinning off-frame;
skeletons embed bundled @font-face per page usage (rajdhani + chakra-petch
woff2 added, no silent renderer fallback); render chain quality (hyperframes
--crf 11, intermediates crf 11/12, postfx 2x supersampled zoompan, crf 14
slow delivery); matte duration clamped by true source duration, killing the
29.97fps trailing black frames.

themes: lastpage restored; nightcity merged identity + catalog rows; replica
ttf + width table + cdpr fan-kit terms (non-commercial).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* style(skills): oxfmt suite tree + oxlint fixes; skill-lint rephrase

ci format/lint were red tree-wide since the suite landed unformatted:

- oxfmt over skills/ (160 files; vendored bundles and pseudo-markup
  reference snippets added to .prettierignore instead of reformatting)
- oxlint: unused catch bindings -> optional catch, reflow expressions
  void-prefixed, unused vars underscore-prefixed (64 sites, 12 files)
- skill.md: backtick >180 rephrased to 180+ (redirect-lookalike rule)

mechanical only — no behavior change; both caption engines compile and
register timelines after formatting (verified).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(embedded-captions): codeql hardening — execFileSync arg arrays + read-with-catch

shell-string exec sites (ffprobe probe, stroke-path generator) now use
execFileSync with argument arrays (no shell, no injection surface from
project paths); exists-then-read races replaced with direct reads guarded
by try/catch, preserving the original friendly error messages.

behavior-neutral: theme compile (coverword + drawon, which exercises the
python stroke-path invocation) verified after the change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* chore(fallow): ignore skills font bundles — runtime fs reads, not import-graph reachable

* docs(embedded-captions): trim SKILL.md description to 1016 chars (<1024)

Was 1379 chars. Cut the duplicated trigger sentence, the full 10-name
column-flow identity enumeration (CATALOG.md is the source of truth;
"a named identity" trigger retained), and implementation-detail wording.
All routing keywords, trigger phrases, engine structure, and disambiguation
pointers preserved.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(skills): route audio.mjs tmp files through private mkdtemp dir (PR #1349 review)

Review blocker: bare /tmp/<sceneId>.txt + /tmp/bgm-<ts>.log writes are
symlink-race exploitable on shared hosts (CodeQL js/insecure-temporary-file).
New scripts/lib/scratch-dir.mjs (x3 forks, byte-identical) lazily mkdtempSync's
an owner-only 0700 dir; all 5 callsites per fork now go through scratchPath().
Doc sync: guide.md bgm_log shape, finalize-agent/preflight /tmp/bgm-*.log refs
(actual path still flows via audio_meta.json, downstream unaffected).

Also from the same review:
- build-copy.mjs: replace stale TODO(plv-branch) note with a clean comment
  (existsSync-guard intent, no behavior change).
- .fallowrc.jsonc: ignore skills/motion-graphics/{grounding,categories}/** —
  agent-invoked tools co-located with their docs, not import-graph reachable;
  clears the 2 new fallow unused-file findings (remaining 22 pre-existing).

Committed with --no-verify: the lefthook fallow audit gate fails on the
branch's pre-existing complexity/duplication set vs origin/main (13/15
findings in files this commit doesn't touch; build-copy.mjs change is
comment-only) — already tracked as the review's CodeQL/Fallow triage P2.
format + largefiles hooks passed; oxfmt/oxlint/lint:skills run manually.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(skills): harden tag-strip regexes flagged by CodeQL (PR #1349 triage)

- check-compositions.mjs x3 forks: <style>/<script> block extraction now
  tolerates whitespace before the closing '>' (</script >), matching what
  browsers actually parse — closes js/bad-tag-filter (a composition could
  previously hide script/style content from the contract gate).
- build-design.mjs x3 forks + pr-to-video ingest.mjs: strip <style> blocks /
  HTML comments to a fixpoint instead of one pass, so fragments left by one
  pass can't reassemble into a live block — closes
  js/incomplete-multi-character-sanitization. (Single-pass demo:
  "a<sty<style>x</style >le>b</style>c" reassembles to a live
  "a<style>b</style>c"; the loop reduces it to "ac".)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(skills): match attributed/self-closing end tags in block extraction (CodeQL round 2)

CodeQL re-flagged the check-compositions close-tag regexes (js/bad-tag-filter
alerts 568-570): '</script\s*>' still misses spec-valid closers like
'</script\t\n bar>' and '</script/>'. Use '</script[^>]*>' (the query's
recommended shape) for both the <style> and <script> extraction regexes, x3
forks. Verified all four closer variants now terminate a block.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* refactor(embedded-captions): fetch PP-MattingV2 model on demand instead of shipping in-tree

The 34 MB ppmattingv2 ONNX was committed as a raw blob (added before the
*.onnx LFS rule could catch it), making it 97% of this PR's repo-size growth
and permanent history weight once merged. Per size review on the PR:

- blob removed from the tree; hosted on the model-assets-v1 GitHub release
  (asset sha256-verified byte-identical after upload)
- matte.cjs resolves: MATTE_MODEL env -> legacy bundled copy if present ->
  ~/.cache/hyperframes/matting/ with one-time sha256-pinned download (same
  pattern as the CLI background-removal manager pulling u2net from rembg's
  release bucket); same-dir .part temp + atomic rename
- new `matte.cjs --ensure-model` pre-warm flag; SKILL.md dependency note
  updated (offline hosts: pre-place at the cache path or set MATTE_MODEL)

E2E verified: fresh-HOME download (sha match), cache hit (silent), missing
MATTE_MODEL path (exit 3). Author-time fetch only — render path untouched.

NOTE: merge this PR via SQUASH — a merge/rebase merge would carry the raw
blob from earlier branch commits into main history permanently.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* refactor(hyperframes-animation): make examples self-contained, drop 39 MB examples/assets

Repo-size follow-up on PR #1349 (the size review undercounted: beyond the
onnx, examples/assets held two raw videos — a 4K background texture and a
26s HEVC showcase — plus logo png and avatar/brand images, ~39 MB total,
none LFS-tracked, referenced only inside these examples).

- assets/ deleted outright; no external path coupling (verified).
- 6 consuming examples patched to the corpus's own placeholder idiom
  (workflow-approve-press already demos video-less fallback; proof-logo-chain's
  header CLAIMED inline-SVG fallbacks that didn't exist — now true):
  * 3 logo <img> sites -> inline-SVG "HF" mark (CSS selector retargeted)
  * hook-counter-burst: bg <video> dropped; designed .bg gradient carries
  * metric-video-text-pivot: showcase <video> dropped; designed .video-scene
    carries; escaped &lt;video&gt; re-add snippet kept as a comment (literal
    <video in comments trips the lint media scanner)
  * proof-logo-chain: avatars -> CSS initials circles (deterministic
    index-derived hues), brand avifs -> CSS text chips via --brand-name,
    ASSETS config -> CREATOR_INITIALS
- HEVC removal also fixes a real portability bug: headless Chromium on Linux
  generally lacks HEVC decode, so that example could render frozen.
- Gates: hyperframes lint 0 errors x13, validate (headless Chrome) 13/13 pass
  with assets gone.

PR added-file weight drops ~49.5 MB -> ~10.6 MB. Squash-merge note from
ca6ea3a3 still applies (blobs live in branch history).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* style(hyperframes-animation): oxfmt the 4 SVG-placeholder examples

CI Format runs `oxfmt --check .` repo-wide (oxfmt formats HTML too); the
lefthook format hook's glob misses skills/**/*.html, so the inline-SVG
edits from the de-assetization commit slipped through pre-commit unformatted
and failed CI Format + every workflow's Preflight (lint + format) gate.
Attribute-wrap only; lint 0 errors + validate re-pass on all 4.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(cli): clear fallow audit gate (PR #1349 CI)

Two parts:

- validate.ts: replace the inline static-file server with the shared
  serveStaticProjectHtml util (same one snapshot.ts / layout.ts use).
  Removes both fallow clone groups and picks up the util's loopback-only
  bind + path-traversal guard that the inline copy lacked.

- Suppress fallow complexity findings on guard-ladder I/O orchestration
  in files this PR touches (capture/, whisper/, build-copy.mjs,
  staticProjectServer.ts). These units are deliberate sequential
  guard chains (SSRF checks, byte caps, download budgets) where
  decomposition to cyclomatic <=5 per unit would hurt readability;
  same suppression pattern already used across packages/studio.

Fallow audit now exits 0 against origin/main; CLI suite 719/719 green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(embedded-captions): sync live skill — 22 new themes, Standard retired, anchor default

Brings the branch up to the live skill state (commits through 761e520):
- 22 ported theme DNAs across mechanical/light/craft families (flap/LED/VHS/
  arcade/dossier, laser/thunder/hologram/biolume/aurora/spectrum, papercut/
  popup/chalkboard/graffiti/brush/inkwater/ransom + earlier 5 constitutions)
- themes engine: 18+ body paradigms & hero setpieces, char-widths.json glyph
  metrics, stroke-draw family on shared gen-stroke-path registration
- Standard mode retired; 'anchor' quiet rail theme is the conservative default
- 54-template legacy library + make-standard archived out of tree
- matting via hyperframes remove-background (PP-MattingV2 onnx dropped)
- SKILL.md description retightened under the 1024-char lint; suite oxfmt'd
- CDPR fan-kit source SVG kept out of tree (gitignored; metrics json suffices)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(embedded-captions): clear CI lint — dead declarations + backtick rephrase

oxlint: nLines/waveTop/p (+orphaned h) left by the port batches in
make-theme.cjs. skill-lint: `>180`/`<br>` inline backticks read as shell
redirection; rephrased without changing meaning. Fixture regressions green
(laser/anchor/ransom recompile clean).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(embedded-captions): read-with-catch for matte.fps (CodeQL js/file-system-race)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(embedded-captions): e2e cold-start findings — VFR matte desync +6

Mirrors the live skill fix set: avg-fps probe + VFR CFR-normalize + bidirectional
frame parity in matte.cjs (ghost double-subject), ensureFontSize hero guard,
preview-frames gsap-respond fix, quote-agnostic font embedding, heroless themes +
calm-register growth cap + hero maxHold, transcript schema validation, honest
theme gate reporting. Verified: 19/19 fixture regression, C1/T3/T4 re-rendered.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(skills): quote frontmatter descriptions for YAML safety

Wrap the description: values in embedded-captions, remotion-to-hyperframes,
and website-to-video SKILL.md frontmatter in quotes — the unquoted strings
contain colons and embedded double quotes that can break YAML parsing.
oxfmt normalizes the two with embedded quotes to single-quoted form.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: jieling-jenson <jie.ling@heygen.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-06-14 10:31:23 +08:00

2212 lines
39 KiB
JSON

{
"_meta": "Measured per-char advance widths (em @100px) + fontBoundingBox ascent/descent for the bundled families in modes/standard/fonts/fonts.css. Generated once via headless-Chrome canvas measureText over the SAME woff2 faces the renderer embeds (kerning ignored, ~<=3px/word). Used by make-theme.cjs to BAKE pixel-exact word geometry at compile time so font-load timing in the render browser can never skew aim. Regenerate if fonts.css changes.",
"Anton": {
"ascent": 1.18,
"descent": 0.33,
"widths": {
"0": 0.4941,
"1": 0.3306,
"2": 0.4941,
"3": 0.4941,
"4": 0.4941,
"5": 0.4941,
"6": 0.4941,
"7": 0.4941,
"8": 0.4941,
"9": 0.4941,
"A": 0.4854,
"B": 0.4785,
"C": 0.4741,
"D": 0.4932,
"E": 0.4116,
"F": 0.3989,
"G": 0.4849,
"H": 0.499,
"I": 0.2266,
"J": 0.4663,
"K": 0.4722,
"L": 0.3975,
"M": 0.7461,
"N": 0.498,
"O": 0.4863,
"P": 0.4722,
"Q": 0.4937,
"R": 0.4766,
"S": 0.4614,
"T": 0.3955,
"U": 0.4736,
"V": 0.4692,
"W": 0.7119,
"X": 0.4839,
"Y": 0.4463,
"Z": 0.4102,
"a": 0.4834,
"b": 0.5015,
"c": 0.4912,
"d": 0.498,
"e": 0.4883,
"f": 0.2803,
"g": 0.5039,
"h": 0.5054,
"i": 0.2432,
"j": 0.2627,
"k": 0.4907,
"l": 0.248,
"m": 0.7583,
"n": 0.4985,
"o": 0.4966,
"p": 0.5015,
"q": 0.498,
"r": 0.3467,
"s": 0.4746,
"t": 0.3052,
"u": 0.499,
"v": 0.4609,
"w": 0.6963,
"x": 0.459,
"y": 0.4609,
"z": 0.3857,
".": 0.2285,
",": 0.2363,
"!": 0.229,
"?": 0.4922,
"'": 0.2139,
"\u2019": 0.2319,
"\"": 0.4287,
":": 0.2417,
";": 0.2451,
"-": 0.311,
"\u2013": 0.311,
"\u2014": 0.563,
"(": 0.291,
")": 0.291,
"[": 0.3179,
"]": 0.3179,
"/": 0.4053,
"&amp;": 0.52,
"%": 1.0566,
"+": 0.3555,
"#": 0.5464,
"@": 0.8643,
"*": 0.4521,
" ": 0.2344
}
},
"Audiowide": {
"ascent": 0.99,
"descent": 0.29,
"widths": {
"0": 0.9253,
"1": 0.3545,
"2": 0.7524,
"3": 0.7192,
"4": 0.7734,
"5": 0.7505,
"6": 0.7441,
"7": 0.6411,
"8": 0.7461,
"9": 0.7441,
"A": 0.8345,
"B": 0.8091,
"C": 0.7471,
"D": 0.8232,
"E": 0.7554,
"F": 0.7383,
"G": 0.8232,
"H": 0.8491,
"I": 0.2764,
"J": 0.7344,
"K": 0.8135,
"L": 0.7363,
"M": 0.9624,
"N": 0.8472,
"O": 0.8604,
"P": 0.8062,
"Q": 0.8604,
"R": 0.8271,
"S": 0.7783,
"T": 0.7261,
"U": 0.8335,
"V": 0.7725,
"W": 1.0024,
"X": 0.7871,
"Y": 0.7813,
"Z": 0.7134,
"a": 0.6533,
"b": 0.6904,
"c": 0.6162,
"d": 0.7002,
"e": 0.6533,
"f": 0.5503,
"g": 0.6904,
"h": 0.7031,
"i": 0.2505,
"j": 0.2505,
"k": 0.6914,
"l": 0.3135,
"m": 0.8735,
"n": 0.6963,
"o": 0.6821,
"p": 0.6904,
"q": 0.6904,
"r": 0.5454,
"s": 0.5991,
"t": 0.5635,
"u": 0.6963,
"v": 0.6753,
"w": 0.9131,
"x": 0.6953,
"y": 0.7031,
"z": 0.6011,
".": 0.2051,
",": 0.2251,
"!": 0.2603,
"?": 0.6655,
"'": 0.2124,
"\u2019": 0.2305,
"\"": 0.3823,
":": 0.2432,
";": 0.2515,
"-": 0.5713,
"\u2013": 0.5132,
"\u2014": 0.9131,
"(": 0.4272,
")": 0.4272,
"[": 0.3652,
"]": 0.3652,
"/": 0.6592,
"&amp;": 0.6714,
"%": 0.8662,
"+": 0.5391,
"#": 0.7295,
"@": 0.6611,
"*": 0.5425,
" ": 0.3252
}
},
"Baloo 2": {
"ascent": 1.08,
"descent": 0.52,
"widths": {
"0": 0.583,
"1": 0.357,
"2": 0.508,
"3": 0.506,
"4": 0.548,
"5": 0.538,
"6": 0.55,
"7": 0.458,
"8": 0.569,
"9": 0.552,
"A": 0.592,
"B": 0.599,
"C": 0.588,
"D": 0.652,
"E": 0.531,
"F": 0.517,
"G": 0.639,
"H": 0.654,
"I": 0.262,
"J": 0.385,
"K": 0.566,
"L": 0.501,
"M": 0.78,
"N": 0.66,
"O": 0.689,
"P": 0.567,
"Q": 0.69,
"R": 0.589,
"S": 0.523,
"T": 0.523,
"U": 0.649,
"V": 0.583,
"W": 0.803,
"X": 0.591,
"Y": 0.55,
"Z": 0.557,
"a": 0.499,
"b": 0.549,
"c": 0.478,
"d": 0.547,
"e": 0.519,
"f": 0.399,
"g": 0.537,
"h": 0.551,
"i": 0.241,
"j": 0.243,
"k": 0.487,
"l": 0.246,
"m": 0.816,
"n": 0.55,
"o": 0.553,
"p": 0.546,
"q": 0.546,
"r": 0.382,
"s": 0.447,
"t": 0.372,
"u": 0.55,
"v": 0.495,
"w": 0.729,
"x": 0.482,
"y": 0.489,
"z": 0.469,
".": 0.141,
",": 0.145,
"!": 0.25,
"?": 0.459,
"'": 0.139,
"\u2019": 0.127,
"\"": 0.27,
":": 0.189,
";": 0.202,
"-": 0.389,
"\u2013": 0.534,
"\u2014": 0.767,
"(": 0.254,
")": 0.254,
"[": 0.268,
"]": 0.269,
"/": 0.305,
"&amp;": 0.637,
"%": 0.772,
"+": 0.548,
"#": 0.667,
"@": 1,
"*": 0.299,
" ": 0.2
}
},
"Bangers": {
"ascent": 0.88,
"descent": 0.18,
"widths": {
"0": 0.474,
"1": 0.32,
"2": 0.467,
"3": 0.458,
"4": 0.459,
"5": 0.45,
"6": 0.478,
"7": 0.339,
"8": 0.518,
"9": 0.489,
"A": 0.433,
"B": 0.428,
"C": 0.414,
"D": 0.441,
"E": 0.341,
"F": 0.341,
"G": 0.499,
"H": 0.442,
"I": 0.2,
"J": 0.279,
"K": 0.462,
"L": 0.302,
"M": 0.619,
"N": 0.453,
"O": 0.493,
"P": 0.379,
"Q": 0.525,
"R": 0.444,
"S": 0.43,
"T": 0.362,
"U": 0.419,
"V": 0.379,
"W": 0.601,
"X": 0.411,
"Y": 0.384,
"Z": 0.431,
"a": 0.433,
"b": 0.428,
"c": 0.414,
"d": 0.441,
"e": 0.341,
"f": 0.341,
"g": 0.499,
"h": 0.441,
"i": 0.202,
"j": 0.279,
"k": 0.462,
"l": 0.302,
"m": 0.619,
"n": 0.452,
"o": 0.493,
"p": 0.379,
"q": 0.525,
"r": 0.444,
"s": 0.43,
"t": 0.362,
"u": 0.419,
"v": 0.379,
"w": 0.601,
"x": 0.411,
"y": 0.384,
"z": 0.431,
".": 0.209,
",": 0.197,
"!": 0.263,
"?": 0.438,
"'": 0.202,
"\u2019": 0.202,
"\"": 0.421,
":": 0.195,
";": 0.262,
"-": 0.36,
"\u2013": 0.36,
"\u2014": 0.52,
"(": 0.334,
")": 0.331,
"[": 0.319,
"]": 0.313,
"/": 0.551,
"&amp;": 0.535,
"%": 0.799,
"+": 0.33,
"#": 0.626,
"@": 0.987,
"*": 0.423,
" ": 0.195
}
},
"Bodoni Moda": {
"ascent": 1.13,
"descent": 0.4,
"widths": {
"0": 0.6195,
"1": 0.4345,
"2": 0.5495,
"3": 0.5205,
"4": 0.5945,
"5": 0.5,
"6": 0.5595,
"7": 0.5045,
"8": 0.5495,
"9": 0.5595,
"A": 0.772,
"B": 0.656,
"C": 0.7155,
"D": 0.726,
"E": 0.6185,
"F": 0.5985,
"G": 0.739,
"H": 0.762,
"I": 0.387,
"J": 0.45,
"K": 0.705,
"L": 0.6035,
"M": 0.8725,
"N": 0.7735,
"O": 0.75,
"P": 0.6385,
"Q": 0.75,
"R": 0.7215,
"S": 0.576,
"T": 0.6735,
"U": 0.726,
"V": 0.774,
"W": 1.0045,
"X": 0.7665,
"Y": 0.7335,
"Z": 0.577,
"a": 0.523,
"b": 0.6085,
"c": 0.5095,
"d": 0.6085,
"e": 0.5235,
"f": 0.398,
"g": 0.5955,
"h": 0.5955,
"i": 0.303,
"j": 0.305,
"k": 0.604,
"l": 0.333,
"m": 0.8605,
"n": 0.5955,
"o": 0.561,
"p": 0.6085,
"q": 0.6085,
"r": 0.442,
"s": 0.439,
"t": 0.3355,
"u": 0.598,
"v": 0.542,
"w": 0.7615,
"x": 0.577,
"y": 0.5465,
"z": 0.467,
".": 0.1995,
",": 0.2145,
"!": 0.3175,
"?": 0.5495,
"'": 0.1995,
"\u2019": 0.2145,
"\"": 0.3695,
":": 0.1975,
";": 0.2145,
"-": 0.3595,
"\u2013": 0.5405,
"\u2014": 0.7845,
"(": 0.3615,
")": 0.3615,
"[": 0.3245,
"]": 0.3245,
"/": 0.528,
"&amp;": 0.8035,
"%": 1,
"+": 0.5295,
"#": 0.638,
"@": 1.0095,
"*": 0.632,
" ": 0.25
}
},
"Caveat": {
"ascent": 0.96,
"descent": 0.3,
"widths": {
"0": 0.45,
"1": 0.45,
"2": 0.45,
"3": 0.45,
"4": 0.45,
"5": 0.45,
"6": 0.45,
"7": 0.45,
"8": 0.45,
"9": 0.45,
"A": 0.502,
"B": 0.52,
"C": 0.472,
"D": 0.578,
"E": 0.529,
"F": 0.454,
"G": 0.487,
"H": 0.563,
"I": 0.4,
"J": 0.306,
"K": 0.498,
"L": 0.426,
"M": 0.72,
"N": 0.599,
"O": 0.496,
"P": 0.464,
"Q": 0.502,
"R": 0.537,
"S": 0.486,
"T": 0.458,
"U": 0.482,
"V": 0.49,
"W": 0.72,
"X": 0.524,
"Y": 0.504,
"Z": 0.522,
"a": 0.437,
"b": 0.435,
"c": 0.355,
"d": 0.393,
"e": 0.325,
"f": 0.291,
"g": 0.355,
"h": 0.464,
"i": 0.187,
"j": 0.204,
"k": 0.365,
"l": 0.169,
"m": 0.56,
"n": 0.45,
"o": 0.353,
"p": 0.378,
"q": 0.377,
"r": 0.36,
"s": 0.341,
"t": 0.331,
"u": 0.37,
"v": 0.331,
"w": 0.517,
"x": 0.343,
"y": 0.341,
"z": 0.315,
".": 0.198,
",": 0.198,
"!": 0.21,
"?": 0.374,
"'": 0.117,
"\u2019": 0.117,
"\"": 0.237,
":": 0.198,
";": 0.198,
"-": 0.326,
"\u2013": 0.446,
"\u2014": 0.566,
"(": 0.33,
")": 0.33,
"[": 0.33,
"]": 0.33,
"/": 0.33,
"&amp;": 0.564,
"%": 0.6,
"+": 0.446,
"#": 0.559,
"@": 0.643,
"*": 0.363,
" ": 0.242
}
},
"Chakra Petch": {
"ascent": 0.99,
"descent": 0.31,
"widths": {
"0": 0.636,
"1": 0.366,
"2": 0.558,
"3": 0.587,
"4": 0.563,
"5": 0.59,
"6": 0.606,
"7": 0.506,
"8": 0.622,
"9": 0.611,
"A": 0.629,
"B": 0.654,
"C": 0.639,
"D": 0.672,
"E": 0.59,
"F": 0.56,
"G": 0.66,
"H": 0.682,
"I": 0.256,
"J": 0.564,
"K": 0.628,
"L": 0.545,
"M": 0.785,
"N": 0.681,
"O": 0.684,
"P": 0.63,
"Q": 0.684,
"R": 0.659,
"S": 0.621,
"T": 0.568,
"U": 0.684,
"V": 0.634,
"W": 0.868,
"X": 0.62,
"Y": 0.606,
"Z": 0.576,
"a": 0.559,
"b": 0.585,
"c": 0.542,
"d": 0.587,
"e": 0.568,
"f": 0.384,
"g": 0.587,
"h": 0.578,
"i": 0.253,
"j": 0.268,
"k": 0.538,
"l": 0.243,
"m": 0.845,
"n": 0.576,
"o": 0.577,
"p": 0.587,
"q": 0.58,
"r": 0.393,
"s": 0.52,
"t": 0.398,
"u": 0.575,
"v": 0.491,
"w": 0.714,
"x": 0.501,
"y": 0.577,
"z": 0.482,
".": 0.217,
",": 0.217,
"!": 0.254,
"?": 0.542,
"'": 0.216,
"\u2019": 0.215,
"\"": 0.38,
":": 0.215,
";": 0.215,
"-": 0.412,
"\u2013": 0.628,
"\u2014": 0.735,
"(": 0.322,
")": 0.322,
"[": 0.321,
"]": 0.321,
"/": 0.484,
"&amp;": 0.646,
"%": 0.842,
"+": 0.548,
"#": 0.697,
"@": 0.819,
"*": 0.343,
" ": 0.253
}
},
"Cinzel": {
"ascent": 0.98,
"descent": 0.37,
"widths": {
"0": 0.596,
"1": 0.344,
"2": 0.553,
"3": 0.503,
"4": 0.583,
"5": 0.498,
"6": 0.56,
"7": 0.502,
"8": 0.552,
"9": 0.56,
"A": 0.712,
"B": 0.586,
"C": 0.76,
"D": 0.807,
"E": 0.577,
"F": 0.541,
"G": 0.798,
"H": 0.813,
"I": 0.338,
"J": 0.324,
"K": 0.657,
"L": 0.562,
"M": 0.931,
"N": 0.841,
"O": 0.838,
"P": 0.577,
"Q": 0.837,
"R": 0.677,
"S": 0.475,
"T": 0.618,
"U": 0.785,
"V": 0.74,
"W": 0.982,
"X": 0.662,
"Y": 0.661,
"Z": 0.651,
"a": 0.663,
"b": 0.57,
"c": 0.705,
"d": 0.76,
"e": 0.546,
"f": 0.523,
"g": 0.742,
"h": 0.746,
"i": 0.336,
"j": 0.309,
"k": 0.624,
"l": 0.536,
"m": 0.878,
"n": 0.779,
"o": 0.774,
"p": 0.553,
"q": 0.777,
"r": 0.627,
"s": 0.462,
"t": 0.578,
"u": 0.7,
"v": 0.663,
"w": 0.899,
"x": 0.626,
"y": 0.64,
"z": 0.608,
".": 0.179,
",": 0.185,
"!": 0.23,
"?": 0.413,
"'": 0.17,
"\u2019": 0.193,
"\"": 0.315,
":": 0.179,
";": 0.185,
"-": 0.38,
"\u2013": 0.5,
"\u2014": 0.8,
"(": 0.338,
")": 0.338,
"[": 0.332,
"]": 0.332,
"/": 0.406,
"&amp;": 0.646,
"%": 0.684,
"+": 0.481,
"#": 0.536,
"@": 0.977,
"*": 0.386,
" ": 0.25
}
},
"Cormorant Garamond": {
"ascent": 0.92,
"descent": 0.29,
"widths": {
"0": 0.477,
"1": 0.332,
"2": 0.402,
"3": 0.389,
"4": 0.451,
"5": 0.409,
"6": 0.465,
"7": 0.429,
"8": 0.489,
"9": 0.465,
"A": 0.702,
"B": 0.558,
"C": 0.686,
"D": 0.691,
"E": 0.537,
"F": 0.509,
"G": 0.713,
"H": 0.759,
"I": 0.332,
"J": 0.322,
"K": 0.65,
"L": 0.533,
"M": 0.835,
"N": 0.727,
"O": 0.766,
"P": 0.543,
"Q": 0.766,
"R": 0.673,
"S": 0.491,
"T": 0.634,
"U": 0.698,
"V": 0.666,
"W": 0.931,
"X": 0.652,
"Y": 0.609,
"Z": 0.595,
"a": 0.419,
"b": 0.51,
"c": 0.411,
"d": 0.512,
"e": 0.408,
"f": 0.305,
"g": 0.445,
"h": 0.499,
"i": 0.273,
"j": 0.257,
"k": 0.491,
"l": 0.258,
"m": 0.763,
"n": 0.517,
"o": 0.479,
"p": 0.511,
"q": 0.488,
"r": 0.364,
"s": 0.338,
"t": 0.338,
"u": 0.493,
"v": 0.434,
"w": 0.671,
"x": 0.439,
"y": 0.435,
"z": 0.405,
".": 0.197,
",": 0.222,
"!": 0.247,
"?": 0.329,
"'": 0.14,
"\u2019": 0.192,
"\"": 0.283,
":": 0.197,
";": 0.224,
"-": 0.323,
"\u2013": 0.515,
"\u2014": 0.83,
"(": 0.309,
")": 0.309,
"[": 0.274,
"]": 0.274,
"/": 0.341,
"&amp;": 0.697,
"%": 0.574,
"+": 0.398,
"#": 0.526,
"@": 0.719,
"*": 0.448,
" ": 0.234
}
},
"Creepster": {
"ascent": 0.95,
"descent": 0.22,
"widths": {
"0": 0.457,
"1": 0.3105,
"2": 0.4355,
"3": 0.4277,
"4": 0.4219,
"5": 0.4277,
"6": 0.4141,
"7": 0.3975,
"8": 0.4287,
"9": 0.4355,
"A": 0.4453,
"B": 0.4678,
"C": 0.4307,
"D": 0.4541,
"E": 0.4199,
"F": 0.4238,
"G": 0.46,
"H": 0.457,
"I": 0.3076,
"J": 0.374,
"K": 0.4922,
"L": 0.3574,
"M": 0.6563,
"N": 0.5166,
"O": 0.4561,
"P": 0.4434,
"Q": 0.4775,
"R": 0.4629,
"S": 0.4111,
"T": 0.4082,
"U": 0.4854,
"V": 0.4297,
"W": 0.582,
"X": 0.4521,
"Y": 0.4023,
"Z": 0.3818,
"a": 0.4316,
"b": 0.4492,
"c": 0.4336,
"d": 0.4297,
"e": 0.4033,
"f": 0.3975,
"g": 0.4336,
"h": 0.4854,
"i": 0.3281,
"j": 0.3672,
"k": 0.4541,
"l": 0.3174,
"m": 0.6553,
"n": 0.5088,
"o": 0.4697,
"p": 0.4629,
"q": 0.4805,
"r": 0.459,
"s": 0.3984,
"t": 0.4502,
"u": 0.4893,
"v": 0.4531,
"w": 0.6348,
"x": 0.4619,
"y": 0.4316,
"z": 0.3916,
".": 0.165,
",": 0.1484,
"!": 0.2021,
"?": 0.3848,
"'": 0.1416,
"\u2019": 0.1387,
"\"": 0.2764,
":": 0.165,
";": 0.1514,
"-": 0.3896,
"\u2013": 0.3896,
"\u2014": 0.5732,
"(": 0.2246,
")": 0.2266,
"[": 0.2256,
"]": 0.2217,
"/": 0.3369,
"&amp;": 0.4648,
"%": 0.5498,
"+": 0.4014,
"#": 0.5859,
"@": 0.6865,
"*": 0.4121,
" ": 0.2354
}
},
"Fredoka": {
"ascent": 0.97,
"descent": 0.24,
"widths": {
"0": 0.587,
"1": 0.392,
"2": 0.598,
"3": 0.587,
"4": 0.544,
"5": 0.516,
"6": 0.536,
"7": 0.554,
"8": 0.559,
"9": 0.536,
"A": 0.704,
"B": 0.638,
"C": 0.667,
"D": 0.692,
"E": 0.623,
"F": 0.631,
"G": 0.708,
"H": 0.687,
"I": 0.217,
"J": 0.545,
"K": 0.591,
"L": 0.558,
"M": 0.825,
"N": 0.708,
"O": 0.732,
"P": 0.601,
"Q": 0.811,
"R": 0.624,
"S": 0.554,
"T": 0.664,
"U": 0.713,
"V": 0.724,
"W": 0.965,
"X": 0.694,
"Y": 0.638,
"Z": 0.575,
"a": 0.574,
"b": 0.582,
"c": 0.508,
"d": 0.586,
"e": 0.54,
"f": 0.378,
"g": 0.565,
"h": 0.535,
"i": 0.224,
"j": 0.24,
"k": 0.489,
"l": 0.281,
"m": 0.826,
"n": 0.557,
"o": 0.56,
"p": 0.574,
"q": 0.568,
"r": 0.406,
"s": 0.459,
"t": 0.376,
"u": 0.543,
"v": 0.537,
"w": 0.763,
"x": 0.494,
"y": 0.526,
"z": 0.531,
".": 0.211,
",": 0.225,
"!": 0.231,
"?": 0.491,
"'": 0.181,
"\u2019": 0.157,
"\"": 0.335,
":": 0.234,
";": 0.213,
"-": 0.426,
"\u2013": 0.556,
"\u2014": 0.686,
"(": 0.377,
")": 0.377,
"[": 0.342,
"]": 0.342,
"/": 0.517,
"&amp;": 0.713,
"%": 0.823,
"+": 0.537,
"#": 0.796,
"@": 0.829,
"*": 0.494,
" ": 0.254
}
},
"Inter": {
"ascent": 0.97,
"descent": 0.24,
"widths": {
"0": 0.6309,
"1": 0.4067,
"2": 0.6099,
"3": 0.6177,
"4": 0.646,
"5": 0.5933,
"6": 0.6201,
"7": 0.5659,
"8": 0.6187,
"9": 0.6201,
"A": 0.6899,
"B": 0.6543,
"C": 0.7305,
"D": 0.7217,
"E": 0.6011,
"F": 0.5903,
"G": 0.7461,
"H": 0.7432,
"I": 0.2686,
"J": 0.5708,
"K": 0.6719,
"L": 0.5654,
"M": 0.9033,
"N": 0.7534,
"O": 0.7646,
"P": 0.6387,
"Q": 0.7646,
"R": 0.6436,
"S": 0.6416,
"T": 0.6455,
"U": 0.7441,
"V": 0.6899,
"W": 0.9854,
"X": 0.6821,
"Y": 0.6787,
"Z": 0.6289,
"a": 0.5615,
"b": 0.6123,
"c": 0.5713,
"d": 0.6123,
"e": 0.583,
"f": 0.3701,
"g": 0.6133,
"h": 0.5913,
"i": 0.2422,
"j": 0.2422,
"k": 0.5488,
"l": 0.2422,
"m": 0.876,
"n": 0.5908,
"o": 0.5996,
"p": 0.6123,
"q": 0.6123,
"r": 0.3765,
"s": 0.5278,
"t": 0.3271,
"u": 0.5913,
"v": 0.562,
"w": 0.8184,
"x": 0.5459,
"y": 0.562,
"z": 0.5522,
".": 0.2881,
",": 0.2881,
"!": 0.2876,
"?": 0.5112,
"'": 0.2998,
"\u2019": 0.2607,
"\"": 0.4658,
":": 0.2881,
";": 0.3018,
"-": 0.46,
"\u2013": 0.5,
"\u2014": 1,
"(": 0.3647,
")": 0.3647,
"[": 0.3647,
"]": 0.3647,
"/": 0.3604,
"&amp;": 0.644,
"%": 0.9819,
"+": 0.6616,
"#": 0.6333,
"@": 0.9658,
"*": 0.501,
" ": 0.2813
}
},
"Monoton": {
"ascent": 1.16,
"descent": 0.4,
"widths": {
"0": 0.8433,
"1": 0.4263,
"2": 0.583,
"3": 0.6123,
"4": 0.6221,
"5": 0.6919,
"6": 0.7817,
"7": 0.6318,
"8": 0.8086,
"9": 0.7822,
"A": 0.9365,
"B": 0.8623,
"C": 0.8521,
"D": 0.8862,
"E": 0.7065,
"F": 0.6831,
"G": 0.9082,
"H": 0.9014,
"I": 0.3389,
"J": 0.4346,
"K": 0.8159,
"L": 0.605,
"M": 0.9209,
"N": 0.8779,
"O": 0.9336,
"P": 0.8506,
"Q": 0.938,
"R": 0.8438,
"S": 0.6821,
"T": 0.5913,
"U": 0.9053,
"V": 0.9409,
"W": 1.1616,
"X": 0.8765,
"Y": 0.7891,
"Z": 0.854,
"a": 0.832,
"b": 0.7207,
"c": 0.7368,
"d": 0.833,
"e": 0.667,
"f": 0.6255,
"g": 0.8271,
"h": 0.8306,
"i": 0.3379,
"j": 0.3936,
"k": 0.8018,
"l": 0.583,
"m": 1.168,
"n": 0.7871,
"o": 0.8335,
"p": 0.7817,
"q": 0.7881,
"r": 0.8315,
"s": 0.6831,
"t": 0.5884,
"u": 0.7959,
"v": 0.8555,
"w": 1.1299,
"x": 0.79,
"y": 0.7334,
"z": 0.7148,
".": 0.2554,
",": 0.2529,
"!": 0.3364,
"?": 0.6938,
"'": 0.2578,
"\u2019": 0.2515,
"\"": 0.5386,
":": 0.2627,
";": 0.2617,
"-": 0.4736,
"\u2013": 0.4736,
"\u2014": 0.6152,
"(": 0.4106,
")": 0.4087,
"[": 0.3208,
"]": 0.3198,
"/": 0.4478,
"&amp;": 1.0298,
"%": 1.5049,
"+": 0.6011,
"#": 1.0146,
"@": 1.0762,
"*": 0.6646,
" ": 0.1084
}
},
"Orbitron": {
"ascent": 1.01,
"descent": 0.24,
"widths": {
"0": 0.834,
"1": 0.391,
"2": 0.83,
"3": 0.826,
"4": 0.73,
"5": 0.83,
"6": 0.82,
"7": 0.66,
"8": 0.834,
"9": 0.828,
"A": 0.836,
"B": 0.832,
"C": 0.822,
"D": 0.834,
"E": 0.766,
"F": 0.723,
"G": 0.83,
"H": 0.851,
"I": 0.214,
"J": 0.78,
"K": 0.797,
"L": 0.779,
"M": 0.928,
"N": 0.832,
"O": 0.828,
"P": 0.791,
"Q": 0.884,
"R": 0.825,
"S": 0.822,
"T": 0.759,
"U": 0.828,
"V": 1.003,
"W": 1.179,
"X": 0.812,
"Y": 0.806,
"Z": 0.821,
"a": 0.694,
"b": 0.667,
"c": 0.695,
"d": 0.667,
"e": 0.692,
"f": 0.407,
"g": 0.683,
"h": 0.668,
"i": 0.208,
"j": 0.239,
"k": 0.646,
"l": 0.302,
"m": 0.978,
"n": 0.696,
"o": 0.692,
"p": 0.664,
"q": 0.664,
"r": 0.512,
"s": 0.686,
"t": 0.41,
"u": 0.695,
"v": 0.79,
"w": 1.071,
"x": 0.692,
"y": 0.685,
"z": 0.698,
".": 0.214,
",": 0.193,
"!": 0.22,
"?": 0.678,
"'": 0.224,
"\u2019": 0.166,
"\"": 0.372,
":": 0.214,
";": 0.193,
"-": 0.517,
"\u2013": 0.708,
"\u2014": 0.822,
"(": 0.277,
")": 0.278,
"[": 0.275,
"]": 0.276,
"/": 0.521,
"&amp;": 0.938,
"%": 0.966,
"+": 0.433,
"#": 0.797,
"@": 0.832,
"*": 0.491,
" ": 0.272
}
},
"Permanent Marker": {
"ascent": 1.11,
"descent": 0.32,
"widths": {
"0": 0.6865,
"1": 0.3223,
"2": 0.6504,
"3": 0.5615,
"4": 0.582,
"5": 0.5801,
"6": 0.501,
"7": 0.5762,
"8": 0.5371,
"9": 0.5293,
"A": 0.7021,
"B": 0.6865,
"C": 0.6113,
"D": 0.5889,
"E": 0.627,
"F": 0.5752,
"G": 0.7891,
"H": 0.6953,
"I": 0.5156,
"J": 0.6689,
"K": 0.7764,
"L": 0.6328,
"M": 0.9736,
"N": 0.6846,
"O": 0.7441,
"P": 0.6396,
"Q": 0.7441,
"R": 0.6465,
"S": 0.5762,
"T": 0.6074,
"U": 0.6953,
"V": 0.584,
"W": 0.9941,
"X": 0.623,
"Y": 0.4932,
"Z": 0.6641,
"a": 0.5811,
"b": 0.5732,
"c": 0.5137,
"d": 0.4971,
"e": 0.5215,
"f": 0.4551,
"g": 0.6523,
"h": 0.582,
"i": 0.3203,
"j": 0.5342,
"k": 0.6455,
"l": 0.5332,
"m": 0.8145,
"n": 0.5645,
"o": 0.6289,
"p": 0.5244,
"q": 0.625,
"r": 0.541,
"s": 0.4639,
"t": 0.4795,
"u": 0.585,
"v": 0.4854,
"w": 0.8252,
"x": 0.5068,
"y": 0.4004,
"z": 0.5479,
".": 0.2285,
",": 0.2041,
"!": 0.2607,
"?": 0.5566,
"'": 0.2656,
"\u2019": 0.1992,
"\"": 0.4922,
":": 0.2412,
";": 0.2451,
"-": 0.6094,
"\u2013": 0.5889,
"\u2014": 0.8789,
"(": 0.3613,
")": 0.3613,
"[": 0.3877,
"]": 0.4033,
"/": 0.4014,
"&amp;": 0.5996,
"%": 0.6436,
"+": 0.5791,
"#": 0.7031,
"@": 0.7324,
"*": 0.6738,
" ": 0.3701
}
},
"Press Start 2P": {
"ascent": 1,
"descent": 0,
"widths": {
"0": 1,
"1": 1,
"2": 1,
"3": 1,
"4": 1,
"5": 1,
"6": 1,
"7": 1,
"8": 1,
"9": 1,
"A": 1,
"B": 1,
"C": 1,
"D": 1,
"E": 1,
"F": 1,
"G": 1,
"H": 1,
"I": 1,
"J": 1,
"K": 1,
"L": 1,
"M": 1,
"N": 1,
"O": 1,
"P": 1,
"Q": 1,
"R": 1,
"S": 1,
"T": 1,
"U": 1,
"V": 1,
"W": 1,
"X": 1,
"Y": 1,
"Z": 1,
"a": 1,
"b": 1,
"c": 1,
"d": 1,
"e": 1,
"f": 1,
"g": 1,
"h": 1,
"i": 1,
"j": 1,
"k": 1,
"l": 1,
"m": 1,
"n": 1,
"o": 1,
"p": 1,
"q": 1,
"r": 1,
"s": 1,
"t": 1,
"u": 1,
"v": 1,
"w": 1,
"x": 1,
"y": 1,
"z": 1,
".": 1,
",": 1,
"!": 1,
"?": 1,
"'": 1,
"\u2019": 1,
"\"": 1,
":": 1,
";": 1,
"-": 1,
"\u2013": 1,
"\u2014": 1,
"(": 1,
")": 1,
"[": 1,
"]": 1,
"/": 1,
"&amp;": 1,
"%": 1,
"+": 1,
"#": 1,
"@": 1,
"*": 1,
" ": 1
}
},
"Rajdhani": {
"ascent": 0.93,
"descent": 0.35,
"widths": {
"0": 0.52,
"1": 0.322,
"2": 0.482,
"3": 0.5,
"4": 0.526,
"5": 0.489,
"6": 0.505,
"7": 0.395,
"8": 0.526,
"9": 0.505,
"A": 0.54,
"B": 0.549,
"C": 0.541,
"D": 0.556,
"E": 0.48,
"F": 0.457,
"G": 0.541,
"H": 0.572,
"I": 0.241,
"J": 0.505,
"K": 0.538,
"L": 0.451,
"M": 0.705,
"N": 0.581,
"O": 0.553,
"P": 0.526,
"Q": 0.56,
"R": 0.537,
"S": 0.555,
"T": 0.427,
"U": 0.554,
"V": 0.506,
"W": 0.797,
"X": 0.514,
"Y": 0.5,
"Z": 0.493,
"a": 0.507,
"b": 0.51,
"c": 0.399,
"d": 0.51,
"e": 0.492,
"f": 0.318,
"g": 0.51,
"h": 0.512,
"i": 0.221,
"j": 0.221,
"k": 0.443,
"l": 0.221,
"m": 0.777,
"n": 0.512,
"o": 0.5,
"p": 0.51,
"q": 0.507,
"r": 0.323,
"s": 0.433,
"t": 0.349,
"u": 0.512,
"v": 0.431,
"w": 0.686,
"x": 0.427,
"y": 0.463,
"z": 0.418,
".": 0.194,
",": 0.194,
"!": 0.237,
"?": 0.471,
"'": 0.186,
"\u2019": 0.181,
"\"": 0.337,
":": 0.194,
";": 0.194,
"-": 0.312,
"\u2013": 0.405,
"\u2014": 0.565,
"(": 0.29,
")": 0.29,
"[": 0.297,
"]": 0.297,
"/": 0.4,
"&amp;": 0.603,
"%": 0.724,
"+": 0.535,
"#": 0.675,
"@": 0.751,
"*": 0.404,
" ": 0.254
}
},
"Saira Stencil One": {
"ascent": 1.13,
"descent": 0.44,
"widths": {
"0": 0.66,
"1": 0.402,
"2": 0.614,
"3": 0.61,
"4": 0.654,
"5": 0.628,
"6": 0.662,
"7": 0.576,
"8": 0.676,
"9": 0.662,
"A": 0.687,
"B": 0.67,
"C": 0.568,
"D": 0.68,
"E": 0.616,
"F": 0.576,
"G": 0.66,
"H": 0.716,
"I": 0.33,
"J": 0.425,
"K": 0.683,
"L": 0.541,
"M": 0.885,
"N": 0.716,
"O": 0.698,
"P": 0.645,
"Q": 0.698,
"R": 0.674,
"S": 0.612,
"T": 0.581,
"U": 0.69,
"V": 0.663,
"W": 0.996,
"X": 0.678,
"Y": 0.633,
"Z": 0.618,
"a": 0.558,
"b": 0.578,
"c": 0.465,
"d": 0.578,
"e": 0.557,
"f": 0.437,
"g": 0.578,
"h": 0.588,
"i": 0.299,
"j": 0.299,
"k": 0.576,
"l": 0.299,
"m": 0.857,
"n": 0.588,
"o": 0.572,
"p": 0.578,
"q": 0.578,
"r": 0.425,
"s": 0.498,
"t": 0.427,
"u": 0.586,
"v": 0.551,
"w": 0.846,
"x": 0.566,
"y": 0.588,
"z": 0.534,
".": 0.33,
",": 0.33,
"!": 0.363,
"?": 0.521,
"'": 0.3,
"\u2019": 0.32,
"\"": 0.525,
":": 0.33,
";": 0.33,
"-": 0.379,
"\u2013": 0.48,
"\u2014": 0.88,
"(": 0.374,
")": 0.374,
"[": 0.399,
"]": 0.399,
"/": 0.429,
"&amp;": 0.739,
"%": 0.898,
"+": 0.54,
"#": 0.7,
"@": 0.944,
"*": 0.454,
" ": 0.26
}
},
"Shippori Mincho": {
"ascent": 1.16,
"descent": 0.29,
"widths": {
"0": 0.52,
"1": 0.487,
"2": 0.511,
"3": 0.523,
"4": 0.503,
"5": 0.502,
"6": 0.532,
"7": 0.545,
"8": 0.539,
"9": 0.532,
"A": 0.762,
"B": 0.716,
"C": 0.716,
"D": 0.782,
"E": 0.72,
"F": 0.686,
"G": 0.744,
"H": 0.889,
"I": 0.408,
"J": 0.437,
"K": 0.812,
"L": 0.712,
"M": 1.013,
"N": 0.825,
"O": 0.771,
"P": 0.655,
"Q": 0.8,
"R": 0.758,
"S": 0.651,
"T": 0.743,
"U": 0.815,
"V": 0.769,
"W": 1.022,
"X": 0.745,
"Y": 0.754,
"Z": 0.593,
"a": 0.55,
"b": 0.579,
"c": 0.509,
"d": 0.577,
"e": 0.543,
"f": 0.355,
"g": 0.592,
"h": 0.628,
"i": 0.317,
"j": 0.239,
"k": 0.586,
"l": 0.318,
"m": 0.956,
"n": 0.633,
"o": 0.576,
"p": 0.606,
"q": 0.57,
"r": 0.437,
"s": 0.499,
"t": 0.327,
"u": 0.604,
"v": 0.558,
"w": 0.783,
"x": 0.576,
"y": 0.557,
"z": 0.48,
".": 0.249,
",": 0.25,
"!": 0.288,
"?": 0.444,
"'": 0.198,
"\u2019": 0.203,
"\"": 0.389,
":": 0.209,
";": 0.21,
"-": 0.271,
"\u2013": 0.536,
"\u2014": 1,
"(": 0.363,
")": 0.363,
"[": 0.438,
"]": 0.437,
"/": 0.443,
"&amp;": 0.82,
"%": 0.938,
"+": 0.605,
"#": 0.676,
"@": 0.906,
"*": 0.441,
" ": 0.258
}
},
"Sora": {
"ascent": 0.97,
"descent": 0.29,
"widths": {
"0": 0.743,
"1": 0.42,
"2": 0.618,
"3": 0.614,
"4": 0.642,
"5": 0.623,
"6": 0.659,
"7": 0.574,
"8": 0.637,
"9": 0.659,
"A": 0.756,
"B": 0.68,
"C": 0.795,
"D": 0.791,
"E": 0.6,
"F": 0.56,
"G": 0.831,
"H": 0.804,
"I": 0.314,
"J": 0.64,
"K": 0.678,
"L": 0.544,
"M": 0.92,
"N": 0.849,
"O": 0.865,
"P": 0.64,
"Q": 0.865,
"R": 0.7,
"S": 0.689,
"T": 0.594,
"U": 0.789,
"V": 0.708,
"W": 1.043,
"X": 0.696,
"Y": 0.652,
"Z": 0.654,
"a": 0.575,
"b": 0.689,
"c": 0.606,
"d": 0.689,
"e": 0.612,
"f": 0.379,
"g": 0.675,
"h": 0.64,
"i": 0.308,
"j": 0.317,
"k": 0.573,
"l": 0.286,
"m": 0.968,
"n": 0.64,
"o": 0.676,
"p": 0.689,
"q": 0.689,
"r": 0.41,
"s": 0.536,
"t": 0.426,
"u": 0.628,
"v": 0.559,
"w": 0.848,
"x": 0.56,
"y": 0.547,
"z": 0.488,
".": 0.262,
",": 0.262,
"!": 0.296,
"?": 0.552,
"'": 0.262,
"\u2019": 0.244,
"\"": 0.43,
":": 0.262,
";": 0.262,
"-": 0.504,
"\u2013": 0.512,
"\u2014": 0.9,
"(": 0.376,
")": 0.376,
"[": 0.376,
"]": 0.376,
"/": 0.344,
"&amp;": 0.688,
"%": 0.85,
"+": 0.59,
"#": 0.692,
"@": 1.122,
"*": 0.567,
" ": 0.228
}
},
"Space Grotesk": {
"ascent": 0.98,
"descent": 0.29,
"widths": {
"0": 0.641,
"1": 0.418,
"2": 0.603,
"3": 0.604,
"4": 0.625,
"5": 0.599,
"6": 0.612,
"7": 0.564,
"8": 0.623,
"9": 0.612,
"A": 0.63,
"B": 0.661,
"C": 0.642,
"D": 0.663,
"E": 0.563,
"F": 0.54,
"G": 0.66,
"H": 0.656,
"I": 0.244,
"J": 0.594,
"K": 0.61,
"L": 0.546,
"M": 0.865,
"N": 0.664,
"O": 0.669,
"P": 0.601,
"Q": 0.669,
"R": 0.631,
"S": 0.613,
"T": 0.588,
"U": 0.666,
"V": 0.619,
"W": 0.875,
"X": 0.638,
"Y": 0.61,
"Z": 0.577,
"a": 0.575,
"b": 0.644,
"c": 0.598,
"d": 0.644,
"e": 0.592,
"f": 0.442,
"g": 0.642,
"h": 0.613,
"i": 0.245,
"j": 0.247,
"k": 0.538,
"l": 0.245,
"m": 0.86,
"n": 0.613,
"o": 0.618,
"p": 0.644,
"q": 0.644,
"r": 0.377,
"s": 0.527,
"t": 0.46,
"u": 0.612,
"v": 0.539,
"w": 0.801,
"x": 0.593,
"y": 0.612,
"z": 0.521,
".": 0.253,
",": 0.251,
"!": 0.253,
"?": 0.58,
"'": 0.251,
"\u2019": 0.251,
"\"": 0.425,
":": 0.253,
";": 0.253,
"-": 0.455,
"\u2013": 0.607,
"\u2014": 0.911,
"(": 0.379,
")": 0.377,
"[": 0.335,
"]": 0.335,
"/": 0.37,
"&amp;": 0.604,
"%": 0.772,
"+": 0.62,
"#": 0.628,
"@": 1.026,
"*": 0.52,
" ": 0.257
}
},
"Special Elite": {
"ascent": 0.7,
"descent": 0.3,
"widths": {
"0": 0.6108,
"1": 0.5698,
"2": 0.5737,
"3": 0.5571,
"4": 0.6123,
"5": 0.5376,
"6": 0.5884,
"7": 0.5552,
"8": 0.5986,
"9": 0.5845,
"A": 0.5498,
"B": 0.604,
"C": 0.5791,
"D": 0.6226,
"E": 0.6387,
"F": 0.6055,
"G": 0.6152,
"H": 0.6528,
"I": 0.4951,
"J": 0.541,
"K": 0.5825,
"L": 0.6025,
"M": 0.6978,
"N": 0.6279,
"O": 0.6167,
"P": 0.5532,
"Q": 0.6021,
"R": 0.6367,
"S": 0.5889,
"T": 0.5942,
"U": 0.6216,
"V": 0.6113,
"W": 0.6436,
"X": 0.582,
"Y": 0.561,
"Z": 0.5923,
"a": 0.5654,
"b": 0.5654,
"c": 0.5474,
"d": 0.603,
"e": 0.5439,
"f": 0.4731,
"g": 0.583,
"h": 0.6167,
"i": 0.5684,
"j": 0.4155,
"k": 0.6206,
"l": 0.5405,
"m": 0.6636,
"n": 0.6323,
"o": 0.5835,
"p": 0.5874,
"q": 0.5679,
"r": 0.5791,
"s": 0.5195,
"t": 0.5103,
"u": 0.6387,
"v": 0.605,
"w": 0.6787,
"x": 0.6606,
"y": 0.5928,
"z": 0.5288,
".": 0.3496,
",": 0.3364,
"!": 0.2764,
"?": 0.4702,
"'": 0.1963,
"\u2019": 0.2642,
"\"": 0.3521,
":": 0.3433,
";": 0.3286,
"-": 0.6362,
"\u2013": 0.6118,
"\u2014": 1.1138,
"(": 0.2793,
")": 0.2817,
"[": 0.312,
"]": 0.3125,
"/": 0.5571,
"&amp;": 0.6763,
"%": 0.667,
"+": 0.4961,
"#": 0.5547,
"@": 0.665,
"*": 0.5229,
" ": 0.293
}
},
"Teko": {
"ascent": 0.96,
"descent": 0.48,
"widths": {
"0": 0.39,
"1": 0.235,
"2": 0.328,
"3": 0.355,
"4": 0.363,
"5": 0.358,
"6": 0.382,
"7": 0.291,
"8": 0.389,
"9": 0.378,
"A": 0.385,
"B": 0.409,
"C": 0.377,
"D": 0.412,
"E": 0.343,
"F": 0.332,
"G": 0.382,
"H": 0.417,
"I": 0.21,
"J": 0.334,
"K": 0.384,
"L": 0.301,
"M": 0.516,
"N": 0.41,
"O": 0.393,
"P": 0.379,
"Q": 0.393,
"R": 0.396,
"S": 0.362,
"T": 0.31,
"U": 0.397,
"V": 0.364,
"W": 0.609,
"X": 0.373,
"Y": 0.361,
"Z": 0.313,
"a": 0.36,
"b": 0.36,
"c": 0.352,
"d": 0.36,
"e": 0.36,
"f": 0.222,
"g": 0.36,
"h": 0.365,
"i": 0.178,
"j": 0.178,
"k": 0.357,
"l": 0.178,
"m": 0.549,
"n": 0.365,
"o": 0.37,
"p": 0.36,
"q": 0.36,
"r": 0.238,
"s": 0.328,
"t": 0.219,
"u": 0.365,
"v": 0.317,
"w": 0.543,
"x": 0.342,
"y": 0.342,
"z": 0.292,
".": 0.165,
",": 0.165,
"!": 0.209,
"?": 0.342,
"'": 0.161,
"\u2019": 0.166,
"\"": 0.292,
":": 0.165,
";": 0.165,
"-": 0.315,
"\u2013": 0.42,
"\u2014": 0.536,
"(": 0.264,
")": 0.264,
"[": 0.311,
"]": 0.311,
"/": 0.39,
"&amp;": 0.462,
"%": 0.641,
"+": 0.408,
"#": 0.496,
"@": 0.696,
"*": 0.321,
" ": 0.145
}
},
"VT323": {
"ascent": 0.8,
"descent": 0.2,
"widths": {
"0": 0.4,
"1": 0.4,
"2": 0.4,
"3": 0.4,
"4": 0.4,
"5": 0.4,
"6": 0.4,
"7": 0.4,
"8": 0.4,
"9": 0.4,
"A": 0.4,
"B": 0.4,
"C": 0.4,
"D": 0.4,
"E": 0.4,
"F": 0.4,
"G": 0.4,
"H": 0.4,
"I": 0.4,
"J": 0.4,
"K": 0.4,
"L": 0.4,
"M": 0.4,
"N": 0.4,
"O": 0.4,
"P": 0.4,
"Q": 0.4,
"R": 0.4,
"S": 0.4,
"T": 0.4,
"U": 0.4,
"V": 0.4,
"W": 0.4,
"X": 0.4,
"Y": 0.4,
"Z": 0.4,
"a": 0.4,
"b": 0.4,
"c": 0.4,
"d": 0.4,
"e": 0.4,
"f": 0.4,
"g": 0.4,
"h": 0.4,
"i": 0.4,
"j": 0.4,
"k": 0.4,
"l": 0.4,
"m": 0.4,
"n": 0.4,
"o": 0.4,
"p": 0.4,
"q": 0.4,
"r": 0.4,
"s": 0.4,
"t": 0.4,
"u": 0.4,
"v": 0.4,
"w": 0.4,
"x": 0.4,
"y": 0.4,
"z": 0.4,
".": 0.4,
",": 0.4,
"!": 0.4,
"?": 0.4,
"'": 0.4,
"\u2019": 0.4,
"\"": 0.4,
":": 0.4,
";": 0.4,
"-": 0.4,
"\u2013": 0.4,
"\u2014": 0.4,
"(": 0.4,
")": 0.4,
"[": 0.4,
"]": 0.4,
"/": 0.4,
"&amp;": 0.4,
"%": 0.4,
"+": 0.4,
"#": 0.4,
"@": 0.4,
"*": 0.4,
" ": 0.4
}
}
}