Skip to main content
Pulp
  • Company
Access Demo
    • human interfaces
    • critical decisions
    • persona engine
    • machine health
    • data storytelling
    • persuasive intelligence
    • workforce optimization
    • custom ai/ml
    • policy & governance
    • marketing & media
    • consulting & management
    • finance & markets
    • public engagement
    • thinkwell™ workstation
    • thinkwell™ plugin
    • pulp™ api
  • Company
Access Demo

Overview

  • Introduction
  • Getting started

Guides

  • From draft to decision
  • Score a Reddit thread
  • Ground a claim in evidence
  • Simulate an audience
  • AI Debate Tournament

SDKs

  • Server-Side SDK
    • Radiance
      • RootWords
        • Docs
        • Sections
        • Paras
        • Sentences
        • Clauses
        • Claims
        • Phrases
        • Named Entities
        • Words
        • Characters
        • Special Characters
        • Special Patterns
      • RootCause
      • StemReferences
      • AdCanopy
    • Windfall
      • TrueAura
        • Demographics
        • Psychographics
        • Mindstate
        • Environment
        • Memory
        • Vision
      • NectarRewards
      • PoisonIvy
      • GrapeVine
    • Groundwater
      • WebSoil
      • DomainCrust
      • CodeMantle
      • ServerCore
  • Web SDK
    • loosethreads UI/UX
      • WarpDisplays
      • WeftConversations
      • DyeMedia
      • BightInteractions
      • Component Library
        • Sandbox
          • Cards & panels
            • Expandable card
            • Debug panel
          • Text effects
            • Morphing text
            • Video text
          • Device & browser frames
            • Safari frame
            • iPhone frame
            • Android frame
          • Canvas & 3D
            • Crowd canvas
            • Interactive robot
          • Data & visualization
            • Location map
            • Leaderboard
            • Structured Discussion Bracket
          • Controls & inputs
            • Region Selector
          • Scroll effects
            • Scroll-stack cards
            • Perspective scroll showcase
            • Scroll Scrubber
        • Production

Reference

  • References catalogSoon
  • Conventions
  • PricingSoon
  • Status and roadmapSoon
Introduction
Getting started
$pip install pulp-sdk
From draft to decision
Score a Reddit thread
Ground a claim in evidence
Simulate an audience
AI Debate Tournament
Server-Side SDK
Radiance
RootWords
Docs
📄sample.txt2 paras · 160 chars
Sections
§1 Introduction
Paras
¶1: first paragraph block
¶2: second paragraph block
Sentences
S1S2S3S4
Clauses
C1C2C3C4C5C6
Claims
Claim 1Claim 2Claim 3
Phrases
NPVPNPVPPPNP
Named Entities
Pulp [ORG]
Words
ifwewaitforcertaintywewillbe+20 more
Characters
0 → 159
Special Characters
spaces × 27punct × 8nbsp × 0
Special Patterns
0 patterns detected
RootCause
Ethos
—
Pathos
—
Logos
—
Kairos
—
Style
—
Clarity
—
Focus
—
Awareness
—
Persuasive Velocity—
StemReferences
CensusFECCongressFed. Reg.RegulationsLegiScanGovInfoGDELTCivicWikimediaData.govPodcast Idx
AdCanopy
rank
Windfall
TrueAura
Demographics
life_stageyoung_adult
education_levelbachelors
locationurban
occupationtech
Psychographics
Impelling
Compelling
Repelling
Mindstate
alpha 10 Hzcalm
Environment
vision onhearing onsmell offtouch offtaste off
Memory
purchases 12content 48brands 5
Vision
motivationdesirefear
NectarRewards
define
PoisonIvy
apply
GrapeVine
post
Groundwater
WebSoil
heatmap
DomainCrust
price
CodeMantle
trace
ServerCore
uptimeresize
Web SDK
loosethreads UI/UX
WarpDisplays
📄q3-report.pdf
🖼chart.png
▶keynote.mp4
WeftConversations
ThreadsChatInlineSide panels
DyeMedia
TextToday
ImageToday
SoundSoon
VideoSoon
BightInteractions
MouseKeyboardVoice · soonCombos · soon
Component Library
Sandbox
Cards & panels
Expandable card
Debug panel
Text effects
Morphing text
Video text
Device & browser frames
Safari frame
iPhone frame
Android frame
Canvas & 3D
Crowd canvas
Interactive robot
Data & visualization
Location map
Leaderboard
Structured Discussion Bracket
Controls & inputs
Region Selector
Scroll effects
Scroll-stack cards
Perspective scroll showcase
Scroll Scrubber
Production
Coming soon
Conventions
  1. Web SDK
  2. loosethreads UI/UX
  3. Component Library
  4. Sandbox
  5. Text effects
  6. Video text

Video text

Video text plays a looping video through the shape of a word, using the letterforms as a window onto the footage underneath. Watch it below.

Overview

Video text plays a looping video through the shape of a word. The letters act as a window: only the pixels covered by the glyphs stay opaque, so the full-bleed video underneath shows only inside the letterforms. It fills its container and scales the type to the container width.

Reach for it when a single word carries a headline and you want texture or motion inside it: a hero title, a section marker, a loud one-word statement. The video does the work; the word gives it a mask.

Installation

Import the pattern from loosethreads:

tsx
import { VideoText } from "@pulp/loosethreads/patterns"

Usage

Point src at a video and pass the word as children. Drive reducedMotion from the viewer's motion preference so the video is skipped when reduce is set:

tsx
import { VideoText } from "@pulp/loosethreads/patterns"
import { useEffect, useState } from "react"

function OceanHeadline() {
  const [reducedMotion, setReducedMotion] = useState(false)

  // Skip the video for viewers who ask for reduced motion.
  useEffect(() => {
    const query = window.matchMedia("(prefers-reduced-motion: reduce)")
    const update = () => setReducedMotion(query.matches)
    update()
    query.addEventListener("change", update)
    return () => query.removeEventListener("change", update)
  }, [])

  return (
    <VideoText
      src="https://cdn.magicui.design/ocean-small.webm"
      reducedMotion={reducedMotion}
    >
      OCEAN
    </VideoText>
  )
}

Props

PropTypeDefaultDescription
srcstringRequiredURL of the video revealed through the text. It plays muted, loop, and inline, and autoplays while on screen.
childrenReactNodeRequiredThe word to reveal the video through. It is serialized into the SVG mask and also rendered as visually-hidden text for search and assistive tech.
reducedMotionbooleanRequiredWhen true the video is not mounted at all and the word renders as a plain filled heading, so there is zero motion. Wire it to prefers-reduced-motion.

Anatomy

An inline SVG <text> element is serialized to a data:image/svg+xml URL and applied as a CSS mask-image over a full-bleed <video>. A resize listener re-renders the mask so the vw-based font size tracks the container width. Alongside the masked layer sits a visually-hidden copy of the word for non-visual consumers.

The video pauses off-screen. A playing video keeps the decoder and compositor busy even when it is not visible, so the component pauses it while scrolled out of view and resumes on return, freeing the main thread for scrolling and input.

Accessibility

  • Labels. The word is duplicated as visually-hidden text, so the content is available to search engines and assistive tech even though the visible glyphs are painted as a mask.
  • Motion. The video auto-plays, so it must honor prefers-reduced-motion. Pass reducedMotion={true} when reduce is set: the video is not mounted and the word renders as a static filled heading.

Next: Safari frame. Back to Text effects.

OCEAN