# nullurl/zine architecture

> Architecture diagram of the GitHub repository nullurl/zine, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nullurl/zine
- Repository: https://github.com/nullurl/zine

## Overview

Zine Skills combines a catalog of AI image-generation skills for digital-journal artwork with a local web studio for selecting a skill, supplying a brief and reference images, and receiving a generated image. The README also describes a separate sticker-pack toolchain; its fast pipeline turns staged artwork into validated PNG/SVG sticker assets. Edges reflect the excerpts and documented capabilities; unsampled skill implementations and studio routes limit what can be asserted about their wiring.

Main entry points: [`photo-sticker-pack-runtime/scripts/fast_pipeline.py`](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/fast_pipeline.py) (Fast Pipeline), [`photo-sticker-pack-runtime/scripts/cache_utils.py`](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/cache_utils.py) (Artifact Cache), [`photo-sticker-pack-runtime/scripts/resume_utils.py`](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/resume_utils.py) (Resume Recovery), [`photo-sticker-pack-runtime/scripts/postprocess_sticker.py`](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/postprocess_sticker.py) (Sticker Process)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_studio["Zine Studio"]
  node_studio_ui["Studio UI<br/>[app.js]"]
  node_studio_server["Studio Server<br/>[server.py]"]
  node_generated_image["Generated Image<br/>[server.py]"]
end

subgraph group_skills["Image Skills"]
  node_editorial["Editorial Styles"]
  node_photo["Photo Styles"]
  node_collage["Collage Styles"]
  node_botanical["Botanical Styles"]
  node_archive["Archive Styles"]
  node_poetry["Poetry Styles"]
  node_tattoo["Tattoo Styles"]
end

subgraph group_sticker["Sticker Runtime"]
  node_sticker_pipeline["Fast Pipeline<br/>[fast_pipeline.py]"]
  node_manifest["Pack Manifest<br/>[manifest_utils.py]"]
  node_artifact_paths["Artifact Paths"]
  node_palette["Palette Normalize"]
  node_sticker_process["Sticker Process"]
  node_quality["Quality Gate<br/>[quality_gate.py]"]
  node_vectorize["SVG Vectorize"]
  node_svg_layers["SVG Layers<br/>[svg_layers.py]"]
  node_cache[("Artifact Cache<br/>[cache_utils.py]")]
  node_resume["Resume Recovery<br/>[resume_utils.py]"]
end

subgraph group_desktop["Desktop Helper"]
  node_desktop_helper["Sticker Desktop<br/>[main.swift]"]
end

node_creator(("Creator"))
node_image_provider["Image Provider"]

node_creator -->|"selects and briefs"| node_studio_ui
node_studio_ui -->|"requests jobs"| node_studio_server
node_studio_server -->|"requests generation"| node_image_provider
node_studio_server -->|"saves result"| node_generated_image
node_creator -->|"chooses style"| node_editorial
node_creator -->|"chooses style"| node_photo
node_creator -->|"chooses style"| node_collage
node_creator -->|"chooses style"| node_botanical
node_creator -->|"chooses style"| node_archive
node_creator -->|"chooses style"| node_poetry
node_creator -->|"chooses style"| node_tattoo
node_sticker_pipeline -->|"reads manifest"| node_manifest
node_sticker_pipeline -->|"derives paths"| node_artifact_paths
node_sticker_pipeline -->|"normalizes palette"| node_palette
node_sticker_pipeline -->|"processes artwork"| node_sticker_process
node_sticker_pipeline -->|"validates output"| node_quality
node_sticker_pipeline -->|"exports SVG"| node_vectorize
node_sticker_pipeline -->|"reuses assets"| node_cache
node_sticker_pipeline -->|"recovers work"| node_resume
node_sticker_process -->|"composes layers"| node_svg_layers
node_palette -->|"uses ink extraction"| node_sticker_process
node_quality -->|"uses ink extraction"| node_sticker_process
node_cache -->|"derives paths"| node_artifact_paths
node_cache -->|"loads and validates"| node_manifest
node_cache -->|"checks quality"| node_quality
node_resume -->|"validates paths"| node_artifact_paths
node_resume -->|"loads manifest"| node_manifest
node_resume -->|"uses layer tools"| node_svg_layers

