wyattowalsh docs

Generative Art

Lorenz / neural / flow-field SVG art seeded deterministically from GitHub metrics.

Modules

  • scripts/generative.py — top-level orchestrator
  • scripts/art/shared.pyseed_hash(), _hex_slice(), Noise2D
  • scripts/banner_patterns.pyPatternType enum (shared with banner)

How it works

  1. fetch_metrics fetches live GitHub data → metrics.json
  2. seed_hash(metrics) produces a stable SHA-256 hex string from the metrics dict
  3. The seed initializes numpy's default_rng — output is fully deterministic for a given metrics snapshot
  4. Four SVG files are generated: activity (light/dark) + community (light/dark)

Entry points

from scripts.generative import generate_community_art, generate_activity_art

generate_activity_art(metrics=metrics_dict)
generate_community_art(metrics=metrics_dict)

CLI

# Fetch metrics first
uv run python -m scripts.fetch_metrics \
  --owner wyattowalsh \
  --repo wyattowalsh \
  --output /tmp/metrics.json

# Generate art from metrics
uv run python -m scripts.cli generate generative \
  --metrics-path /tmp/metrics.json

Output files

FileDescription
.github/assets/img/generative-activity.svgActivity-seeded attractor (light)
.github/assets/img/generative-activity-dark.svgActivity-seeded attractor (dark)
.github/assets/img/generative-community.svgCommunity-seeded attractor (light)
.github/assets/img/generative-community-dark.svgCommunity-seeded attractor (dark)

PatternType selection

The active pattern is chosen based on metrics hash characteristics — callers don't select it manually. All five live PatternType values (LORENZ, NEURAL, FLOW, MICRO, AIZAWA) may appear.