feTurbulence and feDisplacementMap pair drives a drifting film grain over a graded, vignetted stage — so eight separately rendered clips read as one roll of stock.तात्या विंचू is a scroll-driven cinematic descent into a rain-soaked Konkan wada — eight film clips scrubbed frame-by-frame by the scroll wheel, a GPU-shaded room whose dust parts around your cursor, a sound bed built half from stems and half from oscillators, and a Marathi script that never once asks you to read English to follow it.
lang="mr"01 — The Premise
Tatya Vinchu is a figure every Marathi household knows — the sorcerer who wants a body that is not his. The temptation with a character that famous is to retell the plot. I did the opposite: no plot, no exposition, no narrator. The piece is built as an invitation with a door at the end of it, and the only thing the viewer is asked to do is keep going deeper.
That framing set three hard constraints. The interface had to disappear — a play button would break the spell instantly. The language had to be Marathi, not Marathi-flavoured English, because the dread lives in the cadence of the lines. And the whole thing had to survive a viewer who cannot or will not accept motion and sound, because a horror piece that punishes those people is just a broken page.
02 — The Sequence
The film is cut into ten chapters, eight of which carry a clip. There is no scene selection and no way to skip — the viewer's scroll position is the playhead, so the only way forward is inward. Chapter numbers are set in Devanagari (००–०७), which is the first quiet signal that this page is not translated from anywhere.
Click any frame to open it full-size.
The house first appears at distance, through monsoon rain. Lanterns are already lit — someone was awake.
The camera reaches the steps and stops. The line on screen is a dare, not narration: do you have the courage?
Perspective narrows and the mist layer thickens. Sounds are not heard here — they are only felt.
A deliberate second corridor beat. The repetition is the point: the wada is longer than it should be.
He is standing there, and has been for a while. One word on screen: तो — him.
The only chapter with no text at all. The eye-open frame fires a one-shot particle burst and an audio sting together.
The frame closes to the face and the address flips to second person: are you looking at me?
The mantra lands one clause at a time, then the piece stops and hands the viewer a choice.
Every line is written in Marathi and carried with a romanisation and an English gloss on the same row — never as a subtitle underneath, which would have made one language the original and the other the translation.
Rather than a credits roll, the last chapter puts a single Marathi question in front of the viewer and waits. It is the one moment where the piece stops performing and the viewer has to answer.
03 — Craft Decisions
Each of these could have gone the conventional way. Each conventional choice would have produced a nice-looking web film that nobody stays inside.
currentTime, so scroll position drives the frame directly.aScale and aSpeed, a three-octave value-noise mist, and a lightning flash addressed by colour and origin.04 — Design System
The palette is taken straight out of the frames rather than chosen against them: a near-black void that matches the darkest pixel of the footage, warm lantern amber for anything the viewer can act on, ember red reserved for the character, and cold moonlight for depth. Amber never exceeds a few percent of any screen, so a single lit control reads as the only warm thing in the house.
feTurbulence and feDisplacementMap pair drives a drifting film grain over a graded, vignetted stage — so eight separately rendered clips read as one roll of stock.expo.out and power4.out curves rather than fading in as blocks, so text lands at the rhythm the line would be spoken at.05 — Engineering the Weight
Scroll-scrubbing is brutal on delivery. Every scroll tick is a seek, every seek is a range request, and a browser that cannot serve ranges refetches whole clips. Most of the engineering here is about making the film feel weightless on a connection that is anything but.
Accept-Ranges: bytes is set explicitly at the server rather than left to default, because scrubbing seeks constantly and an over-eager optimisation plugin stripping it would silently double the transfer.immutable for a year. Every media URL carries a ?v= stamp, so re-encoding a clip changes the URL and the long cache stays safe. HTML is must-revalidate so nobody is stuck on an old build.06 — Access & Consent
Atmospheric work has a bad habit of treating accessibility as a downgrade — motion off means a blank page, sound off means half the piece is missing. Here the alternates were written at the same time as the film, not retrofitted after it.
<article> carries the entire piece — every chapter as a heading, every line in Marathi with its romanisation and gloss in a nested lang="en" span. Read with no video at all, it still works as a short story.prefers-reduced-motion is honoured on load, and the viewer can still flip it either way mid-descent — गती कमी करा / पूर्ण गती. Reduced motion keeps the imagery and drops the parallax, drift and burst.aria-pressed and Marathi-plus-English labels, and loading progress is published through a polite aria-live region so a non-sighted viewer knows the wada is still waking.07 — Outcomes
The piece set out to prove that a regional-language narrative can hold the highest tier of web craft without translating itself into English first, and that a scroll-driven film can be genuinely inhabitable rather than decorative.
08 — Key Learnings