Skip to content
Voro
  1. Image
  2. Effects

Teleloop

Example Built with Kernel FX Ships with Voro as an example. It may change between versions.

Teleloop combines video encoding, tape damage and a CRT display treatment. Its feedback loop sends the displayed picture through the chain again, accumulating distortion and colour changes on each pass.

Place Teleloop under Effects in the Image view and connect footage to image. Start with Feedback at zero. Choose Signal Path, adjust Wear, then set the CRT appearance.

Raise Feedback gradually to repeat the image through the effect. Feed Zoom and Feed Rotate move the picture on each trip around the loop.

  • image supplies the main picture.
  • field bends the display beam through Field Deflection.
  • mask adds local damage through Mask Wear.
  • splice supplies a second picture that Splice wipes in from the bottom.
  • out is the screen or signal view selected by Tap.
  • Signal Path selects Component, NTSC or PAL. Active Lines sets signal detail independently of output resolution.
  • Luma Bandwidth and Chroma Bandwidth control detail and colour smear.
  • Wear scales the Damage controls, including Timebase Error, Dropouts and Tracking.
  • Feedback sets the loop contribution. Feed Gain, zoom, rotation and offsets change each pass.
  • Phosphor retains earlier light. Beam Width, Mask and Mask Pitch shape the CRT structure.
  • Tap shows the screen or a signal diagnostic.

High Feedback can leave the output dominated by its own history. Return Feedback to zero to stop recirculating it. Active Lines controls the video signal; Mask Pitch is measured in output pixels.

Inputs

  • image image required
    RGBA
  • field image
    2 channels
  • mask image
    single channel
  • splice image
    RGBA

Outputs

  • out image
    RGBA

Raster

Mix (Mix) Float op('teleloop').par.Mix

Blend the source to the scanned picture.

Default:
1
Range:
0 to 1
Wear (Wear) Float op('teleloop').par.Wear

Master scaler over every Damage control. 0 is a pristine deck.

Default:
0.35
Range:
0 to 1
Feedback (Feedback) Float op('teleloop').par.Feedback

Camera-into-monitor gain. The loop runs through the whole chain, so each trip is one tape generation. 0.2-0.9 performs; above that the loop is almost purely self-referential and latches into burnt-in states.

Default:
0
Range:
0 to 1
Phosphor (Persistence) Float op('teleloop').par.Persistence

Phosphor decay time. Green outlives red outlives blue, as P22 does.

Default:
0.3
Range:
0 to 1
Tap (Tap) Menu op('teleloop').par.Tap

Screen, or a scope on the signal at that point in the chain.

Default:
screen
Options:
screen, composite, luma, chroma, servo

Signal

Signal Path (Path) Menu op('teleloop').par.Path

Component skips encoding entirely; NTSC and PAL carry chroma on a subcarrier and earn their own artifacts.

Default:
ntsc
Options:
component, ntsc, pal
Active Lines (Standard) Menu op('teleloop').par.Standard

Signal line count, independent of output resolution.

Default:
480
Options:
480, 576, 720, 1080
Luma Bandwidth (Lumabw) Float op('teleloop').par.Lumabw

Megahertz. Broadcast is about 4.2, VHS about 3.0, a worn tape lower.

Default:
4.2
Range:
0.2 to 12
Chroma Bandwidth (Chromabw) Float op('teleloop').par.Chromabw

Megahertz. NTSC I is about 1.3, VHS colour-under about 0.4. Low values smear colour to the right of edges.

Default:
1.1
Range:
0.05 to 6
Chroma Delay (Chromadelay) Float op('teleloop').par.Chromadelay

Chroma/luma misregistration in signal samples.

Default:
0
Range:
-14 to 14
Ringing (Ringing) Float op('teleloop').par.Ringing

Filter overshoot: the bright halo on sharp edges.

Default:
0.35
Range:
0 to 2
Decoder (Comb) Menu op('teleloop').par.Comb

