Screen Dressing · Journal · 5 min read

How We Build a Screen Dressing Prop (Behind the Scenes)

An interactive screen prop looks simple from the audience's seat — a glowing terminal, a trading desk, a face scanner doing its thing in the background of a shot. Under the hood, the constraints are unusually strict and weirdly fun to work within. This is a behind-the-scenes look at how a fake UI prop is actually made: one self-contained web page that fills a 16:9 screen, animates forever, and has to stay believable through hours of unattended filming without a single network call.

If you build interfaces for a living, the interesting part is the inversion of normal goals. We're not optimising for usability, conversion, or accessibility. We're optimising for being convincing on camera for a long time with nobody touching it. That changes every decision.

The hard constraint: one self-contained page

Every prop is a single index.html — HTML, CSS, and JavaScript in one file. No build step, no framework, no bundler, no npm, no CDN, no external fonts, no APIs. You can save the file, double-click it, and it runs.

Why be that strict? Because the deployment target is a stranger's laptop in a location truck with no reliable internet. A React app that needs a dev server, or a page that pulls a font from a CDN, is a page that can fail in front of a crew. The only thing worse than no screen is a screen showing a loading spinner or a 404 when the camera rolls. Self-contained means it cannot fail for those reasons.

This rules out a lot of modern conveniences and forces a return to fundamentals: vanilla JS, hand-rolled CSS, and a single requestAnimationFrame loop doing the work. It's oddly liberating.

Fill the frame, behave like a kiosk

A prop is designed for 16:9, fills the entire viewport, and never scrolls. There's no navigation, no scroll bar, no responsive mobile breakpoint — it behaves like dedicated kiosk software bolted to a wall. Layouts are built to flex to the screen so the same page reads well on a 24-inch monitor or a projector, but the assumption is always "this is the whole world, edge to edge."

Hiding every trace of "this is a browser" is part of the craft: no cursor, no chrome, no OS furniture. The illusion only holds if nothing on screen admits it's a web page.

Engineering believability

This is where most of the actual work goes. Believability isn't one feature; it's a stack of small truths.

Believable for hours, unattended

The brutal test is the long, locked-off shot where the screen runs for an hour with nobody touching it. That demands two things most web apps never worry about:

  1. No memory leaks. A page that slowly eats RAM will stutter or crash three hours into a shoot day. Animations have to recycle DOM nodes, cap their buffers (a scrolling log can't grow forever), and keep the loop lean. We build for the marathon, not the demo.
  2. No obvious loops. Tied to the point above — anything that repeats on a fixed cadence gets noticed when the footage is slowed or held. Timing is jittered, sequences are shuffled, and "events" fire on randomised intervals.

Get those two wrong and the prop fails exactly when it matters most. Get them right and it can run all day.

No network, by design

The only network call any prop makes is a tiny analytics tracker, and even that is non-blocking — if it can't reach the internet, the screen doesn't notice. Beyond that, zero requests. No fonts, no APIs, no telemetry, no "phoning home." This isn't just a reliability choice; it's a trust choice. A prop on a closed set should never depend on, or leak to, the outside world.

When the catalogue doesn't have it

The catalogue covers the common beats — terminals, surveillance, vitals, mission control, finance — but productions always have specific needs: a particular interface, a fictional brand built to your world, a hero readout that has to hit an exact line of dialogue. That's the custom-build service. Same constraints, same polish, tailored to the script.

If you're a developer, the constraints above are basically the whole spec, and they make for a genuinely fun weekend project. If you're a production, you get the result without the weekend.

Browse the full catalogue of interactive screen props to see the approach in action, or request a custom build for a screen that doesn't exist yet. Either way, the promise is the same: open it in a browser, point the camera, roll.

Need a screen for your scene?

Every prop is free to open and runs full-screen in any browser. Browse the full catalogue, or tell us what your scene needs and we'll build it.

Browse all screens Request a custom build

← All Journal posts