Skyphusion Labs builds free, open source software that is not for sale: Vivijure self-hosted AI film studio (v1.0), Postern agent mailbox (v1.4), Prism multimodal AI with public BYOK, Hollow Grid, security-audit, and more. Founded by Conrad Rockenhaus; one architect and five collaborators. Blog skyphusion.net, lab skyphusion.org, code github.com/skyphusion-labs.
Social preview images for GitHub repo sharing and the @skyphusion X profile banner.
upload-via-ui.mjs (Playwright) after a one-time --login.Brand mark: fusion-rising icon from assets/logo-icon.svg (same as skyphusion.org).
cd brand
python3 generate.py
Outputs land in output/social-preview/ and output/x-banner/.
GitHub does not expose a public API for social preview images. Use the Playwright uploader (one-time browser login, then batch upload):
npm install
npx playwright install chromium
node upload-via-ui.mjs --login # once: log into GitHub in the opened window
node upload-via-ui.mjs # uploads every PNG in output/social-preview/
Single repo: node upload-via-ui.mjs --repo skyphusion-labs/vivijure
The legacy upload-social-previews.sh script is kept for reference but GitHub returns 404 on that REST path.
Edit repos.json to change taglines, accent colors, motif, or chip text per repo, then regenerate and re-upload.
GitHub repository topics are the org’s public category tags. They drive topic search, related-repo discovery, and the “About” chips on each repo page. GitHub allows at most 20 topics per repo.
The canonical topic set for every public skyphusion-labs repo lives in topics.json, alongside repos.json. Each entry has:
| Field | Purpose |
|---|---|
owner / repo |
GitHub slug (skyphusion-labs/vivijure) |
family |
Constellation grouping for batch updates (vivijure, hollow-grid, postern, sites, infra, org, …) |
topics |
Sorted topic list (1–20). Include both product family tags (vivijure, mud, postern) and stack tags (cloudflare-workers, typescript, agpl). |
Prereqs: gh authenticated with org admin/repo scope, jq installed.
cd brand
chmod +x update-topics.sh
./update-topics.sh --dry-run # show planned changes only
./update-topics.sh # push catalog -> GitHub for all public repos
./update-topics.sh --check # CI/drift gate: exit 1 if live != catalog
./update-topics.sh --repo vivijure # single repo
./update-topics.sh --family vivijure # whole constellation
The script uses PUT /repos/{owner}/{repo}/topics (full replace). Always edit topics.json first, then run --dry-run before applying.
topics.json (and repos.json if it gets a social preview) before or right after the public flip.--family pass.Topic conventions (org-wide):
vivijure, vivijure-module, the-hollow-grid, hollow-grid, postern, prism, common-thread, search-mcp.cloudflare-workers, self-hosted, agpl, open-source, typescript / python / golang as appropriate.runpod, cuda, gpu, plus model-specific tags (sdxl, ltx-video, real-esrgan, …).GitHub’s About box (description + homepage URL on the repo page and org listing) is separate from topics. The canonical set lives in seo-metadata.json.
| Field | Purpose |
|---|---|
description |
One-line pitch (shown in org repo list and search snippets) |
homepage |
Live demo, product site, or primary docs entry point |
cd brand
chmod +x apply-seo-metadata.sh
./apply-seo-metadata.sh --dry-run
./apply-seo-metadata.sh
./apply-seo-metadata.sh --check
./apply-seo-metadata.sh --repo prism
Edit seo-metadata.json when a repo goes public, ships a live URL, or the pitch changes. Pair with README/package.json homepage and keywords in the product repo itself.
See also distribution.md for npm, PyPI, and GHCR publish targets.
Workflow .github/workflows/oss-discoverability-drift.yml runs on PRs that touch the catalogs, on merges to main, weekly (Mondays 14:00 UTC), and on demand. It fails if:
topics.json or seo-metadata.json (reverse coverage; see #17).cd brand
./check-catalog-coverage.sh # every public repo has catalog rows
./update-topics.sh --check
./apply-seo-metadata.sh --check
After editing a catalog, apply live state before merge:
cd brand
./update-topics.sh # or --repo / --family
./apply-seo-metadata.sh # or --repo
./update-topics.sh --check
./apply-seo-metadata.sh --check
Archived repos are skipped by the About-metadata check (GitHub blocks writes).