# videoskillet > Real-time NTSC / VHS / composite-video simulation in WebGPU compute shaders. > Dot crawl, dropouts, head-switch wobble and video feedback are consequences of > a simulated analog signal path rather than filters drawn over the picture, so > the faults interact the way the hardware’s do. The app is at https://videoskillet.com/app/ — the root page is a landing page with an "Open the app" link. It needs WebGPU; on Linux that means Firefox Nightly or Chrome with WebGPU enabled. ## The address bar is the remote control Every control, source and routing is reachable from the address bar, and the app mirrors the live board back into it, so the URL says what is on screen and navigating to one puts it there. One link sets 200+ controls at once, whether the hand writing it is a person’s or an agent’s. The parameters live after the `#`. Two shapes of link exist and both open the same board: the readable one the bar carries, and the packed `#p=…` the share button writes, which is that look in a couple of hundred characters and opaque to everything but the app. The readable one is both what to read and what to write; the packed one is for sending. Every link published before this carries its parameters on the `?` query instead and still opens. - `#preset=NAME` — a whole look. It resets what it does not name. - `#set=key:value,key:value` — controls by key, layered on top of any preset. Out-of-range values clamp. This is the form to write, and the form the bar shows: reading it back is how to check what a change actually did. - `#p=…` — the packed form the share button writes. Opaque; use `#set=`. - `#mod=target:source:rateHz:depth[:division]` — what is moving, comma- separated. `target` is a control key, `source` one of the modulation sources, up to 8 of them. - `#src=` / `#srcb=` — what each deck is fed: bars, sweep, tv static, vhs static, synth, cat, clip-test, clip-haunted-house, clip-minnie-moocher, wiki-random, ia-random, browse, teletype, file, library, url, webcam, screen. - `#vurl=` / `#iurl=` / `#yt=` (and `#vurlb=`, `#iurlb=`, `#ytb=`) — a video, image or YouTube clip on each deck. - `#text=` with `#crawl`, `#boil`, `#garble` — the teletype card; `#caption=` puts a line on the line-21 caption track. - `#speeda=` / `#speedb=` / `#reverb=` / `#dry=` — playback and the audio send. - `#cuea=in,out` / `#cueb=in,out` — a loop over one deck, in seconds. - `#surprise` — a random look. `#debug` — the frame and timing readouts. - `#snow` — open on a burst of snow, `#snow=3` for three seconds of it. A feedback look needs something to amplify and the reader's frame store starts empty, so a board built on the loops opens black without it. The burst heals off completely: the look is what the rest of the link says. Example — VHS with the head-switch tear pulled wide and the tint drifting: https://videoskillet.com/app/#preset=vhs&set=headSwitchShiftUs:9&mod=tintDeg:sine:0.2:0.4 Changing only the fragment of a page that is already open does not reload it, so the app watches for that and reloads itself: a link opened in a tab already showing the app lands on the board it names, the same as a fresh one. Give it a moment to come back up before reading the result. ## In the page `ctrl+k` (`⌘k`) opens a command palette that indexes every preset, control and verb by name and by the prose describing it. Typing a value after a name sets that control outright — "head switch 9", or "combiner ring" on a mode switch — and each row shows the control’s current reading, so the palette is also the quickest way to read the board back. Every slider is a native range input with a label; the drag surfaces (the framing boxes, the A/B lever) take arrow keys. ## The rest - [Every control, with its key](https://videoskillet.com/llms-full.txt) - [Effects](https://videoskillet.com/guide/effects/) — the fault each control models - [User guide](https://videoskillet.com/guide/guide/) — driving it - [CLI](https://videoskillet.com/guide/cli/) — `pnpm render`, which takes one of these links and writes a file, with no browser open - [Architecture](https://github.com/cmdcolin/videoskillet/blob/main/docs/ARCHITECTURE.md) — the signal path pass by pass, for changing it - [AI usage](https://videoskillet.com/guide/ai/) — working on this codebase with an agent