Files
zooqueen e0266e8a63 docs: point the skills and the docs site at our own stack
The workflow skills, the CLI reference, and the guides described a vendor's
services: a separate account to sign into, a credential file beside the
project, a music library and asset search that are not ours, and preview
media on a CDN we do not run.

Auth is now one Hanzo IAM token in $HANZO_API_KEY, read from Hanzo KMS —
one credential for voice, music, sound effects, images, video, the shared
catalog, and cloud rendering. The credential guide, the cloud-render
pages, and the CLI auth reference all say the same thing, because there
is now only one thing to say.

Docs previews resolve from the docs site's own /images/ path, produced by
our own generator. They are not committed (docs/images/ is ignored), so a
deploy must run `bun run generate:catalog-previews` first — the same gap
as before, minus a CDN we cannot publish to. Element grounding calls
zen-vl through api.hanzo.ai rather than a third-party vision endpoint,
and the LUT library builds every look from params, so no look needs a
host at all.

Command examples read `npx @hanzo/frame` / `hanzo frame` throughout.
Three navigation entries left dangling by the rebrand now resolve.

The changelog and the weekly archive keep their entries as written and
say plainly that pre-port entries describe the upstream product.
2026-08-13 17:29:50 -07:00

3.9 KiB
Raw Permalink Blame History

Test set — diverse scenes for template stability regression

Canonical test corpus for verifying templates don't regress when we add features. Pick cases that stress different parts of the pipeline — blend mode, matte quality, baked-in graphics, luminance extremes, motion.

The test set

All in ~/Downloads/caption-test-videos/ (720×1290, ~8s, 9:16). Add landscape + 1:1 as we grow.

Case Scene Stress test
Sunset_Stroll Outdoor selfie at sunset, palm trees, boardwalk Bright backdrop → default screen blend fails; needs dark text + normal blend
Nature_Vibe Forest golden-hour + baked timestamp bottom-left + watermark top-right Baked graphics avoidance; warm-mid luminance
Gym_Grind Dark gym + dark tank top + phone-mirror selfie Low luminance → matte difficulty; screen blend natural fit
AI_Insights Podcast studio + neon "THE DIALOG" sign + window view Competing graphics in BG (sign, city skyline); mid-tone
Kitchen_Buzz Warm kitchen, apron, smiling Baseline friendly case
Tech_Trends Clean white studio + mic Max bright backdrop — needs dark text or opaque BG
Street_Talk Walking city street, handheld Handheld motion + bright outdoor
Outdoor_Hype Forest + Instagram watermark top + sun flare Baked graphic + bright + motion

Usage

for case in Sunset_Stroll Nature_Vibe Gym_Grind AI_Insights; do
  bash scripts/render-and-composite.sh /tmp/ts-${case}
done

Regression checklist

For every new template or significant change, re-run the test set and verify:

  • Sunset_Stroll: captions legible on bright sunset (Cinematic cream/screen washes out → use Standard mode, opaque rail)
  • Nature_Vibe: captions don't collide with baked timestamp (bottom-left) or watermark
  • Gym_Grind: captions visible on dark gym despite dark subject
  • AI_Insights: captions don't fight with "THE DIALOG" neon sign
  • Tech_Trends: dark text + normal blend on pure white studio
  • Each case: 0.5s+ per caption, no wrap-into-subject-head-zone
  • Each case: FG layer for 9:16 portraits where subject fills frame

Bugs we've fixed via this test set

  • 2026-04-23: Hardcoded text-shadow: warm-glow + dark-drop in all templates ignored cap_color — dark text got overwhelmed by bright halo on bright backgrounds. Fix: TEXT_SHADOW placeholder with luminance-adaptive default.
  • 2026-04-23: Hardcoded filter: brightness(1.12) lightened dark text, shifting it toward neutral. Fix: TEXT_FILTER placeholder that drops brightness boost for dark colors.
  • 2026-04-23: BLEND_MODE and CAP_COLOR hardcoded in new templates — plan.json overrides ignored. Fix: placeholders added to all 4 templates.

Expansion plan

Still need to add:

  • 1 × 16:9 landscape (letterbox one of the above, or add a new source)
  • 1 × 1:1 square (if available)
  • 1 × multi-speaker (speaker diarization test)
  • 1 × foreign language (CJK rendering test)
  • 1 × shot-cut (PySceneDetect-required case)
  • 1 × product/B-roll (no talking head — refuse gate)