click node_studio_ui "https://github.com/nullurl/zine/blob/main/zine-studio/static/app.js"
click node_studio_server "https://github.com/nullurl/zine/blob/main/zine-studio/server.py"
click node_generated_image "https://github.com/nullurl/zine/blob/main/zine-studio/server.py"
click node_editorial "https://github.com/nullurl/zine/blob/main/telos-editorial-zine/scripts/server_image_gen.py"
click node_photo "https://github.com/nullurl/zine/blob/main/soft-focus-memory-album/scripts/server_image_gen.py"
click node_collage "https://github.com/nullurl/zine/blob/main/green-reverie-collage-zine/scripts/server_image_gen.py"
click node_botanical "https://github.com/nullurl/zine/blob/main/botanical-scrapbook-zine/scripts/server_image_gen.py"
click node_archive "https://github.com/nullurl/zine/blob/main/archival-dossier-zine/scripts/server_image_gen.py"
click node_poetry "https://github.com/nullurl/zine/blob/main/vertical-poetry-strip-zine/scripts/server_image_gen.py"
click node_tattoo "https://github.com/nullurl/zine/blob/main/sumi-gesture-tattoo-zine/scripts/server_image_gen.py"
click node_sticker_pipeline "https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/fast_pipeline.py"
click node_manifest "https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/manifest_utils.py"
click node_artifact_paths "https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/artifact_contract.py"
click node_palette "https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/normalize_raw_palette.py"
click node_sticker_process "https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/postprocess_sticker.py"
click node_quality "https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/quality_gate.py"
click node_vectorize "https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/vectorize_sticker.py"
click node_svg_layers "https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/svg_layers.py"
click node_cache "https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/cache_utils.py"
click node_resume "https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/resume_utils.py"
click node_desktop_helper "https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/desktop-helper/Sources/StickerDesk/main.swift"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_studio_ui,node_studio_server,node_generated_image toneBlue
class node_editorial,node_photo,node_collage,node_botanical,node_archive,node_poetry,node_tattoo toneAmber
class node_sticker_pipeline,node_manifest,node_artifact_paths,node_palette,node_sticker_process,node_quality,node_vectorize,node_svg_layers,node_cache,node_resume toneMint
class node_desktop_helper toneRose
class node_creator,node_image_provider toneIndigo
```

## Components

### Zine Studio

- [Studio UI](https://github.com/nullurl/zine/blob/main/zine-studio/static/app.js): `zine-studio/static/app.js`
- [Studio Server](https://github.com/nullurl/zine/blob/main/zine-studio/server.py): `zine-studio/server.py`
- [Generated Image](https://github.com/nullurl/zine/blob/main/zine-studio/server.py): `zine-studio/server.py`

### Image Skills

- [Editorial Styles](https://github.com/nullurl/zine/blob/main/telos-editorial-zine/scripts/server_image_gen.py): `telos-editorial-zine/scripts/server_image_gen.py`
- [Photo Styles](https://github.com/nullurl/zine/blob/main/soft-focus-memory-album/scripts/server_image_gen.py): `soft-focus-memory-album/scripts/server_image_gen.py`
- [Collage Styles](https://github.com/nullurl/zine/blob/main/green-reverie-collage-zine/scripts/server_image_gen.py): `green-reverie-collage-zine/scripts/server_image_gen.py`
- [Botanical Styles](https://github.com/nullurl/zine/blob/main/botanical-scrapbook-zine/scripts/server_image_gen.py): `botanical-scrapbook-zine/scripts/server_image_gen.py`
- [Archive Styles](https://github.com/nullurl/zine/blob/main/archival-dossier-zine/scripts/server_image_gen.py): `archival-dossier-zine/scripts/server_image_gen.py`
- [Poetry Styles](https://github.com/nullurl/zine/blob/main/vertical-poetry-strip-zine/scripts/server_image_gen.py): `vertical-poetry-strip-zine/scripts/server_image_gen.py`
- [Tattoo Styles](https://github.com/nullurl/zine/blob/main/sumi-gesture-tattoo-zine/scripts/server_image_gen.py): `sumi-gesture-tattoo-zine/scripts/server_image_gen.py`

### Sticker Runtime

- [Fast Pipeline](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/fast_pipeline.py): `photo-sticker-pack-runtime/scripts/fast_pipeline.py`
- [Pack Manifest](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/manifest_utils.py): `photo-sticker-pack-runtime/scripts/manifest_utils.py`
- [Artifact Paths](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/artifact_contract.py): `photo-sticker-pack-runtime/scripts/artifact_contract.py`
- [Palette Normalize](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/normalize_raw_palette.py): `photo-sticker-pack-runtime/scripts/normalize_raw_palette.py`
- [Sticker Process](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/postprocess_sticker.py): `photo-sticker-pack-runtime/scripts/postprocess_sticker.py`
- [Quality Gate](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/quality_gate.py): `photo-sticker-pack-runtime/scripts/quality_gate.py`
- [SVG Vectorize](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/vectorize_sticker.py): `photo-sticker-pack-runtime/scripts/vectorize_sticker.py`
- [SVG Layers](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/svg_layers.py): `photo-sticker-pack-runtime/scripts/svg_layers.py`
- [Artifact Cache](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/cache_utils.py): `photo-sticker-pack-runtime/scripts/cache_utils.py`
- [Resume Recovery](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/scripts/resume_utils.py): `photo-sticker-pack-runtime/scripts/resume_utils.py`

### Desktop Helper

- [Sticker Desktop](https://github.com/nullurl/zine/blob/main/photo-sticker-pack-runtime/desktop-helper/Sources/StickerDesk/main.swift): `photo-sticker-pack-runtime/desktop-helper/Sources/StickerDesk/main.swift`

### Other components

- **Creator**
- **Image Provider**

## Connections

- Creator → Studio UI: selects and briefs (evidence: `zine-studio/static/app.js`)
- Studio UI → Studio Server: requests jobs (evidence: `zine-studio/static/app.js`)
- Studio Server → Image Provider: requests generation (evidence: `zine-studio/server.py`)
- Studio Server → Generated Image: saves result (evidence: `zine-studio/server.py`)
- Creator → Editorial Styles: chooses style (evidence: `README.md`)
- Creator → Photo Styles: chooses style (evidence: `README.md`)
- Creator → Collage Styles: chooses style (evidence: `README.md`)
- Creator → Botanical Styles: chooses style (evidence: `README.md`)
- Creator → Archive Styles: chooses style (evidence: `README.md`)
- Creator → Poetry Styles: chooses style (evidence: `README.md`)
- Creator → Tattoo Styles: chooses style (evidence: `README.md`)
- Fast Pipeline → Pack Manifest: reads manifest (evidence: `photo-sticker-pack-runtime/scripts/fast_pipeline.py`)
- Fast Pipeline → Artifact Paths: derives paths (evidence: `photo-sticker-pack-runtime/scripts/fast_pipeline.py`)
- Fast Pipeline → Palette Normalize: normalizes palette (evidence: `photo-sticker-pack-runtime/scripts/fast_pipeline.py`)
- Fast Pipeline → Sticker Process: processes artwork (evidence: `photo-sticker-pack-runtime/scripts/fast_pipeline.py`)
- Fast Pipeline → Quality Gate: validates output (evidence: `photo-sticker-pack-runtime/scripts/fast_pipeline.py`)
- Fast Pipeline → SVG Vectorize: exports SVG (evidence: `photo-sticker-pack-runtime/scripts/fast_pipeline.py`)
- Fast Pipeline → Artifact Cache: reuses assets (evidence: `photo-sticker-pack-runtime/scripts/fast_pipeline.py`)
- Fast Pipeline → Resume Recovery: recovers work (evidence: `photo-sticker-pack-runtime/scripts/fast_pipeline.py`)
- Sticker Process → SVG Layers: composes layers (evidence: `photo-sticker-pack-runtime/scripts/postprocess_sticker.py`)
- Palette Normalize → Sticker Process: uses ink extraction (evidence: `photo-sticker-pack-runtime/scripts/normalize_raw_palette.py`)
- Quality Gate → Sticker Process: uses ink extraction (evidence: `photo-sticker-pack-runtime/scripts/quality_gate.py`)
- Artifact Cache → Artifact Paths: derives paths (evidence: `photo-sticker-pack-runtime/scripts/cache_utils.py`)
- Artifact Cache → Pack Manifest: loads and validates (evidence: `photo-sticker-pack-runtime/scripts/cache_utils.py`)
- Artifact Cache → Quality Gate: checks quality (evidence: `photo-sticker-pack-runtime/scripts/cache_utils.py`)
- Resume Recovery → Artifact Paths: validates paths (evidence: `photo-sticker-pack-runtime/scripts/resume_utils.py`)
- Resume Recovery → Pack Manifest: loads manifest (evidence: `photo-sticker-pack-runtime/scripts/resume_utils.py`)
- Resume Recovery → SVG Layers: uses layer tools (evidence: `photo-sticker-pack-runtime/scripts/resume_utils.py`)
