Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
echo "$(/home/linuxbrew/.linuxbrew/bin/brew --prefix)/bin" >> "$GITHUB_PATH"
brew install bats-core fish zsh
pip install pytest pytest-cov pyyaml jsonschema
pip install pytest pytest-cov pyyaml jsonschema numpy

- name: Install just
uses: taiki-e/install-action@b6a061addd82b81aaeca51bdf2c53cd707996e5a # just
Expand Down Expand Up @@ -79,6 +79,9 @@ jobs:
tests/test_skill_docs.py \
-v

- name: Run pytest (Hidamari movie generator)
run: python3 -m pytest tests/test_render_hidamari_movie.py -v

- name: Upload coverage report
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: always()
Expand Down
2 changes: 1 addition & 1 deletion Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ just := just_executable()
# reason; tests/test_suite_registration.bats enforces that.
# Run unit tests (pytest for hooks.py, bats for shell scripts)
test:
python3 -m pytest tests/test_hooks.py tests/test_check_oci_refs.py tests/test_curated_config.py tests/test_skill_docs.py tests/test_chairlift_config.py tests/test_renovate_config.py -v --cov=tests --cov-report=term-missing
python3 -m pytest tests/test_hooks.py tests/test_check_oci_refs.py tests/test_curated_config.py tests/test_skill_docs.py tests/test_chairlift_config.py tests/test_renovate_config.py tests/test_render_hidamari_movie.py -v --cov=tests --cov-report=term-missing
bats tests/test_libsetup.bats
bats tests/test_setup_scripts.bats
bats tests/test_privileged_setup.bats
Expand Down
1 change: 1 addition & 0 deletions docs/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ repository's local catalog with `docs/skills/hive.md` as the preflight guard.
| Track PAPPL scanning API status or scanner ownership boundary | [`pappl-scanning-boundary.md`](skills/pappl-scanning-boundary.md) |
| Work with OEM first-boot hooks | [`oem-hardware-hooks/SKILL.md`](skills/oem-hardware-hooks/SKILL.md) |
| Understand MIME defaults | [`mime-defaults.md`](skills/mime-defaults.md) |
| Regenerate the Hidamari video-wallpaper asset | [`hidamari-wallpaper.md`](skills/hidamari-wallpaper.md) |
| Understand why skill-drift was retired | [`skill-drift.md`](skills/skill-drift.md) |
| Decide whether / how to update a skill | [`skill-improvement.md`](skills/skill-improvement.md) |
| Author a new skill | [`write-a-skill.md`](skills/write-a-skill.md) |
Expand Down
84 changes: 84 additions & 0 deletions docs/skills/hidamari-wallpaper.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
---
name: hidamari-wallpaper
version: "1.0"
last_updated: "2026-09-24"
id: hidamari-wallpaper
one_line_purpose: Regenerate and validate the Hidamari looping video-wallpaper asset.
entry_point: docs/skills/hidamari-wallpaper.md
category: test-authoring
mcp_compliance_level: partial
optimization_status: draft
status: active
dependencies: [numpy, ffmpeg-libvpx-vp9]
tags: [hidamari, wallpaper, video, vp9, webm, backgrounds, system_files]
description: >-
Regenerate, validate, or replace the Bluefin Hidamari video-wallpaper asset
(bluefin-hidamari.webm) with scripts/render-hidamari-movie.py. Covers the
seamless-loop invariants, size budget, and licensing constraint that the
animation must stay original.
metadata:
type: reference
---

# Hidamari video wallpaper — projectbluefin/common

## What ships

`system_files/bluefin/usr/share/backgrounds/bluefin/bluefin-hidamari.webm`
is a 1920x1080, 12 s, 24 fps VP9 (yuv420p, no audio) loop for the Hidamari
video-wallpaper engine (`io.github.jeffshee.Hidamari`). It is an original
render — layered ocean-gradient waves with rising glow specks in the Bluefin
palette — not a re-encode of third-party art.

## Licensing constraint (do not skip)

The Wallpaper Engine workshop item named in the tracking issue carries **no
redistribution license**. Never vendor, re-encode, or derive the shipped
movie from workshop content. The asset must stay reproducible from
`scripts/render-hidamari-movie.py`, which generates original frames only. If
a licensed render is ever donated upstream, replace this constraint in the
same PR that changes the source.

