@hypit/caption-copernicus
v0.1.0
Published
Copernicus: uppercase phrase cards and pulsing spoken-word highlights for Hypit.
Readme
Copernicus captions for Hypit
Uppercase phrase cards with independent green emphasis and large type. A purple rectangle pulses behind each spoken unit and disappears at its actual end. The complete phrase remains visible through pauses. Text stays still while the rectangle moves.

Motion preview uses new copy and authored 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-copernicusRequires Hypit 0.3.1 or a compatible release and Node 22.15 or later. The Source import @hypit/caption-copernicus@1 identifies the logical module ABI; npm version 0.1.0 identifies this implementation.
Package and inputs
This independent author package owns its activation, Style, schedule and renderer. It consumes the host's CaptionDocument, explicit CaptionTiming, finite Timeline, Frame, exact fonts and ordered Use windows, and produces an ordinary VisualTrack. These are existing Hypit inputs; the package introduces no new author-facing subtitle format. Development currently targets the local Hypit 0.3.1 interfaces, ABI @1, Node >=22.15. Historical 0.2.10 checks of other packages do not establish compatibility for this package.
Font and integration
Reference comparisons selected Montserrat ExtraBold, 800 normal. Its glyphs closely resemble the source; the source's exact font identity is unproven. Font files and reference footage are not included. Supply an exact Font or ordered FontStack. Optional Fallback children append exact Font or FontStack inputs. The renderer never downloads fonts or chooses implicit system faces.
See examples/copernicus.svml for an integration fragment. Supply story.caption, caption-time (CaptionTiming for that document), the finite speech.timeline and caption-frame. Script projects produce CaptionTiming with the narrative-caption Timing adapter using the Script caption-binding and narrative-temporal Projection; the caption family consumes only the resolved timing. Include captions.track in Film. The exported Recipe is @hypit/caption-copernicus/recipes/copernicus.
Script attributes
<passage><HOST>
Make{group=thought} every{group=thought} word{group=thought,emphasis} count.{group=thought} ||
Small{emphasis} and{group=contrast} large{group=contrast,large} together.{group=contrast}
</passage>| Attribute | Meaning |
| --- | --- |
| emphasis | Boolean selecting the emphasis color, independently of size. |
| large | Boolean selecting the Style's large-scale. |
| scale | Positive per-unit font-size multiple, overriding large. |
| group=name | Adjacent units sharing a name form one simultaneous card within the existing cue. |
Without attributes, a unit is a base-size white card. A group's units retain their individual sizes, colors and original start/end times. Only the active unit receives a rectangle. Mixed sizes share row baselines. Words retain internal separators; only leading row separators are suppressed. Indivisible units remain together. Text is uppercased for display. Later attribute values within an indivisible unit win; unrelated attributes are ignored.
|| separates cues only. Line wrapping uses measured advance widths and the global line-width. Oversized units stay intact; the complete card scales to the configured frame width. No word coordinates, forced reference line breaks or per-word animation coefficients are used.
Style controls
The exported Recipe is a portrait starting point for a 1080 px wide Frame (size:75, y:.75, width:.95, line-width:12, line-gap:.17). Component defaults below are independent of the Recipe. Size is explicitly authored in pixels.
| Parameter | Default | Meaning | | --- | --- | --- | | x / y | .5 / .5 | Card center in Frame fractions. | | width | .94 | Maximum card width as a Frame fraction; reserves the pulse envelope. | | size | 192 | Base font size in pixels. | | large-scale | 2 | Size multiplier for large units. | | tracking | 0 | Letter spacing in each unit's em. | | line-width | 14 | Preferred wrap width in base-size em, before whole-card fitting. | | line-gap | .28 | Additional gap between padded rows, in base-size em. | | color / emphasis-color | #ffffff / #55ff00 | Independent normal and emphasized text paints. | | highlight-color | #491eea | Current-unit rectangle paint. | | padding-x / padding-y | .08 / .16 | Rectangle padding in that unit's em. | | shadow-color | #000000bb | Text shadow paint. | | shadow-blur / shadow-y | .1 / .025 | Shadow radius and downward offset in each unit's em. | | fade-duration | .06 | Whole-card entrance fade, in seconds. | | highlight-fade | .035 | Rectangle edge fade, capped for short units. | | pulse-duration / pulse-amount | .23 / .1 | One rectangle swell in seconds and proportional overshoot. | | tail-frames | 0 | Optional cue text extension, capped by the next same-role cue. Word highlights still end at their original boundaries. | | stack-order | 70 | Paint order in the Composition. |
Set fade or pulse duration to zero to disable the corresponding transition; pulse amount zero removes the swell. Animation samples inside each frame interval so a one-frame spoken unit remains visible. Evaluation depends only on the requested frame, not playback history. Text never scales with the highlight pulse.
Use supports the host's ordinary temporal windows and optional role. Later matching Uses replace earlier ones, including Hidden; a Use beginning midway through a cue preserves the original animation clock and complete cue content.
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.
