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

PortTypeDefault
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.booltrue
PlayRuns or pauses the transport. Only used in Transport time mode — in Scrub mode the timeline is driven by Scrub instead.booltrue
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.float1.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.int0
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.float0
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.int0
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.float0
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.float1
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.boolfalse
VolumeLoudness of the clip's own audio. Clamped to 0…1, so 1 is the file's original level, not a boost.float1.0
MuteSilences the audio without touching Volume. The signal is still captured for FFT analysis on the Audio output.boolfalse
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.float1.0
OpacityOverall transparency of the video image. Not clamped, but only 0…1 is meaningful — above 1 the picture cannot get any more solid.float1.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.boolfalse
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.booltrue
Preloadstructure—
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

PortType
Imageimage
Audiostructure
Widthfloat
Heightfloat
Timefloat
Progressfloat
Durationfloat
Playingbool
Finishedbool
Infostructure

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. Play runs or pauses, Speed sets the rate, In Point and Out Point (both 0–1 fractions of the full duration) mark the region that actually plays, and Loop Mode decides what happens when the Out point is reached.
  • Scrub (1) — playback stops and the Scrub port 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 to Scrub and you are scratching video.

Loop modes (Transport only):

Loop ModeValueBehavior at the Out point
Loop0Seeks back to the In point and keeps playing
Once — Hold Last Frame1Freezes on the last frame
Once — Fade to Black2Darkens over Fade Duration in the shader (alpha is preserved) and holds
Ping-Pong3Reverses 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

PortTypeDefaultMeaning
FileString""Path to the video file. Cable takes priority over the inspector's Browse selection — wire a String node or a switcher for live playlists.
EnableBooltrueOff pauses the session and stops rendering, without discarding the loaded file.
PlayBooltrueRun/pause in Transport mode. Ignored in Scrub mode.
SpeedFloat1.0Playback rate (varispeed). Roughly 1/32× to 32× is supported; 1.0 is native.
Time ModeInt00 = Transport, 1 = Scrub. Dropdown in the inspector.
ScrubFloat0Scrub mode only: 0–1 position across the full duration. Changes seek immediately.
Loop ModeInt00 = Loop, 1 = Once — Hold Last Frame, 2 = Once — Fade to Black, 3 = Ping-Pong.
In PointFloat0Start of the play region as a 0–1 fraction of the file duration.
Out PointFloat1End of the play region as a 0–1 fraction.
RestartBoolfalseRising edge seeks to the In point and clears hold/fade state.
VolumeFloat1.0Audible output level, 0–1. Does not affect the analysis path.
MuteBoolfalseSilences audible output (equivalent to Volume 0).
Fade DurationFloat1.0Seconds of fade for the Once — Fade to Black mode. Hidden for other loop modes.
OpacityFloat1.0Overall 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; set Loop Mode to Loop and forget about it.
  • Scratch video with an LFO — set Time Mode to 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 Detection Kick → 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 the Finished pulse: 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 Point 0.35 and Out Point 0.55, Loop Mode Loop: only the money shot loops, and Finished ticks once per cycle for downstream events.
  • Slow fade-out ending — Loop Mode = Once — Fade to Black with Fade Duration 3: 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 File by 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.
  • Restart is 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.
  • Finished is 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 Point and Out Point are fractions of the full file duration, and Progress is likewise measured against the full duration — not against the In/Out region.
  • In Scrub mode Play, Speed, Loop Mode and Restart are inert; the inspector hides them so the panel matches what actually does something.
  • Audio and video routing are separate concerns: analysis on the Audio output stays live regardless of Volume and Mute, 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.

More Input nodes