@hypit/caption-travel
v0.1.0
Published
Travel: tightly tracked uppercase reading rows in stationary pages for Hypit.
Downloads
267
Readme
Travel captions for Hypit
Tightly tracked yellow uppercase rows appear together, accumulate into stationary two-row pages and replace the previous page. Complete page geometry is reserved before reveal: adding the second row never moves the first. Single-row pages are centered by their own height.

Motion preview uses new copy and authored demonstration timing, without audio.
Install
Install in your video project and retain its package.json and lockfile:
npm install --save-exact @hypit/[email protected]
hypit vocabulary @hypit/caption-travelRequires Hypit 0.3.1 or a compatible release and Node 22.15 or later. The Source import @hypit/caption-travel@1 identifies the logical module ABI; npm version 0.1.0 identifies this implementation.
Install and connect
This independent author package owns its activation, Style, schedule and renderer. It consumes the existing CaptionDocument, CaptionTiming, finite Timeline, Frame and explicit fonts and produces an ordinary VisualTrack. Authors do not prepare a new subtitle data format.
The exported recipe is @hypit/caption-travel/recipes/travel. The following is an integration fragment: its surrounding Source supplies story.caption, resolved caption-time, speech.timeline and caption-frame.
<import from="@hypit/caption-travel@1" as="travel"/>
<import source="@hypit/caption-travel/recipes/travel" as="look"/>
<import from="@hypit/media@1" as="asset"/>
<asset:Font id="font" src="./assets/fonts/THEBOLDFONT-FREEVERSION.ttf"
weight="700" style="normal"/>
<travel:Style id="style" recipe={look.caption.travel} font={font}/>
<travel:Track id="captions" document={story.caption} timing={caption-time}
timeline={speech.timeline} within={caption-frame}>
<travel:Use style={style}/>
</travel:Track>Include captions.track in Film. Script speech uses the host's Narrative Caption adapter before this Track:
<import from="@hypit/narrative-caption@1" as="caption-time"/>
<caption-time:Timing id="caption-time" document={story.caption}
binding={story.caption-binding} projection={story-time.projection}/>Use accepts an optional named Window through during, plus an optional speaker role. An omitted Window covers all matching Cues. Later Uses take precedence, including Hidden, without restarting the Cue clock.
Style accepts an exact Font or an ordered FontStack. <travel:Fallback font={fallback}/> children append exact faces or stacks. The final visual study selected the newer The Bold Font, 700 normal, after comparing it with the older file, Lemon Milk Bold, Clash Display Bold and Poppins ExtraBold. The newer R and neighboring letter shapes matched better in actual browser rendering. Exact source font identity remains unproven. The font is an explicit author-supplied resource; it is not bundled, downloaded during rendering or replaced with an implicit system font.
Script attributes
<passage><HOST>
Ordinary text works without attributes. ||
Follow{group=thought} through{group=thought} with your idea. ||
Pause and let{break-before} it breathe.
</passage>| Attribute | Meaning |
| --- | --- |
| group=name | Consecutive units with the same nonempty name stay together while wrapping. An oversized group fits down as one row. |
| break-before | Boolean; start a new visual row before this unit. It also splits an otherwise continuous group at that point. |
All attributes are optional. || separates cues, never internal lines. Cue changes restart paging. Normal rows wrap from loaded-font measurements and the width budget. With break-on-punctuation, common trailing clause punctuation also finishes a row. Indivisible Script units preserve internal displayed words/separators; each display Word retains its own attributes. Unrelated attributes are ignored. This family does not implement per-word emphasis colors or size roles.
Rows reveal at their first unit's original time and remain until the next page or cue end. Internal word times stay in CaptionTiming, even though all words in the row appear together. The page is horizontally centered by actual glyph bounds and vertically centered by its final height. There are no word-specific positions or animation offsets.
Style parameters
Component defaults are below. The exported recipe is a 1080 px portrait starting point: size96, y.748, line-width8.4 and line-gap.46. Adjust size/placement for the target Frame; the comparison preview uses y.5 to show the typography centrally.
| Parameter | Default | Meaning | | --- | --- | --- | | x / y | .5 / .514 | Page center as Frame width/height fractions. | | width | .94 | Maximum width as a Frame fraction. | | size | 192 | Font size in pixels. | | tracking | -.06 | Letter spacing in font-size em, including the separator's normal spacing behavior. | | word-spacing | .06 | Additional spacing on separators, in font-size em; changes word gaps without changing letters within a word. | | uppercase | true | Uppercase displayed text. | | line-width | 9 | Reading width in font-size em; the smaller of this and viewport width is used, with shadow allowance removed. | | lines-per-page | 2 | Positive integer row count before replacing the page. | | break-on-punctuation | true | Finish a row after common clause/sentence punctuation at the end of a group. | | line-gap | .23 | Vertical gap after actual row ink, in base-font em before row fitting. | | color | #efff3b | Text paint, six/eight-digit hex or transparent. | | fade-duration | .045 | Whole-row entrance in seconds; zero disables the fade. | | shadow-color | #00000080 | Shadow paint. | | shadow-blur / shadow-y | .12 / .04 | Blur and vertical offset in font-size em. | | tail-frames | 0 | Optional cue extension capped by the next same-role cue. | | stack-order | 70 | Composition paint order. |
The font input, actual word widths, grouping and explicit breaks determine layout. Enlarging the font or tightening the width can change page composition; line-gap changes vertical spacing without changing row membership. Changing speech timing changes reveals without requiring new word styling. All animation evaluates from the requested frame and is independent of playback history.
Integration and license
CaptionDocument supplies authored Cues, Words and Units; CaptionTiming supplies each Unit’s absolute boundaries. Track consumes document, timing, timeline and within. Its Studio Companion displays Cue Items and exposes Style Uses in the Inspector.
Fonts are explicit inputs supplied by the consuming project, either from licensed files or installed font packages. Font binaries and research footage are not distributed here. Choose fonts licensed for your intended use; availability of a local or free font file does not establish commercial usage rights. Preview media illustrates the treatment; actual layout depends on your text, timing, frame and font metrics. Check the result in the languages and sizes used by your video.
Code is distributed under the Hypit license, the same license used by @hypit/ranking. It is Apache-2.0-based with additional conditions; consult the full text for hosted services and commercial redistribution. Fonts and supplied media retain their own licenses.
