From 1c3551b03021f3f81c2cbd2f2bb6341486663f91 Mon Sep 17 00:00:00 2001 From: damocles Date: Wed, 11 Nov 2026 22:17:55 +0100 Subject: [PATCH] hyperhive-the-movie: date-only clock, milestone captions, less elasticity, AV1 webm, --help The clock shows the date without the time of day. Elasticity drops from 0.3 to 0.1 so the tree sways less through large refactors. Captions come from the git tags and a tracked milestones file with a milestone per component and service at the commit that introduced it, plus growth markers (commit counts, 50k-line steps, issue and PR id doublings). --record writes gource-hyperhive.webm, AV1 in WebM through SVT-AV1, instead of a near-lossless H.264 file. --help (or -h) lists the flags; an unknown argument prints it on stderr and exits 2. --- .../hyperhive-the-movie-milestones.txt | 70 +++++++++++++++++++ nix/packages/hyperhive-the-movie.nix | 59 ++++++++++++++-- 2 files changed, 124 insertions(+), 5 deletions(-) create mode 100644 nix/packages/hyperhive-the-movie-milestones.txt diff --git a/nix/packages/hyperhive-the-movie-milestones.txt b/nix/packages/hyperhive-the-movie-milestones.txt new file mode 100644 index 000000000..fb656befb --- /dev/null +++ b/nix/packages/hyperhive-the-movie-milestones.txt @@ -0,0 +1,70 @@ +# Milestones shown as captions in `nix run .#hyperhive-the-movie`, one per line: +# YYYY-MM-DD|caption +# Lines starting with # and blank lines are ignored. Git tags are shown too +# (tag name, at the tagged commit's date), so `git tag ` marks a +# milestone without editing this file. Dates are where a component first +# appears in the history; edit freely. Growth markers: commit counts doubling +# from 512, every 50k lines overall, issue or PR ids doubling from 256, and +# the first issue on the in-hive forge. +2026-05-14|first commit +2026-05-14|per-container web UI and dashboard +2026-05-16|private forge in a container +2026-05-20|first issue on the in-hive forge +2026-05-20|512 commits +2026-05-22|issue or PR 256 +2026-05-22|agents work through the forge +2026-05-25|the hive-forge CLI +2026-05-27|issue or PR 512 +2026-05-29|matrix chat +2026-05-29|50k lines +2026-05-30|hive-gateway in front of everything +2026-05-31|1024 commits +2026-05-31|CI runner on the forge +2026-06-01|issue or PR 1024 +2026-06-02|hive-c0re drops root +2026-06-03|hive-wide knowledge repo and matrix space +2026-06-03|WireGuard mesh between hives +2026-06-05|PRs without forks (agit) +2026-06-13|audit trail of privileged actions +2026-06-15|agents with accounts on other matrix homeservers +2026-06-22|2048 commits +2026-06-22|internal forge mandatory, federation between hives +2026-06-27|issue or PR 2048 +2026-07-04|100k lines +2026-07-06|job DAG queue +2026-07-11|GitHub accounts for agents +2026-07-14|accounts on external forges +2026-07-20|GUI agents (screen MCP) +2026-07-26|forge notifications +2026-07-31|GitHub notifications for agents +2026-08-05|swarm controller +2026-08-05|Authelia, the swarm's identity provider +2026-08-11|swarm UI +2026-08-14|NATS messaging in the swarm +2026-08-16|150k lines +2026-08-16|swarm metrics in Grafana +2026-08-16|VictoriaMetrics metrics store +2026-08-18|OpenTelemetry collector for the swarm +2026-08-24|swarm-wide log store +2026-08-30|the swarm's secret store +2026-08-31|4096 commits +2026-09-08|issue or PR 4096 +2026-09-09|subagent daemon +2026-09-11|OIDC client secrets published to the secret store +2026-09-13|200k lines +2026-09-20|swarm matrix starts replacing our own broker +2026-09-29|ACP backends +2026-10-11|250k lines +2026-10-12|swarm builder and review classifier +2026-10-14|claude login from the swarm UI +2026-10-16|CI run metrics on a Grafana board +2026-10-17|archetypes +2026-10-17|300k lines +2026-10-22|notification router +2026-10-27|Attic binary cache as a swarm service +2026-10-27|Squid egress proxy on every hive host +2026-10-28|350k lines +2026-10-29|egress allow list per agent +2026-11-06|operator handbook +2026-11-08|400k lines +2026-11-10|restic backups of every agent's state diff --git a/nix/packages/hyperhive-the-movie.nix b/nix/packages/hyperhive-the-movie.nix index 8faf153ea..54378c16d 100644 --- a/nix/packages/hyperhive-the-movie.nix +++ b/nix/packages/hyperhive-the-movie.nix @@ -1,6 +1,9 @@ # `nix run .#hyperhive-the-movie` — gource visualisation of the git # history of the repo it is run from. `-- --record` renders -# gource-hyperhive.mp4 in the cwd instead of opening a window. +# gource-hyperhive.webm in the cwd instead of opening a window: AV1 in WebM, +# which plays in current Firefox and Chrome and compresses this flat, +# dark picture far better than H.264. Milestones show as captions, from the git +# tags of the repo and from `hyperhive-the-movie-milestones.txt`. { lib, writeShellApplication, @@ -27,8 +30,39 @@ writeShellApplication { gnugrep ]; text = '' + usage() { + cat <<'USAGE' + hyperhive-the-movie - gource visualisation of this repo's git history + + Usage: nix run .#hyperhive-the-movie -- [--record | --help] + + (no flag) open a gource window and play the history + --record render gource-hyperhive.webm in the current directory + instead (1280x720, 30 fps, AV1 in WebM; plays in recent + Firefox and Chrome). Needs no display. + -h, --help show this text + + Run it from inside the repo. Captions come from two places: the git tags + (shown at the tagged commit's date) and the milestones file, + nix/packages/hyperhive-the-movie-milestones.txt, one "YYYY-MM-DD|caption" + per line. Edit that file, or tag a commit with `git tag NAME COMMIT`. + USAGE + } + record=false - [[ "''${1:-}" == "--record" ]] && record=true + case "''${1:-}" in + "") ;; + --record) record=true ;; + -h | --help) + usage + exit 0 + ;; + *) + echo "hyperhive-the-movie: unknown argument '$1'" >&2 + usage >&2 + exit 2 + ;; + esac cd "$(git rev-parse --show-toplevel)" @@ -50,13 +84,28 @@ writeShellApplication { fi done < <(git log --format='%an' | sort -u) + # Milestone captions, `unix time|text`, sorted by time: the tracked + # milestones file (`YYYY-MM-DD|text`) and the repo's git tags. + captions="$(mktemp)" + trap 'rm -f "$captions"' EXIT + { + while IFS='|' read -r day text; do + [[ -z "$day" || "$day" == \#* ]] && continue + echo "$(date -d "$day" +%s)|$text" + done < ${./hyperhive-the-movie-milestones.txt} + git for-each-ref --format='%(creatordate:unix)|%(refname:short)' refs/tags + } | sort -n > "$captions" + # Catppuccin Mocha, as in frontend/packages/shared/src/colors.css. args=( -s 1 -1280x720 --auto-skip-seconds 1 --multi-sampling --stop-at-end + --date-format "%Y-%m-%d" + --caption-file "$captions" --caption-size 28 --caption-duration 4 + --caption-colour f9e2af --background-colour 1e1e2e --font-colour cdd6f4 --highlight-colour f9e2af --highlight-users --highlight-dirs --filename-colour 585b70 --dir-colour 89b4fa - --bloom-multiplier 1.5 --bloom-intensity 0.75 --elasticity 0.3 + --bloom-multiplier 1.5 --bloom-intensity 0.75 --elasticity 0.1 --title hyperhive --logo ${logo} --logo-offset 20x20 --user-image-dir "$avatar_dir" @@ -68,8 +117,8 @@ writeShellApplication { gource "''${args[@]}" --output-ppm-stream - --output-framerate 30 \ | ffmpeg -y -r 30 -f image2pipe -vcodec ppm -i - \ -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" \ - -vcodec libx264 -preset ultrafast -pix_fmt yuv420p -crf 1 -threads 0 -bf 0 \ - gource-hyperhive.mp4 + -c:v libsvtav1 -preset 6 -crf 34 -g 300 -pix_fmt yuv420p \ + gource-hyperhive.webm else gource "''${args[@]}" fi