wyattowalsh docs
CLI Referencegenerate command

generate command

Generate any profile asset — banner, QR, word cloud, art, skills, or README.

Synopsis

uv run python -m scripts.cli generate ENTITY_TYPE [OPTIONS]

ENTITY_TYPE is case-insensitive.

Common options

OptionApplies toNotes
--config-pathMostPath to config.yaml (default: ./config.yaml)
--output-pathMost generatorsOverride the command's output path

generate banner

Generates a light-mode SVG banner and automatically derives a dark-mode variant.

uv run python -m scripts.cli generate banner \
  --config-path ./config.yaml \
  --output-path .github/assets/img/banner.svg \
  --title "My Name" \
  --subtitle "Developer" \
  --width 1200 \
  --height 630
OptionNotes
--titleOverrides banner_settings.title
--subtitleOverrides banner_settings.subtitle
--widthOverrides banner_settings.width
--heightOverrides banner_settings.height
--optimize-banner/--no-optimize-bannerToggle SVGO post-processing

CLI options take precedence over config values. Calls generate_banner(cfg=BannerConfig(...)) twice — once for light, once for dark.

generate qr

uv run python -m scripts.cli generate qr \
  --config-path ./config.yaml \
  --output-path .github/assets/img/qr.png \
  --qr-scale 25 \
  --qr-background-path .github/assets/img/icon.svg
OptionNotes
--qr-scaleModule size in pixels
--qr-background-pathSVG to embed behind QR modules

generate word-cloud

uv run python -m scripts.cli generate word-cloud \
  --config-path ./config.yaml \
  --from-topics-md \
  --output-path .github/assets/img/wordcloud_typographic_by_topics.svg
OptionNotes
--techs-pathCustom markdown file with technology data
--output-pathOutput SVG path
--promptOptional LLM prompt for keyword curation
--from-topics-mdGenerate from .github/assets/topics.md
--from-languages-mdGenerate from .github/assets/languages.md

generate living-art

Generates the canonical living-art timelapse surface:

  • .github/assets/img/living-*.gif
  • .github/assets/img/living-art-manifest.json and .github/assets/img/living-art-preview.html
  • docs/public/showcase/living-*.gif, docs/public/showcase/living-art-manifest.json, and docs/public/showcase/living-art-preview.html when the docs site is present
uv run python -m scripts.cli generate living-art \
  --metrics-path /tmp/metrics.json \
  --history-path /tmp/history.json \
  --profile wyattowalsh
OptionNotes
--profileProfile label used for timelapse labeling
--framesAlias for --max-frames
--max-framesMaximum frames per GIF
--sizeGIF render size in px
--onlyRestrict to one style: inkgarden, topo, genetic, physarum, lenia, or ferrofluid
--metrics-pathRequired metrics JSON for live data
--history-pathRequired history JSON for chronology
--workersParallel render workers

generate timelapse

Produces the same day-by-day living-art GIF contract as generate living-art. Document these commands as aliases in practice unless the implementation diverges again later.

uv run python -m scripts.cli generate timelapse \
  --metrics-path /tmp/metrics.json \
  --history-path /tmp/history.json \
  --only physarum \
  --max-frames 120
OptionNotes
--profileOwner/label for daily snapshot generation
--metrics-pathRequired metrics JSON from fetch_metrics
--history-pathRequired history JSON from fetch_history
--max-framesUpper bound on frames per GIF
--sizeOutput frame size in px
--onlyRestrict to one style: inkgarden, topo, genetic, physarum, lenia, or ferrofluid
--workersParallel render workers

`generate all` is conditional here

The living-art step inside generate all is skipped unless both --metrics-path and --history-path are provided. The supplemental metrics step is also skipped unless a GitHub token is present in METRICS_TOKEN, GITHUB_TOKEN, or GH_TOKEN.

generate generative

Generates Lorenz-attractor / neural-network / flow-field SVG art seeded from GitHub metrics.

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

Produces generative-activity.svg, generative-activity-dark.svg, generative-community.svg, generative-community-dark.svg in .github/assets/img/.

generate skills

Renders skills.yaml into shields.io badge rows and injects them into the README.

uv run python -m scripts.cli generate skills \
  --skills-path skills.yaml

generate readme-sections

Assembles all dynamic README sections and writes them to README.md via marker blocks.

uv run python -m scripts.cli generate readme-sections \
  --config-path ./config.yaml

This command also refreshes the featured-project card contract:

  • .github/assets/img/readme/featured-card-*.svg
  • .github/assets/img/readme/featured-projects.manifest.json
  • docs/public/showcase/featured-projects/featured-card-*.svg when the docs app exists
  • docs/public/showcase/featured-projects.manifest.json when the docs app exists

It also renders the additive Metrics section from whichever validated assets are present:

  • metrics.svg
  • metrics.additional.svg
  • metrics-habits.svg
  • metrics-activity.svg
  • metrics-music.svg
  • metrics-posts.svg

Optional supplemental cards are omitted automatically when their assets are missing or invalid.

generate supplemental-metrics

Generates the repo-owned supplemental metrics cards that replace the upstream-brittle habits, activity, music, and tweets panels.

uv run python -m scripts.cli generate supplemental-metrics \
  --owner wyattowalsh \
  --repo wyattowalsh \
  --output-dir .github/assets/img \
  --manifest-path .github/assets/img/metrics-supplemental.manifest.json \
  --x-handle wyattowalsh

Produces:

  • .github/assets/img/metrics-habits.svg
  • .github/assets/img/metrics-activity.svg
  • .github/assets/img/metrics-music.svg when Spotify secrets are complete and valid
  • .github/assets/img/metrics-posts.svg when the full X OAuth 1.0a secret quartet is set and valid
  • .github/assets/img/metrics-supplemental.manifest.json

Required runtime secrets:

  • GitHub token in METRICS_TOKEN, GITHUB_TOKEN, or GH_TOKEN

Optional runtime secrets:

  • SPOTIFY_CLIENT_ID, SPOTIFY_CLIENT_SECRET, SPOTIFY_REFRESH_TOKEN
  • X_API_KEY, X_API_KEY_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET

Use uv run readme auth spotify-refresh-token once on a local machine to mint a fresh SPOTIFY_REFRESH_TOKEN for CI.