Hallmark Data Model and Schema: The Complete 40-Field JSON Structure Explained
Hallmark uses a single structured-fields JSON schema with approximately 40 fields defined in study.md as the source of truth for all design extraction and build steps.
The Hallmark data model powers every stage of design analysis, from ingesting a screenshot or URL to generating a portable design.md specification. According to the Nutlope/hallmark repository, this schema acts as a strict contract between the extraction engine, the diagnosis report, and the theme mapping layer.
What Is the Hallmark Schema?
The Hallmark schema is a flat JSON object with nested sub-objects that completely describes a web page's visual DNA. It is stored in skills/hallmark/references/study.md and serves as the single source of truth for downstream operations.
The schema is mode-agnostic: both image mode and URL mode populate the same fields, though URL mode fills "mode-conditional" fields with exact values extracted from fetched HTML/CSS.
Schema Categories and Key Fields
| Category | Purpose | Example Fields |
|---|---|---|
| Source | Input provenance | source_mode, source_url, refusal |
| Safety | Security validation | remote_safety (sub-object with 7 flags) |
| Macrostructure | Page architecture | macrostructure, hero, pitch, nav, footer |
| Typography | Typeface roles and pairings | display_role, body_face, pairing_logic |
| Colour | Paper and accent values | paper_band, accent_value, accent_footprint |
| Rhythm | Visual density and motion | density, asymmetry, motion_library |
| Provenance | Audit trail for exports | source_mode-related flags |
Complete Schema Structure (from study.md)
According to the Hallmark source code, the full schema definition resides in a fenced JSON code block within skills/hallmark/references/study.md:
{
"source_mode": "image | url",
"source_url": "<the URL if source_mode=url, else null>",
"source": "user-described | public-reference | unknown",
"refusal": "ok | refused (paid-template) | soft-refusal (signature work)",
"remote_safety": {
"public_web_url": true,
"scheme": "https | http | null",
"ip_literal_detected": false,
"redirects_checked": "true | false | fallback-requested | unknown | null",
"fetched": ["html", "same-origin-css", "font-css"],
"scripts_ignored": true,
"prompt_injection_detected": false
},
"macrostructure": "<name from macrostructures.md>",
"macrostructure_alt":"<second-closest, if it leans>",
"hero": { "archetype":"H1‑Marquee …", "knobs":{ "<knob>":"<value>" } },
"pitch":{ "archetype":"…", "knobs":{ … } },
"nav":{ "archetype":"N1 …", "knobs":{ … } },
"footer":{ "archetype":"Ft1 …", "knobs":{ … } },
"display_role":"italic editorial serif | …",
"display_face":"<exact font name in URL mode, else null>",
"body_role":"neutral grotesque | …",
"body_face":"<exact font name in URL mode, else null>",
"label_role":"monospace | …",
"label_face":"<exact font name in URL mode, else null>",
"pairing_logic":"single family | two families | three families",
"paper_band":"dark <30 | mid 30‑85 | light >85",
"paper_value":"<exact oklch/hex/rgb in URL mode, else null>",
"paper_hue":"warm | cool | neutral‑warm | neutral‑cool | chromatic‑<hue>",
"accent_hue_band":"warm‑red | orange | yellow | green | teal | cyan‑blue | indigo | magenta | neutral",
"accent_value":"<exact oklch/hex/rgb in URL mode, else null>",
"accent_footprint":"small ≤5% | recurring 5‑15% | flood >15%",
"density":"generous | medium | dense | unknown (URL mode)",
"asymmetry":"centred | left‑biased | right‑biased | asymmetric‑grid | unknown (URL mode)",
"treatments":["riso","grain‑overlay","…"],
"reveal":"none | fade‑up | sweep | …",
"motion_library":"framer‑motion | gsap | lottie | lenis | motion | none",
"anti_patterns":["bouncy hover","transition‑all","…"]
}
All fields are required unless explicitly marked "null" or "unknown (URL mode)".
Mode-Conditional Field Behavior
The Hallmark schema handles two input modes with unified field names:
-
Image mode: Populates descriptive bands (
paper_band,display_role) with qualitative values like"light >85"or"italic editorial serif". Mode-conditional fields returnnull. -
URL mode: Fills exact-value fields (
paper_value,display_face) with precise data extracted from fetched CSS—e.g.,"oklch(96% 0.01 90)"or"Inter".
This design ensures schema stability across extraction methods while allowing precise reconstruction when source code is available.
Practical Schema Usage
Building a Schema Manually for Testing
// example-schema.js
const hallmarkSchema = {
source_mode: "url",
source_url: "https://example.com",
source: "public-reference",
refusal: "ok",
remote_safety: {
public_web_url: true,
scheme: "https",
ip_literal_detected: false,
redirects_checked: "true",
fetched: ["html", "same-origin-css", "font-css"],
scripts_ignored: true,
prompt_injection_detected: false
},
macrostructure: "Split Studio",
macrostructure_alt: null,
hero: { archetype: "H2‑Split", knobs: { ratio: "6/6", right: "proof", divider: "hairline" } },
nav: { archetype: "N1‑Standard", knobs: {} },
footer: { archetype: "Ft3‑Index", knobs: { columns: "4" } },
display_role: "italic editorial serif",
display_face: "Inter",
body_role: "neutral grotesque",
body_face: "Inter",
label_role: "monospace",
label_face: null,
pairing_logic: "two families",
paper_band: "light >85",
paper_value: "oklch(96% 0.01 90)",
paper_hue: "warm",
accent_hue_band: "neutral",
accent_value: "#000000",
accent_footprint: "small ≤5%",
density: "generous",
asymmetry: "centred",
treatments: [],
reveal: "none",
motion_library: "framer-motion",
anti_patterns: []
};
console.log(JSON.stringify(hallmarkSchema, null, 2));
Generating design.md from Schema Data
import fs from "fs";
function generateDesignMD(schema) {
const header = `/* Hallmark · macrostructure: ${schema.macrostructure} · theme: studied-DNA */\n`;
const system = `## System\n- Display: ${schema.display_role} (${schema.display_face || "candidate"})\n- Body: ${schema.body_role} (${schema.body_face || "candidate"})\n`;
const tokens = `## Tokens\n- Paper: ${schema.paper_value || schema.paper_band}\n- Accent: ${schema.accent_value || schema.accent_hue_band}\n`;
const provenance = `## Provenance\n- Source mode: ${schema.source_mode}\n- URL: ${schema.source_url || "N/A"}\n`;
return header + system + tokens + provenance;
}
fs.writeFileSync("design.md", generateDesignMD(hallmarkSchema));
Schema-Dependent Reference Files
The Hallmark data model references several canonical files in skills/hallmark/references/:
| File | Schema Role |
|---|---|
study.md |
Primary schema definition and extraction protocol |
macrostructures.md |
21 named macro-structures for the macrostructure field |
component-cookbook.md |
Archetype definitions and knob tables for hero, nav, pitch, footer |
design-md.md |
Output format specification for serialized schemas |
SKILL.md |
Overview of the hallmark study verb and schema workflow |
How the Schema Powers Hallmark's Pipeline
Once populated, the schema drives three downstream operations:
-
Diagnosis report: Compares extracted values against reference databases in
macrostructures.mdandcomponent-cookbook.md. -
Theme mapping: Suggests named themes (e.g., Studio, Midnight, Riso) based on field combinations. This mapping is non-binding—users may override.
-
design.mdexport: Serializes the complete schema to a portable, version-controlled specification.
Summary
- Hallmark's data model is a 40-field JSON schema defined in
skills/hallmark/references/study.md. - The schema serves as a strict contract between extraction, analysis, and build phases.
- Mode-conditional fields handle both image and URL inputs with unified structure.
- Reference files (
macrostructures.md,component-cookbook.md) provide controlled vocabularies for key fields. - The schema enables reproducible design systems through
design.mdexport.
Frequently Asked Questions
What file contains the complete Hallmark schema definition?
The complete schema is defined in skills/hallmark/references/study.md within a fenced JSON code block. This file specifies all ~40 fields, their valid values, and extraction rules for both image and URL modes.
Is the Hallmark schema the same for screenshots and URLs?
Yes. Both modes use identical field names, but URL mode populates "mode-conditional" fields (*_value, *_face, motion_library) with exact extracted data while image mode leaves these as null and relies on descriptive bands.
What is the remote_safety sub-object used for?
The remote_safety field contains 7 security flags that validate URL inputs: public_web_url, scheme, ip_literal_detected, redirects_checked, fetched, scripts_ignored, and prompt_injection_detected. This enables safe, auditable extraction from remote sources.
How does Hallmark map schema data to themes?
After schema population, Hallmark suggests named themes (e.g., Studio, Midnight) based on field combinations. However, theme mapping is advisory only—the schema remains the authoritative source and users may override suggestions.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →