Cinema Reel
A cinematic image reel with clickable photographic thumbnails and an overlay or solid footer.
Install the component, then paste your configured usage. Your settings are included in the code below.
curl -fsS https://arclenui.dev/arclen-ui.mjs -o arclen-ui.mjs && node arclen-ui.mjs add cinema-reel --origin https://arclenui.dev --settings '{"reelFooter":"overlay","transition":"blur","images":["cinema-coast","cinema-ridge","cinema-tide"],"titles":["Where land meets sea","Into the mist","The returning tide"],"descriptions":["An Atlantic headland in silver light.","Coastal ridges fading into sea mist.","Foam traces the edge of a dark shore."],"alts":["Dark coastal cliffs above teal Atlantic waves under low mist","Green coastal ridges and pine forests fading into sea mist","Black tidal sand and dark rocks beneath foggy cliffs"],"label":"Along the coast","height":500,"radius":0,"duration":650,"interval":5000,"autoplay":true,"accent":"#a4b9b1","background":"#171717","foreground":"#ffffff","reelSurface":"#f6f3ed","reelText":"#252b25","heightMode":"fill","imageFit":"cover","focalX":50,"focalY":50,"imageScale":1,"blurAmount":16,"zoomAmount":0.18,"showIndicators":true}'import { CinemaReel } from "@/components/cinema-reel";
export default function Example() {
return <CinemaReel {...{
"reelFooter": "overlay",
"transition": "blur",
"images": [
"cinema-coast",
"cinema-ridge",
"cinema-tide"
],
"titles": [
"Where land meets sea",
"Into the mist",
"The returning tide"
],
"descriptions": [
"An Atlantic headland in silver light.",
"Coastal ridges fading into sea mist.",
"Foam traces the edge of a dark shore."
],
"alts": [
"Dark coastal cliffs above teal Atlantic waves under low mist",
"Green coastal ridges and pine forests fading into sea mist",
"Black tidal sand and dark rocks beneath foggy cliffs"
],
"label": "Along the coast",
"height": 500,
"radius": 0,
"duration": 650,
"interval": 5000,
"autoplay": true,
"accent": "#a4b9b1",
"background": "#171717",
"foreground": "#ffffff",
"reelSurface": "#f6f3ed",
"reelText": "#252b25",
"heightMode": "fill",
"imageFit": "cover",
"focalX": 50,
"focalY": 50,
"imageScale": 1,
"blurAmount": 16,
"zoomAmount": 0.18,
"showIndicators": true
}} />;
}| Property | Type | Default |
|---|---|---|
reelFooterFooter style Options: overlay (Overlay), solid (Solid) | select | "overlay" |
transitionTransition Options: blur (Blur), fade (Fade), slide (Slide), slideUp (Slide Up), cover (Cover), wipe (Wipe), zoom (Zoom), none (None) | select | "blur" |
imagesImage URLs or bundled artwork Minimum 1 itemsMaximum 12 itemsUp to 2048 characters per item | string-list | ["cinema-coast","cinema-ridge","cinema-tide"] |
titlesSlide titles Minimum 0 itemsMaximum 12 itemsUp to 100 characters per item | string-list | ["Where land meets sea","Into the mist","The returning tide"] |
descriptionsSlide descriptions Minimum 0 itemsMaximum 12 itemsUp to 240 characters per item | string-list | ["An Atlantic headland in silver light.","Coastal ridges fading into sea mist.","Foam traces the edge of a dark shore."] |
altsImage descriptions Minimum 0 itemsMaximum 12 itemsUp to 200 characters per item | string-list | ["Dark coastal cliffs above teal Atlantic waves under low mist","Green coastal ridges and pine forests fading into sea mist","Black tidal sand and dark rocks beneath foggy cliffs"] |
labelRegion label Up to 100 characters | text | "Along the coast" |
heightHeight 300–900Step 10 | number | 500 |
radiusCorner radius 0–48Step 1 | number | 0 |
durationTransition duration 0–1200Step 10 | number | 650 |
intervalAutoplay interval 2000–15000Step 500 | number | 5000 |
autoplayAutoplay | boolean | true |
accentAccent | color | "#a4b9b1" |
backgroundSurface | color | "#171717" |
foregroundText | color | "#ffffff" |
reelSurfaceSolid footer surface | color | "#f6f3ed" |
reelTextSolid footer text | color | "#252b25" |
heightModeHeight mode Options: fixed, fill | select | "fill" |
imageFitImage fit Options: cover, contain | select | "cover" |
focalXHorizontal focal point 0–100Step 1 | number | 50 |
focalYVertical focal point 0–100Step 1 | number | 50 |
imageScaleImage scale 1–1.5Step 0.05 | number | 1 |
blurAmountBlur strength 0–40Step 1 | number | 16 |
zoomAmountZoom strength 0.02–0.5Step 0.01 | number | 0.18 |
showIndicatorsThumbnail navigation | boolean | true |
Cinema Reel
A large photograph with a caption and clickable photographic thumbnails over a soft bottom gradient. The default coastal series follows misty cliffs, forested ridges and a dark tidal shore. There are no arrow buttons. Thumbnails remain visible during transitions; narrow hosts scroll the row horizontally. showIndicators controls thumbnail navigation. Hidden thumbnails do not disable keyboard or swipe navigation. Keep captions concise in short hosts.
Choose Overlay (default) or Solid under Footer style. reelFooter="solid" moves the caption and thumbnails into a separate footer below the image. Its default light ivory surface is reelSurface="#f6f3ed", with reelText="#252b25". Both colours are tweakable and apply only to Solid. Thumbnails use consistent cover crops; framing settings control the main image.
import {CinemaReel} from './components/cinema-reel';
<CinemaReel heightMode="fixed" height={560} transition="blur" autoplay={true} />Default bundled image keys: cinema-coast, cinema-ridge, cinema-tide.
The component fills its parent width. heightMode="fill" fills a parent with an explicit height; an unsized host uses a 16:10 aspect-ratio fallback. heightMode="fixed" uses the pixel height. imageFit, focalX, focalY and imageScale control the main image crop. Image, title, description and alt lists correspond by index. Use an empty alt for a decorative image. Lists support up to twelve slides.
images accepts the bundled keys listed above, the original vector keys canyon, coast, alpine, HTTP/HTTPS URLs and relative paths. Invalid or empty image lists fall back to the default images. Remote URLs make ordinary requests to their hosts. Failed images show a readable unavailable message. Generated images depict fictional scenes; no claim of a real building, place or product is implied.
Choose one of eight transitions: blur, fade, slide, slideUp, cover, wipe, zoom or none. duration controls finite motion; zero makes changes immediate. blurAmount controls blur strength and zoomAmount controls zoom distance. Rapid changes retarget owned image layers and settle to one slide.
ArrowLeft/Right, Home/End and horizontal swipes navigate. Manual changes are announced; automatic announcements are disabled during playback. Autoplay is on by default at five seconds. There is no on-image playback button. Disable Autoplay in Tweaks or set autoplay={false}. Hover, keyboard focus, hidden documents, offscreen placement and reduced motion stop automatic progression. Reduced motion makes manual navigation immediate.
The vanilla core exports defaults, resolveSettings, render and mount. mount(host, settings) returns update, goTo, pause, resume and destroy. update merges validated settings and preserves the current slide where possible. pause stops autoplay and settles finite transitions; resume allows animation without enabling autoplay. destroy removes owned DOM, listeners, observer and animation frames. Multiple instances have independent state. The React wrapper accepts className, style and paused in addition to the generated settings below.
Server/no-JavaScript markup shows the first image and readable captions where present. Navigation requires JavaScript. Configured React and HTML delivery retain settings. Every install includes its local engine, CSS, photographs, vectors, Instrument Sans font and licences; there are no runtime npm dependencies or imports from sibling components. Font rights are OFL-1.1 under assets/OFL-InstrumentSans.txt.
The preview runs the component’s own JavaScript. It respects reduced motion and pauses when off screen. The HTML bundle includes a poster fallback.
Every setting in this panel comes from the component manifest. Preview size, pause and replay stay in the inspector.