Notch is a cheap TV, line is a 2D comb, frame is a 3D comb that is perfect on stills and smears on motion.

Default:
line
Options:
notch, line, frame
Motion Adaptive (Motionadapt) Float op('teleloop').par.Motionadapt

How fast the frame comb falls back to the line comb on motion. Zero forces the smear.

Default:
1
Range:
0 to 1
Saturation (Saturation) Float op('teleloop').par.Saturation

Decoded chroma gain.

Default:
1
Range:
0 to 3
Splice (Splice) Float op('teleloop').par.Splice

Wipe the splice input in from the bottom. The seam loses lock like an ungenlocked switcher.

Default:
0
Range:
0 to 1

Damage

Timebase Error (Timebase) Float op('teleloop').par.Timebase

Per-line horizontal jitter.

Default:
0.3
Range:
0 to 1
Tape Drift (Drift) Float op('teleloop').par.Drift

Slow stretch plus the top-of-frame flag bend.

Default:
0.35
Range:
0 to 1
Hum Bar (Hum) Float op('teleloop').par.Hum

Mains ripple: a drifting bend and brightness bar.

Default:
0.15
Range:
0 to 1
Noise (Noise) Float op('teleloop').par.Noise

Broadband RF noise. Energy near the subcarrier decodes into chroma confetti on its own.

Default:
0.12
Range:
0 to 1
Dropouts (Dropouts) Float op('teleloop').par.Dropouts

Density and length of tape dropouts.

Default:
0.25
Range:
0 to 1
Dropout Compensator (Doc) Toggle op('teleloop').par.Doc

Substitute the previous line inside a dropout, as a real deck does. Off gives raw streaks.

Default:
On
Options:
Off, On
Head Switch (Headswitch) Float op('teleloop').par.Headswitch

Bottom-of-frame switching tear and the hook above it.

Default:
0.5
Range:
0 to 1
Tracking (Tracking) Float op('teleloop').par.Tracking

Drifting noise band with level loss.

Default:
0.2
Range:
0 to 1
Ghost (Ghost) Float op('teleloop').par.Ghost

RF multipath: a delayed copy of the whole signal.

Default:
0
Range:
-1 to 1
Ghost Delay (Ghostdelay) Float op('teleloop').par.Ghostdelay

Multipath delay in signal samples.

Default:
42
Range:
-256 to 256
Chroma Phase (Chromaerror) Float op('teleloop').par.Chromaerror

Per-line subcarrier phase error. NTSC shifts hue; PAL trades it for saturation loss.

Default:
0.2
Range:
0 to 1
Vertical Lock (Sync) Float op('teleloop').par.Sync

1 is locked. Below 1 the picture rolls and tears at the sync bar.

Default:
1
Range:
0 to 1
Mask Wear (Maskgain) Float op('teleloop').par.Maskgain

How much the mask input adds to local wear.

Default:
0.5
Range:
0 to 2
Seed (Seed) Int op('teleloop').par.Seed

Deck identity. Same seed and time reproduce the same damage.

Default:
7
Range:
0 to 99999

Loop

Feed Zoom (Feedzoom) Float op('teleloop').par.Feedzoom

Camera zoom per generation. Above 1 tunnels inward.

Default:
1.006
Range:
0.9 to 1.1
Feed Rotate (Feedrotate) Float op('teleloop').par.Feedrotate

Camera roll per generation, degrees.

Default:
0
Range:
-45 to 45
Feed Offset X (Feedx) Float op('teleloop').par.Feedx

Camera aim offset.

Default:
0
Range:
-0.5 to 0.5
Feed Offset Y (Feedy) Float op('teleloop').par.Feedy

Camera aim offset.

Default:
0
Range:
-0.5 to 0.5
Feed Hue (Feedhue) Float op('teleloop').par.Feedhue

Hue rotation per generation.

