# The poem video skill that declares temples and tree trunks as static

> An Agent Skill for turning classical Chinese poems into vertical Chinese-art video, whose real content is a list of failure modes from image-to-video models and a refusal to let the camera move, with acceptance measured on the encoded MP4 rather than the browser preview.

**Mr-funny/hbg-classical-poem-silk-video** — Agent Skill for turning Chinese classical poems into vertical Chinese-art videos with ImageGen stills, Docker I2V, calligraphy captions, retained ambience, BGM and final MP4 QA.

- Repository: https://github.com/Mr-funny/hbg-classical-poem-silk-video
- Stars: 363 · Forks: 54
- Language: Shell
- License: MIT
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/mr-funny-hbg-classical-poem-silk-video

## Static anchors are the design, not a safety rail

The premise is that a classical painting should not come apart when it moves. Rather than treating motion as something to add, this skill spends most of its instructions on what must not change: buildings, mountains, tree trunks, shorelines and human torsos are declared static anchors, the subject count and body centres are fixed, and duplication, merging, new silhouettes and branches growing out of nothing are explicitly forbidden.

The failure list behind those rules reads like a bug report from real generations. Clouds drift and turn into auspicious cloud motifs while the temple is rebuilt behind them. Birds multiply as they fly. A walking horse grows a leg, lifts off the ground, or swaps bodies mid-stride. The response to a horse is specific enough to be useful: allow one weight shift or a small step, then check four hooves, ground contact and body consistency.

Two of the four stated principles carry most of the weight. The camera is locked, so motion has to come from objects already in the picture rather than from a post-production zoom pretending to be animation. And one main action per shot, with one or two environmental assists, because several motions at once push the model to recompose the whole frame.

## Motion prompts have four parts, and the last one is a prohibition

The image-to-video step is driven by prompts written in a fixed four-part structure: static anchors, a local action zone, a stable ending, and anti-hallucination bans. The ordering matters, because the ending and the bans are what stop a two-second clip from drifting into a different painting by its final frame.

Anchors are described physically rather than abstractly. Wings move around the body centre, water ripples spread from the point of contact, a willow leaf may not leave its branch. That kind of statement is checkable in the QA pass, unlike asking for natural movement.

Style is handled by branching rather than averaging. Where a generator would produce the same yellowed silk tone for every frame, this skill keeps a shared Chinese-painting quality and switches among channels per shot, naming ink wash, gongbi, blue-green and figures-with-horses as the branches it uses. The visual variety comes from choosing a channel that fits the line of poetry, not from randomising the look.

## Per line by default, two lines per shot for a long poem

Storyboarding is mechanical on purpose. Within four lines the default is one line per shot; a longer poem defaults to two consecutive lines per shot, which keeps the clip count down without letting a single shot carry two unrelated images.

Before that, the poem is parsed for era, place, season, time of day, imagery, action and emotional arc, and the arc is what drives the transitions. The bundled examples show the two modes: a four-line poem as four shots with the palette moving from cold blue night toward warm fisherman's fire, and an eight-line poem as four shots of two lines each with the four visual channels assigned to match the meaning of the lines.

Stills come from the agent's own built-in ImageGen rather than from a script, with a safe area reserved for the vertical calligraphy. Subtitles use Ma Shan Zheng in two vertical columns, right column written first and left column second, revealed character by character, and the audio keeps each shot's model-generated ambience with an optional continuous music bed underneath. Transitions are declared in the prompt itself, with a 1.2 second natural dissolve named as the default in one of the examples.

## Acceptance is measured on the encoded MP4

The rule that catches most projects out is here: the browser preview is not evidence, the final encoded file is. So the skill ships a QA script that reads the delivered MP4 rather than the source frames, because that is where black frames and dropped transitions actually appear.

```bash
skill/classical-poem-silk-video/scripts/final_media_qa.sh \
  final.mp4 qa/final
```

What comes out is a probe result, black-frame detection, silence detection, volume detection, stills at 10, 25, 50, 75 and 90 per cent plus the final frame, and a contact sheet built from the encoded video. The transition side is handled by matching video and ambience rather than cutting: `xfade` for the picture, `acrossfade` for the original sound, with music playing continuously underneath so a cut does not restart the audio.

For the checks that need a specific instant, such as a hoof touching down or a bird count at a transition midpoint, the same script takes a TSV of timestamps and labels:

```bash
skill/classical-poem-silk-video/scripts/final_media_qa.sh \
  final.mp4 qa/final qa-timestamps.tsv
```

## Four install paths, and the recommended one is a sentence

The preferred method is to hand your agent a paragraph of natural language and let it do the work: identify the global skills directory, back up any existing version before updating, verify that `SKILL.md`, agents, references, scripts and the font assets are all present, then run a shell syntax check, a Python compile check and a skill validation. The same paragraph tells the agent not to read, print or upload API keys, cookies, Chrome profiles, local videos, audio or generated material, which puts the privacy stance in the install instruction rather than in a policy document nobody reads.

The scripted routes install the same directory, `${CODEX_HOME:-~/.codex}/skills/classical-poem-silk-video`, and differ by one flag:

