npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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.

Copernicus with new copy

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-copernicus

Requires 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.