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
4 changes: 1 addition & 3 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@ jobs:
- uses: actions/setup-node@v4
with:
node-version: 20
- uses: pnpm/action-setup@v4
with:
version: 10.17.0
- uses: pnpm/action-setup@v4
- run: pnpm install --frozen-lockfile
- run: pnpm run validate:styles
- run: pnpm run build:manifest
15 changes: 15 additions & 0 deletions docs/NOTES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# MuseoMorph — Engineering Notes

## 2025-11-12 — Collaboration Scope + Validator Updates

- Added `style_scope: "collaboration"` alongside existing `"single-artist"` and `"movement"` scopes.
- Validator now only warns on multi-artist `artist` strings when `style_scope` is `"single-artist"`.
- Updated three collaboration cards to use `style_scope: collaboration`:
- `styles/psychedelic_art/mouse_kelley_psychedelic_collage.md`
- `styles/record_covers/hipgnosis_surrealist_staging.md`
- `styles/golden_age_comics/siegel_shuster_foundational_superhero.md`
- Path normalization fix in validator to avoid Windows false positives on group directories.
- Post-change status:
- `pnpm run validate:styles` → All green.
- `pnpm run build:manifest` → Indexed: 211, Skipped: 1, Collections: 32.

265 changes: 145 additions & 120 deletions docs/PRD.md

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions scripts/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@ export const AllowedSafety = [

export const ratioPattern = /^[1-9]\d*:[1-9]\d*$/;

export const FrontmatterSchema = z.object({
export const FrontmatterSchema = z.object({
id: z.string().min(1).regex(/^[a-z0-9_\-]+$/, "id should be lowercase/slug-like"),
group: z.string().min(1),
display_name: z.string().min(1),
artist: z.string().min(1).optional(),
movement: z.string().min(1).optional(),
style_scope: z.enum(["single-artist", "movement"]).default("single-artist"),
style_scope: z
.enum(["single-artist", "movement", "collaboration"])
.default("single-artist"),

ratios: z.array(z.string().regex(ratioPattern)).min(1),
modes: z.array(z.string().min(1)).min(1),
Expand Down
17 changes: 12 additions & 5 deletions scripts/validate-style.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ async function main() {
process.exit(0);
}

// small helper to normalize paths for cross-platform comparisons
const norm = (p: string) => p.replace(/\\/g, "/").replace(/\/+$/, "");

for (const file of files) {
const rel = path.relative(root, file);
if (rel.includes(`${path.sep}archive${path.sep}`) || rel.startsWith(`archive${path.sep}`)) {
Expand Down Expand Up @@ -118,9 +121,10 @@ async function main() {
}
}

const expectedDir = path.join("styles", slugify(fm.group));
const actualDir = path.dirname(rel).replace(/\\/g, "/");
if (!actualDir.startsWith(expectedDir)) {
const expectedDir = norm(path.join("styles", slugify(fm.group)));
const actualDir = norm(path.dirname(rel));
// Accept exact match or being inside a deeper subfolder under expectedDir
if (actualDir !== expectedDir && !actualDir.startsWith(expectedDir + "/")) {
problems.push({
file,
message: `Group "${fm.group}" should live under ${expectedDir}/ — found in ${actualDir}/`,
Expand All @@ -129,10 +133,13 @@ async function main() {

if (typeof fm.artist === "string") {
const artist = fm.artist.trim();
if (artist && (artist.includes(",") || /\s(?:and|&|\+|x)\s/i.test(artist))) {
const looksMulti =
artist && (artist.includes(",") || /\s(?:and|&|\+|x)\s/i.test(artist));
// Only warn for multi-artist strings when the scope claims single-artist
if (fm.style_scope === "single-artist" && looksMulti) {
warnings.push({
file,
message: `Frontmatter.artist looks multi-artist ("${artist}"). Split styles per artist to avoid mixing voices.`,
message: `Frontmatter.artist looks multi-artist ("${artist}"). For duos/studios, set style_scope: "collaboration" (or "movement" for schools).`,
});
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ group: Golden Age Comics
movement: Golden Age Superhero Foundations
artist: Jerry Siegel & Joe Shuster
display_name: Siegel & Shuster — Foundational Superhero Iconography
style_scope: single-artist
style_scope: collaboration
ratios:
- '2:3'
- '3:4'
Expand Down
4 changes: 2 additions & 2 deletions styles/psychedelic_art/mouse_kelley_psychedelic_collage.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ group: Psychedelic Art
movement: Mouse & Kelley Psychedelic Collage
artist: Stanley Mouse & Alton Kelley
display_name: Mouse & Kelley — Psychedelic Collage Poster
style_scope: single-artist
style_scope: collaboration
ratios:
- '2:3'
ratios_status: provisional
Expand All @@ -30,7 +30,7 @@ hero_image: null

# Stanley Mouse & Alton Kelley

## Renderer-Agnostic Adapter - Mouse & Kelley Specific
## Renderer-Agnostic Adapter

- **Constraint precedence:** Sections 1→8 are hard constraints; earlier overrides later
- **Canvas Override Mandate:** Always ignore source image dimensions; compose for declared target aspect ratio
Expand Down
43 changes: 17 additions & 26 deletions styles/record_covers/hipgnosis_surrealist_staging.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ group: Record Covers
movement: Surrealist Photographic Album Art
artist: Hipgnosis (Storm Thorgerson & Aubrey Powell)
display_name: Hipgnosis — Surrealist Photographic Staging
style_scope: single-artist
style_scope: collaboration
ratios:
- '1:1'
- '2:1'
- '16:9'
ratios_status: provisional
ratios_notes: >
Square 12-inch sleeves carry the core imagery; open to 2:1 only when staging a
full gatefold panorama.
Square 12-inch sleeves carry the core imagery; open to 16:9 when staging a
full gatefold panorama surrogate.
modes:
- Surreal Tableau
- Gatefold Panorama
Expand All @@ -34,7 +34,7 @@ hero_image: null

# Hipgnosis (Storm Thorgerson & Aubrey Powell) — Surrealist Photographic Staging

## 🔧 Renderer-Agnostic Adapter
## Renderer-Agnostic Adapter

**Face-Treatment Flags:** `film-grain-triX`, `medium-format-compression`, `silver-halide-grain`, `contact-print-scale`

Expand All @@ -51,7 +51,7 @@ hero_image: null
------
## 1) Core Instruction & Likeness Mandate

**CANVAS OVERRIDE:** Recompose to exactly **1:1 ratio** (album cover standard) OR **2:1 ratio** (gatefold) - ignore source image dimensions completely.
**CANVAS OVERRIDE:** Recompose to exactly **1:1 ratio** (album cover standard) OR **16:9 ratio** (gatefold surrogate) - ignore source image dimensions completely.

Redraw subject in **Hipgnosis surrealist photographic staging style** for **vinyl LP album cover (12" × 12" or 24" × 12" gatefold)**.

Expand All @@ -72,14 +72,14 @@ Identity via **recognizable integration into impossible scenarios** - subject be
------
## 2) Canvas Strategy & Aspect Ratio Control

**MANDATORY RATIO SELECTION:** `1:1` (standard album) OR `2:1` (gatefold panoramic)
**MANDATORY RATIO SELECTION:** `1:1` (standard album) OR `16:9` (gatefold panoramic surrogate)

**CANVAS RECOMPOSITION STRATEGY:**

- **Reframing Method:** recompose-entirely (create elaborate staged environment)
- **Spatial Allocation:** Subject integrated as element within larger surrealist landscape (15-40% of composition)
- **Background Treatment:** Vast surreal environments (deserts, oceans, industrial wastelands, barren fields) extending to horizon
- **Format Justification:** Square format for concentrated surreal moments; 2:1 gatefold for epic surrealist panoramas with elaborate staging
- **Format Justification:** Square format for concentrated surreal moments; 16:9 gatefold surrogate for epic surrealist panoramas with elaborate staging

------
## 3) Style Context & Material Authenticity
Expand Down Expand Up @@ -136,7 +136,7 @@ Identity via **recognizable integration into impossible scenarios** - subject be

**Production Method Anchor:** Dye transfer printing creates color depth impossible with C-prints. Registration accuracy ±0.25mm between cyan, magenta, yellow layers. Paper choice affects final surface (matte vs. glossy receiving papers).

**Canvas Adaptation Anchor:** Square 1:1 format concentrates surreal moment; 2:1 gatefold enables epic panoramic staging with multiple surreal elements across extended vista.
**Canvas Adaptation Anchor:** Square 1:1 format concentrates surreal moment; 16:9 gatefold surrogate enables epic panoramic staging with multiple surreal elements across extended vista.

------
## 5) Wardrobe, Props & Setting Conventions
Expand Down Expand Up @@ -191,7 +191,7 @@ hipgnosis_surreal_props:

**✅ Canvas Positives:**

- "exactly 1:1 square ratio" OR "exactly 2:1 gatefold ratio"
- "exactly 1:1 square ratio" OR "exactly 16:9 gatefold ratio"
- "Hasselblad medium format grain"
- "practical staging photography"
- "dye transfer color saturation"
Expand All @@ -216,7 +216,7 @@ hipgnosis_surreal_props:
- Subject integrated as scale indicator within landscape
- Radial composition for circular impossible objects

**For 2:1 Gatefold:**
**For 16:9 Gatefold Surrogate:**

- Panoramic surreal landscape extending across double-width
- Multiple surreal elements positioned at mathematical intervals
Expand Down Expand Up @@ -286,7 +286,6 @@ hipgnosis_surreal_props:

## Roger Dean — Fantasy Landscape Visionary

## 🔧 Renderer-Agnostic Adapter

**Face-Treatment Flags:** `watercolor-soft`, `gouache-opaque`, `mixed-media-linear`, `wet-on-wet-bleed`

Expand All @@ -301,9 +300,8 @@ hipgnosis_surreal_props:
**Period Production Authenticity:** 1970s-1980s traditional painting methods with experimental mixed media, organic mark-making, controlled chaos through water/gravity manipulation.

------
## 1) Core Instruction & Likeness Mandate

**CANVAS OVERRIDE:** Recompose to exactly **1:1 ratio** (album cover) OR **2:1 ratio** (gatefold) - ignore source image dimensions completely.
**CANVAS OVERRIDE:** Recompose to exactly **1:1 ratio** (album cover) OR **16:9 ratio** (gatefold surrogate) - ignore source image dimensions completely.

Redraw subject in **Roger Dean's fantasy landscape style** for **progressive rock album artwork**.

Expand All @@ -322,19 +320,17 @@ Identity via **symbolic mythologization** - subject becomes tiny traveler or mys
**Mode Selector:** Album cover (vinyl LP or gatefold format)

------
## 2) Canvas Strategy & Aspect Ratio Control

**MANDATORY RATIO SELECTION:** `1:1` (standard album) OR `2:1` (gatefold panorama)
**MANDATORY RATIO SELECTION:** `1:1` (standard album) OR `16:9` (gatefold panorama surrogate)

**CANVAS RECOMPOSITION STRATEGY:**

- **Reframing Method:** adaptive-extend (organic landscape elements flow naturally to fill ratio)
- **Spatial Allocation:** Vast cosmic landscape dominates (70-90%), tiny figures positioned as scale indicators (5-10%)
- **Background Treatment:** Ethereal skies with luminous color gradients, floating islands, alien vegetation extending to all edges
- **Format Justification:** Square format concentrates cosmic vision; 2:1 gatefold enables epic panoramic alien worlds with elaborate organic architecture
- **Format Justification:** Square format concentrates cosmic vision; 16:9 gatefold surrogate enables epic panoramic alien worlds with elaborate organic architecture

------
## 3) Style Context & Material Authenticity

**Influences:** Surrealism, Art Nouveau organic forms, Chinese/Japanese landscape painting, ecological themes, botanical illustration, visionary art.

Expand All @@ -357,7 +353,6 @@ Identity via **symbolic mythologization** - subject becomes tiny traveler or mys
**Production Era Authenticity:** Traditional watercolor/gouache techniques with experimental material manipulation. No digital enhancement - all luminosity achieved through layered transparent pigments, scratched highlights, controlled water effects.

------
## 4) Technical Method & Mark-Making

**Line work:** Fluid curvilinear contours defining floating islands and organic architecture. Controlled fine linework for rock textures and foliage detail. Exploratory initial marks refined through careful edge definition.

Expand All @@ -383,10 +378,9 @@ Identity via **symbolic mythologization** - subject becomes tiny traveler or mys

**Production Method Anchor:** Original paintings photographed for reproduction. Offset lithography struggles to capture watercolor luminosity - requires careful color separation to approximate transparent wash depth.

**Canvas Adaptation Anchor:** Compositions designed for specific ratios - 1:1 concentrates cosmic moment, 2:1 enables epic journey across alien vista with multiple floating islands and organic structures.
**Canvas Adaptation Anchor:** Compositions designed for specific ratios - 1:1 concentrates cosmic moment, 16:9 enables epic journey across alien vista with multiple floating islands and organic structures.

------
## 5) Wardrobe, Props & Setting Conventions

**Wardrobe Tracks:**

Expand Down Expand Up @@ -420,7 +414,6 @@ roger_dean_fantasy_props:
**Coherence Filter:** All elements must feel ecologically connected within alien world system. Default = floating island in cosmic void with organic architecture.

------
## 6) Safety & IP Constraints (Hard Rules)

**❌ Canvas Negatives:**

Expand All @@ -437,7 +430,7 @@ roger_dean_fantasy_props:

**✅ Canvas Positives:**

- "exactly 1:1 square ratio" OR "exactly 2:1 gatefold ratio"
- "exactly 1:1 square ratio" OR "exactly 16:9 gatefold ratio"
- "watercolor granulation texture"
- "gouache opacity layers"
- "scalpel scratched highlights"
Expand All @@ -451,7 +444,6 @@ roger_dean_fantasy_props:
**Vocabulary Warnings:** Avoid "digital," "rendered," "computer-generated," "vector," "synthetic." Embrace "painted," "organic," "flowing," "luminous," "atmospheric."

------
## 7) Composition & Lighting Patterns

**RATIO-SPECIFIC COMPOSITION:**

Expand All @@ -462,7 +454,7 @@ roger_dean_fantasy_props:
- Equal weight distribution through organic symmetry
- Atmospheric depth receding to all four edges

**For 2:1 Gatefold:**
**For 16:9 Gatefold Surrogate:**

- Epic panoramic alien landscape extending across width
- Multiple floating islands positioned at rhythmic intervals
Expand All @@ -489,7 +481,6 @@ roger_dean_fantasy_props:
**Ratio Enforcement Anchor:** Composition flows organically to fill declared ratio, floating islands and cosmic elements positioned specifically for square or panoramic format.

------
## 8) Typography & Text Integration (If Historically Present)

**Binary:** ALLOW (typography integrated as organic element)

Expand Down