Skip to content

Spec up front: Watch on sets the text-size floor; 4K is a render setting - #47

Merged
ZLHad merged 5 commits into
mainfrom
claude/spec-watch-target
Oct 2, 2026
Merged

ZLHad merged 5 commits into
mainfrom
claude/spec-watch-target

Conversation

@ZLHad

@ZLHad ZLHad commented Oct 2, 2026

Copy link
Copy Markdown
Owner

Why

Research note 06 (#46) left one question open: the 44 px floor was written for a 1080-wide frame, so should it scale for landscape? The maintainer's answer:

  • It depends on where the film is watched. A phone needs larger text. A landscape 4K film on a computer does not need text scaled up in proportion.
  • The spec should be settled at the start. Resolution (4K or 1080p) and the rest should be guided or defaulted when the project begins.

One clarification shaped the design. On-screen text size depends on the text's share of the frame and the size of the player window, not on the resolution, because players scale the video to fit. So the floor is set per viewing target in 1080p composition pixels, and 4K is a render setting: write at 1080p and render at 2×. HyperFrames supports this with render --resolution 4k, which keeps the composition and doubles the device scale factor.

What changes

  • BRIEF: two new lines.
    • Watch on: phone | feed | desktop. feed means a landscape film shown in a phone feed, not rotated.
    • Resolution: 1080p | 4k.
  • bin/vh new:
    • Fills both lines with defaults: portrait and square → phone, landscape → desktop, editing → phone, resolution 1080p.
    • Takes --watch and --res to override them.
    • Refuses --res 4k for the hand-drawn engine, which has no 4K output.
    • CI covers the defaults, both flags and both refusals.
  • Text-size floors by target (playbook/03 §4, TASTE_CHECKLIST tts: group elevenlabs character timestamps into words #6), in 1080p composition px. Each tier is chosen so secondary text appears at about 15 px on a phone in the two phone tiers, and 18–23 px on desktop.
Watch on Headline Secondary Captions
phone 84 44 65
desktop 84 44 48
feed 150 80 115

The docs recommend a separate vertical cut over feed-sized text.

  • Readability check by target screen:
    • The scoring dimension 手机可读 becomes 目标屏可读.
    • playbook/02's phone test scales to 360 px for phone and feed and 800 px for desktop, and adds a desktop command.
    • The quick self-check and playbook 12 §6 follow the same rule.
  • Spec as a decision:
    • playbook/01 gets a spec section with defaults per type and when to ask: only when the platform is unknown and the answer would change the frame or the floor.
    • Gate ① gets a spec row, and spec becomes a nameable decision in director mode (CLAUDE.md, DECISIONS template, both READMEs).
    • CLAUDE.md's floor list points to the tiered floor.
  • 4K notes:
    • engines/README.md gets an "出 4K" subsection: canvases must be sized by devicePixelRatio, or they come out blurry.
    • The BRIEF comment covers Manim (-qk) and Remotion (--scale=2).

Checks

  • tools/ci.sh --committed (also with VH_BASH=/bin/bash): all passed, including the three new bin/vh new checks.
  • bin/vh effort standard prints the new floor line.

ZLHad added 4 commits October 2, 2026 13:13
The 44 px floor was written for 1080 wide. On-screen size depends on the text's
share of the frame and where the film is watched, not on resolution, so the
floor is tiered by a new BRIEF line, Watch on: phone (84/44/65), desktop
(84/44/48) or feed, a landscape film in a phone feed (150/80/115); 4K is
written at 1080p and rendered at 2x. bin/vh new fills Watch on and Resolution
from the type and frame, takes --watch and --res, and refuses 4K for the
hand-drawn engine. The readability check and the scoring dimension go by the
target screen. playbook/01 gets spec defaults per type and when to ask; spec
is a nameable decision.
- A phone turned sideways shows a 16:9 film about 640–760 px wide (limited by
  its height), so the desktop check scales to 640 px and secondary text lands
  at about 15–23 px; default computer players about 850–1000.
- 4K presets must match the frame (portrait-4k, square-4k; none for 4:5);
  Manim -qk --fps 30; 2D canvases sized and ctx.scale'd by devicePixelRatio,
  Three.js setPixelRatio (the intro film hard-codes 1); crop a 4K frame to
  check sharpness.
- bin/vh new refuses contradictory targets (feed for a vertical or square
  frame, phone for a landscape one) and defaults landscape memes to feed; CI
  checks each refusal's message, edit -> phone and the 4K alias.
- playbook/01: what bin/vh new actually fills, an ask rule whose example names
  no platform, a platform-to-target mapping, the review page's real label
  (我替你定了 / delegated), 08 and 09 rows; 4:5 is phone; leftovers renamed.
@ZLHad
ZLHad marked this pull request as ready for review October 2, 2026 05:29
@ZLHad
ZLHad enabled auto-merge (squash) October 2, 2026 05:29
# Conflicts:
#	CHANGELOG.md
@ZLHad
ZLHad merged commit dfea04c into main Oct 2, 2026
2 checks passed
@ZLHad
ZLHad deleted the claude/spec-watch-target branch October 2, 2026 05:31
ZLHad added a commit that referenced this pull request Oct 4, 2026
…ing (#47)

The BRIEF gains Watch on (phone, feed: a landscape film in a phone feed, desktop: a computer or a phone turned sideways) and Resolution (1080p, 4k); bin/vh new fills them from the type and frame, takes --watch and --res, and refuses 4K for the hand-drawn engine and targets that contradict the frame. The text-size floor is tiered by target in 1080p composition px (phone 84/44/65, desktop 84/44/48, feed 150/80/115), since on-screen size depends on the text's share of the frame, not the resolution; 4K is written at 1080p and rendered at 2x (matching HyperFrames preset; Manim -qk --fps 30; canvases and Three.js sized by devicePixelRatio). The readability check and the scoring dimension (目标屏可读) go by the target screen. playbook/01 gets spec defaults per type, a platform-to-target mapping and when to ask; spec is a nameable decision.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant