Input node
Video Player
Professional video playback as an ordinary Input node. Pick a file — or drive the File port with a cable for live playlist switching — and hardware-decoded frames arrive zero-copy on the GPU, ready for a Canvas like any other generator. The transport is built for VJs: four loop modes, an In/Out loop region, a scrub mode where one 0–1 float is the timeline, a sampler-style Trigger mode that fires the clip from its In Point on every rising edge, a Mirror flip, variable speed and event pulses the rest of the patch can react to. The file's audio track streams live into the same analysis chain as the microphone.
Inputs
| Port | Type | Default |
|---|---|---|
| FilePath to the movie this node plays. Pick it with Browse, or cable a string in to switch clips from the graph; an empty path releases the player. | string | |
| EnableOff stops playback and releases the frame, without unloading the file. Turn it on again and the clip resumes where it stood. | bool | true |
| PlayRuns or pauses the transport. Only used in Transport time mode — in Scrub mode the timeline is driven by Scrub instead. | bool | true |
| SpeedPlayback rate — 1 is normal, 0.5 half, 2 double, and pitch follows like tape. Not clamped, but the decoder is only reliable roughly between 1/32 and 32. | float | 1.0 |
| Time ModeTransport plays the clip on its own clock; Scrub turns the timeline into a 0…1 parameter you drive; Trigger arms the clip on the In Point, silent, and every rising edge on Restart fires it from there — a VJ pad. Loop Mode still applies: Loop runs until the next hit, Once plays through and waits. | int | 0 |
| ScrubPosition in the clip when Time Mode is Scrub — 0 is the first frame, 1 the last. Clamped to 0…1; cable an LFO or an audio value here to shuttle the footage. | float | 0 |
| Loop ModeWhat happens at the out point: Loop restarts, Once — Hold Last Frame freezes, Once — Fade to Black fades out, Ping-Pong plays backwards. Values outside the list hold the last frame. | int | 0 |
| In PointWhere the played region starts, as a fraction of the whole clip. Clamped to 0…1; if it sits after Out Point the two simply swap roles. | float | 0 |
| Out PointWhere the played region ends, as a fraction of the whole clip. Clamped to 0…1 and always kept at least a frame or so after the in point. | float | 1 |
| RestartJumps back to the in point the moment it goes true, clearing any hold or fade. Pulse it — holding it true keeps it from firing again. In Trigger mode this IS the trigger: cable a Keyboard key, a MIDI note or a beat detector and every press fires the clip from the In Point. | bool | false |
| VolumeLoudness of the clip's own audio. Clamped to 0…1, so 1 is the file's original level, not a boost. | float | 1.0 |
| MuteSilences the audio without touching Volume. The signal is still captured for FFT analysis on the Audio output. | bool | false |
| Fade DurationHow many seconds the fade to black lasts, used only in the Once — Fade loop mode. Treated as at least 0.01 s; a few seconds reads as a gentle end. | float | 1.0 |
| OpacityOverall transparency of the video image. Not clamped, but only 0…1 is meaningful — above 1 the picture cannot get any more solid. | float | 1.0 |
| MirrorFlips the frame horizontally, like a webcam self-view. Off by default — footage plays the way it was shot; turn it on when a video stands in for a Camera Input so tracking and crops keep the same left/right sense. | bool | false |
| Sync SwitchOn (default): while this player feeds an Image Switch, it PLAYS only when some switch needs it (the live slot, or either side of a running transition) and pauses when none does — the OR across all switches. Your Play stays the master gate. Off: full autonomy. | bool | true |
| Preload | structure | — |
| Start AtCable Sync Trigger's Fire Time (host seconds). The clip waits still at the In Point and its In frame shows exactly at that moment on every Grafit with the same trigger; a moment already past skips the elapsed video. Each new moment restarts from In. | any | — |
Outputs
| Port | Type |
|---|---|
| Image | image |
| Audio | structure |
| Width | float |
| Height | float |
| Time | float |
| Progress | float |
| Duration | float |
| Playing | bool |
| Finished | bool |
| Info | structure |
How It Works
The node sits on Apple's native media stack (AVFoundation with hardware decode). One node owns one video file; many nodes play many videos simultaneously. Frames render to a texture exactly like Camera Input, aspect-fitted against the full viewport rectangle (the viewport-fit convention), so Width and Height come out ready for a Canvas without manual math, with premultiplied alpha and anti-aliased edges.
Transport semantics. Time Mode chooses between two worlds:
- Transport (0) — normal playback.
Playruns or pauses,Speedsets the rate,In PointandOut Point(both 0–1 fractions of the full duration) mark the region that actually plays, andLoop Modedecides what happens when the Out point is reached. - Scrub (1) — playback stops and the
Scrubport becomes the timeline: 0 is the very start, 1 the very end, and any change beyond a tiny tolerance seeks immediately. Wire an LFO, a fader or an EEG channel toScruband you are scratching video.
Loop modes (Transport only):
Loop Mode | Value | Behavior at the Out point |
|---|---|---|
| Loop | 0 | Seeks back to the In point and keeps playing |
| Once — Hold Last Frame | 1 | Freezes on the last frame |
| Once — Fade to Black | 2 | Darkens over Fade Duration in the shader (alpha is preserved) and holds |
| Ping-Pong | 3 | Reverses direction, if the codec can play backwards; otherwise falls back to a plain loop |
Events. Restart is edge-triggered: a rising edge (false → true) seeks back to the In point and clears any hold or fade state — hold it high and nothing repeats, which is what makes it safe to drive from a beat detector. Finished is a one-frame pulse fired every time the Out point is reached, in every loop mode, per Grafit's event-logic conventions — including on each loop wrap, so it doubles as a cycle tick.
Speed is a varispeed rate — tape-style, so pitch follows speed on the audio track. Extreme ranges are supported (roughly 1/32× to 32×), and negative direction is handled by Ping-Pong rather than by a negative value.
Audio. The video's audio track is captured into Grafit's shared audio currency: the Audio output plugs straight into Audio FFT / Audio Analysis, exactly like Audio Input, and into the audio filter family. Volume and Mute control what you hear through the system output without touching what the analysis sees.
File handling. Browsing for a file in the inspector stores a security-scoped bookmark with the project, so the file stays accessible after quitting and relaunching the app — essential under App Store sandboxing. A file picked in the inspector takes effect immediately, without re-enabling the node. Cable-driven paths take priority over the stored one; if nothing resolves, the node's own stored value is used, which is what keeps a disabled player from tearing down and rebuilding its session every frame.
Parameters in Depth
| Port | Type | Default | Meaning |
|---|---|---|---|
File | String | "" | Path to the video file. Cable takes priority over the inspector's Browse selection — wire a String node or a switcher for live playlists. |
Enable | Bool | true | Off pauses the session and stops rendering, without discarding the loaded file. |
Play | Bool | true | Run/pause in Transport mode. Ignored in Scrub mode. |
Speed | Float | 1.0 | Playback rate (varispeed). Roughly 1/32× to 32× is supported; 1.0 is native. |
Time Mode | Int | 0 | 0 = Transport, 1 = Scrub. Dropdown in the inspector. |
Scrub | Float | 0 | Scrub mode only: 0–1 position across the full duration. Changes seek immediately. |
Loop Mode | Int | 0 | 0 = Loop, 1 = Once — Hold Last Frame, 2 = Once — Fade to Black, 3 = Ping-Pong. |
In Point | Float | 0 | Start of the play region as a 0–1 fraction of the file duration. |
Out Point | Float | 1 | End of the play region as a 0–1 fraction. |
Restart | Bool | false | Rising edge seeks to the In point and clears hold/fade state. |
Volume | Float | 1.0 | Audible output level, 0–1. Does not affect the analysis path. |
Mute | Bool | false | Silences audible output (equivalent to Volume 0). |
Fade Duration | Float | 1.0 | Seconds of fade for the Once — Fade to Black mode. Hidden for other loop modes. |
Opacity | Float | 1.0 | Overall opacity of the rendered frames, 0–1. |
Outputs: Image (the video texture), Audio (structure — the live audio ring for FFT / Analysis / filters), Width and Height (viewport-fit dimensions), Time (current position in seconds), Progress (0–1 across the full duration), Duration (seconds), Playing (Bool, true whenever the rate is non-zero), Finished (a one-frame pulse at the Out point) and Info (structure with file/codec details).
Use Cases
- Basic playback — Video Player
Image→ Canvas: the file fills the viewport at the correct aspect ratio; setLoop Modeto Loop and forget about it. - Scratch video with an LFO — set
Time Modeto Scrub, LFO (triangle, 0.2 Hz) →Scrub: the clip rocks back and forth in perfect sync with the oscillator, no transport involved. - Beat-locked stinger —
Loop Mode= Once — Hold Last Frame, Audio Beat DetectionKick→Restart: the clip retriggers on every kick and freezes on its last frame between hits. - Playlist switching — a String Switch feeding
File, driven by a Counter on theFinishedpulse: each clip finishing advances the playlist automatically. - Video as an audio source —
Audio→ Audio FFT → Audio Spectrum → Canvas: the soundtrack of the clip drives a spectrum visual with millisecond analysis cadence, identical to the mic path. - Region loop for a VJ set — set
In Point0.35 andOut Point0.55,Loop ModeLoop: only the money shot loops, andFinishedticks once per cycle for downstream events. - Slow fade-out ending —
Loop Mode= Once — Fade to Black withFade Duration3: the clip darkens in the shader while keeping alpha, so it dissolves cleanly over whatever Canvas layers sit beneath.
Tips
- Always Browse for the file at least once, even if you plan to drive
Fileby cable: the browse creates the security-scoped bookmark that keeps the file readable after a relaunch. A bare path string from a cable has no bookmark of its own. Restartis a rising edge, not a level — a permanently true cable retriggers exactly once. Use a Do Once or a 1-frame pulse source to retrigger repeatedly.Finishedis a one-frame pulse and fires on every loop wrap, not only at the end of a Once mode. It is the cleanest per-cycle tick available from a video.- Ping-Pong depends on the codec: files that cannot play in reverse silently fall back to a plain loop. Re-encode to an editing-friendly codec (ProRes, DNxHD) if reverse matters.
In PointandOut Pointare fractions of the full file duration, andProgressis likewise measured against the full duration — not against the In/Out region.- In Scrub mode
Play,Speed,Loop ModeandRestartare inert; the inspector hides them so the panel matches what actually does something. - Audio and video routing are separate concerns: analysis on the
Audiooutput stays live regardless ofVolumeandMute, so you can drive visuals from a silent clip.
Open Video Player in the interactive catalog →
Video Player is one of 381 nodes in Grafit Pro.
Free download. Every feature for 7 days, no card. Then €99.99 once — or keep playing your projects as a Player.