## Regenerating the asset

```bash
# needs python3 + numpy, and an ffmpeg with libvpx-vp9 on PATH
# (or FFMPEG=/path/to/ffmpeg; a static build works fine)
python3 scripts/render-hidamari-movie.py # ~3 min, 1080p
python3 scripts/render-hidamari-movie.py --preview-frame 0.5 # one PNG frame
```

Tunables: `--width/--height/--fps/--seconds/--crf/--dither`. Defaults are the
shipped values (1080p, 24 fps, 12 s, crf 24, dither 1.4). Deterministic: the
same script and ffmpeg/libvpx version produces a byte-identical render.

## Invariants the tests enforce

`tests/test_render_hidamari_movie.py` (run via `just test` and the
unit-tests workflow) pins:

- **Seamless loop** — `luminance(t=0) == luminance(t=1)`; every temporal term
uses integer harmonic counts. With `--dither 0` frames 0 and N are
byte-identical; with grain on, the wrap may differ only by <= 4/255.
- **Determinism** — palette LUT and bubble seed table derive from
`Config.seed`; changing the seed forks the animation.
- **Size budget** — shipped WebM stays under 4 MiB (OCI layer cost).
- **Format** — EBML magic and size budget.

When editing the generator, keep every temporal term an integer number of
cycles per loop or the wrap seam will drift and `test_loop_wrap_is_seamless`
will fail.

## Verify a rebuilt asset by hand

```bash
ffprobe -show_entries format=duration,size -of default=nw=1 bluefin-hidamari.webm
ffmpeg -v error -i bluefin-hidamari.webm -f null - # must decode clean
```

## Related

- Epic: Wallpaper Enhancements (Damask, Hidamari, ChairLift bundles)
- ChairLift bundle for the engine lands via `video-wallpaper.Brewfile`
(separate sub-issue; see `docs/skills/brew-lifecycle/` for the bundle-file
conventions).
21 changes: 21 additions & 0 deletions docs/skills/index.json
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,27 @@
"last_updated": "2026-09-25",
"doc_type": "runbook"
},
{
"id": "hidamari-wallpaper",
"name": "hidamari-wallpaper",
"one_line_purpose": "Regenerate and validate the Hidamari looping video-wallpaper asset.",
"entry_point": "docs/skills/hidamari-wallpaper.md",
"category": "test-authoring",
"status": "active",
"tags": [
"hidamari",
"wallpaper",
"video",
"vp9",
"webm",
"backgrounds",
"system_files"
],
"description": "Regenerate, validate, or replace the Bluefin Hidamari video-wallpaper asset (bluefin-hidamari.webm) with scripts/render-hidamari-movie.py. Covers the seamless-loop invariants, size budget, and licensing constraint that the animation must stay original.",
"version": "1.0",
"last_updated": "2026-09-24",
"doc_type": "reference"
},
{
"id": "hive",
"name": "hive",
Expand Down
3 changes: 2 additions & 1 deletion docs/skills/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
This file is a human-readable mirror of `index.json`. Both are generated by
`scripts/generate_skill_index.py` — do not hand-edit either file.

Generated: 2026-09-26 · schema 1.0 · 44 skills
Generated: 2026-09-26 · schema 1.0 · 45 skills

| id | category | status | one-line purpose |
|---|---|---|---|
Expand All @@ -24,6 +24,7 @@ Generated: 2026-09-26 · schema 1.0 · 44 skills
| [governance](governance.md) | meta | active | Manage CODEOWNERS, triager roles, and governance sync. |
| [gpu-toolkit-interface](gpu-toolkit-interface.md) | meta | active | Define the shared GPU vendor toolkit interface that all GPU support implementations must satisfy. |
| [hardware-testing](hardware-testing.md) | test-authoring | active | File hardware test reports and apply promotion policy. |
| [hidamari-wallpaper](hidamari-wallpaper.md) | test-authoring | active | Regenerate and validate the Hidamari looping video-wallpaper asset. |
| [hive](hive.md) | ci-ops | active | Route factory work through Hive coordination and labels. |
| [hive-automerge](hive-automerge.md) | ci-ops | active | Queue reviewed PRs for Hive's auto-merge-on-green sweep. |
| [hive-review](hive-review.md) | ci-ops | active | Review live Hive and GitHub state for actionable work. |
Expand Down
Loading
Loading