```bash
curl -fsSL https://raw.githubusercontent.com/Mr-funny/hbg-classical-poem-silk-video/main/install.sh | sh
```

```bash
curl -fsSL https://raw.githubusercontent.com/Mr-funny/hbg-classical-poem-silk-video/main/install.sh | sh -s -- --claude
```

Worth naming plainly: both of those pipe a script fetched over the network straight into a shell, so they carry the trust model that implies. The manual route clones the repository and copies `skill/classical-poem-silk-video/` into place, which is the one to use if you would rather read the installer first.

## Image-to-video lives in a second project with a second licence

The skill is not self-contained, and the boundary is deliberate. Stills come from the agent's built-in ImageGen, but image-to-video, and the optional removal of the model's watermark star, depend on a separate project, the HBG Gemini Flow Suite, run as a Docker container named `gemini-flow-suite` with the workspace mounted at `/workspace` and outputs at `/data/outputs`. The skill's generation flow calls Docker and nothing else, specifically so it never has to drive your browser during generation.

That runtime requires a user-controlled authorisation completed according to the runtime repository's own instructions, and the skill ships a prerequisite check for it:

```bash
skill/classical-poem-silk-video/scripts/check_prerequisites.sh
```

So there are two installations, two licences and two sets of credentials, and the second is not redistributed here. The details of what the skill may and may not touch live in `references/runtime-contract.md`, and the project states plainly that it does not contain, upload or print cookies, API keys or browser profiles.

## One release, one reference film, and two licences

The published example is specific enough to be a test case. The eight-line poem 钱塘湖春行 becomes four shots of two lines each, one per visual channel, each shot around nine seconds with three 1.2 second cross-dissolves, delivered at 1080x1920 and 30fps in H.264 with AAC, running 32.44 seconds. The finished film is attached to the release, and a full retrospective sits in `docs/article.md`.

Against that, the release history is one entry. Version v0.1.0 was published on 2026-08-03, the same day as the last push, and the repository is not archived since. The primary language GitHub reports is Shell, which fits a project whose logic is prompts, a skill definition and shell scripts rather than application code. The tree carries `tools/` for CI validation and privacy scanning, `examples/` with sanitised storyboards and prompts, and a CI workflow badge, so the checks exist even though the release cadence has not started yet.

Licensing is layered as it should be: the skill, scripts and documentation are MIT, the Ma Shan Zheng brush font is under the SIL Open Font License 1.1 with its licence file in the skill's assets, and the Gemini Flow Suite remains a separate project under its own terms.

## Conclusion

This skill suits anyone who has watched an image-to-video model rebuild a temple because a cloud moved, and who wants the failure handled by construction rather than by re-rolling. It does not stand alone: image-to-video runs through a separate Docker project with its own licence and its own user-controlled authorisation, so there are two things to install and keep in step. Verify first that your agent can append an ImageGen still and that Gemini image-to-video is reachable through the runtime container, that Ma Shan Zheng and ffmpeg tooling are present, and that you are willing to accept a project with a single tagged release so far.

## FAQ

### What does the hbg-classical-poem-silk-video skill do?

It turns a classical Chinese poem into a vertical Chinese-art video, one line or two lines per shot, with stills from the agent's built-in ImageGen, image-to-video through Docker, brush-style vertical captions, retained model ambience and optional background music.

### How do I install the classical-poem-silk-video skill?

Either hand your agent the natural-language install paragraph from the README, which makes it detect the skills directory, back up any old copy and verify the assets, or run the installer with `sh` for Codex or `sh -s -- --claude` for Claude Code. Both scripted forms install into `${CODEX_HOME:-~/.codex}/skills/classical-poem-silk-video`.

### Why does the skill lock the camera?

Because a post-production push-in imitates animation without animating anything, and because motion is meant to come from objects already in the painting. Locking the camera is what forces the model to move water, birds or branches instead of the frame itself.

### What does final_media_qa.sh check?

It reads the delivered MP4 rather than the source frames, producing an ffprobe result, black-frame, silence and volume detection logs, stills at 10, 25, 50, 75 and 90 per cent plus the last frame, and a contact sheet. An optional TSV of timestamps lets it sample specific moments such as a transition midpoint.

### Does the skill need a separate project for image-to-video?

Yes. Image-to-video and the optional watermark star cleanup depend on the separate HBG Gemini Flow Suite running as the Docker container `gemini-flow-suite`, with the workspace at `/workspace` and outputs at `/data/outputs`, and it needs an authorisation you complete yourself before `check_prerequisites.sh` will pass.

## Sources

- [Issues](https://github.com/Mr-funny/hbg-classical-poem-silk-video/issues)
- [License: MIT](https://github.com/Mr-funny/hbg-classical-poem-silk-video/blob/main/LICENSE)
- [Mr-funny/hbg-classical-poem-silk-video on GitHub](https://github.com/Mr-funny/hbg-classical-poem-silk-video)
- [README](https://github.com/Mr-funny/hbg-classical-poem-silk-video/blob/main/README.md)
- [Releases](https://github.com/Mr-funny/hbg-classical-poem-silk-video/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/mr-funny-hbg-classical-poem-silk-video