Default:
0
Range:
-1 to 1
Feed Gain (Feedgain) Float op('teleloop').par.Feedgain

Loop gain. Above 1 self-oscillates; the modelled AGC is what keeps it bounded.

Default:
1
Range:
0 to 1.6

Tube

Beam Width (Beam) Float op('teleloop').par.Beam

Spot size in scanline pitches. Below 1 the line structure shows.

Default:
0.62
Range:
0.15 to 2.5
Beam Bloom (Bloom) Float op('teleloop').par.Bloom

How much a bright beam widens. This is why CRT highlights go solid.

Default:
0.8
Range:
0 to 3
Mask (Mask) Menu op('teleloop').par.Mask

Aperture grille, slot mask or shadow mask. Fades out when a triad is too small to resolve.

Default:
aperture
Options:
none, aperture, slot, shadow
Mask Pitch (Pitch) Float op('teleloop').par.Pitch

Output pixels per RGB triad.

Default:
3
Range:
1.2 to 24
Mask Depth (Maskdepth) Float op('teleloop').par.Maskdepth

Mask contrast. Energy is normalised so depth does not change exposure.

Default:
0.55
Range:
0 to 1
CRT Gamma (Gamma) Float op('teleloop').par.Gamma

Tube EOTF.

Default:
2.35
Range:
1.6 to 3.2
Brightness (Brightness) Float op('teleloop').par.Brightness

Drive before the tube EOTF. Above 1 compensates for the light a narrow beam leaves between scanlines.

Default:
1.22
Range:
0 to 2
Black Level (Blacklevel) Float op('teleloop').par.Blacklevel

Tube cutoff: the drive below which no beam is emitted. The set's Brightness knob is this control.

Default:
0.045
Range:
0 to 0.6
Contrast (Contrast) Float op('teleloop').par.Contrast

Beam current scale after the EOTF.

Default:
1.08
Range:
0.4 to 2.4
Velocity Modulation (Vsm) Float op('teleloop').par.Vsm

Beam speeds up into dark transitions. This is CRT punch.

Default:
0.35
Range:
0 to 1.5
Interlace (Interlace) Toggle op('teleloop').par.Interlace

Draw alternate fields. Real interlace shimmer and combing on motion, at the cost of half the lines per generation.

Default:
Off
Options:
Off, On
Convergence (Convergence) Float op('teleloop').par.Convergence

Corner misconvergence in output pixels.

Default:
0.6
Range:
0 to 6
Field Deflection (Deflect) Float op('teleloop').par.Deflect

How hard the field input bends the beam.

Default:
0
Range:
0 to 0.6

Glass

Halation (Halation) Float op('teleloop').par.Halation

Glow inside the glass. It accumulates and lags, as real glass does.

Default:
0.25
Range:
0 to 1.5
Curvature (Curvature) Float op('teleloop').par.Curvature

Tube face curvature.

Default:
0.22
Range:
0 to 1
Overscan (Overscan) Float op('teleloop').par.Overscan

How far the raster is scanned past the visible face.

Default:
0.03
Range:
-0.1 to 0.25
Vignette (Vignette) Float op('teleloop').par.Vignette

Corner falloff.

Default:
0.35
Range:
0 to 1
Reflection (Reflection) Float op('teleloop').par.Reflection

Room light on the front glass, as a display-referred grey.

Default:
0.16
Range:
0 to 1
Phosphor Black (Ambient) Float op('teleloop').par.Ambient

Unlit phosphor is a cool grey, never zero. Display-referred.

Default:
0.055
Range:
0 to 0.35
AGC (Agc) Float op('teleloop').par.Agc

Automatic gain: the picture breathes on cuts. This is also what bounds the feedback loop.

Default:
0.45
Range:
0 to 5
HV Sag (Agcbloom) Float op('teleloop').par.Agcbloom

High voltage sags under beam current, so bright frames swell.

Default:
0.25
Range:
0 to 1