ptz cam

ptzcam · output

CV control of a physical PTZ camera (NexiGo P610, Logitech PTZ Pro 2) — pan/tilt/zoom knobs plus matching CV inputs, sent as MIDI sysex to the native PT-PTZ helper (tools/pt-ptz), which drives the cameras over USB (one MIDI pair and one module per camera). Each axis follows the mode the camera reports in the bind handshake: absolute axes take normalized positions, velocity axes take signed rates with a watchdog-guarded stop; sends are coalesced to ~10 Hz. Carries no audio or video — the camera picture arrives through a normal camera input.

Drives a physical PTZ camera from the patch. It sends MIDI sysex to the PT-PTZ helper app running on the same machine, which translates into USB camera control — the camera physically pans, tilts and zooms. The helper exposes one MIDI pair per connected camera (PT-PTZ-…); the faceplate's device body picks which camera this module drives, so two modules can run two cameras. The module carries no audio or video of its own — the camera's picture reaches the rack through a normal camera input. Each axis follows what the camera itself reports in the bind handshake: an ABSOLUTE axis (NexiGo P610 pan/tilt/zoom, Logitech zoom) treats knob+CV as a position, ±1 spanning the full mechanical range; a VELOCITY axis (Logitech PTZ Pro 2 pan/tilt) treats knob+CV as a rate — sign is direction, zero (with a small deadzone) stops, and the helper halts motion by itself if the app ever stops streaming, so a dropped page cannot leave the camera panning. PAN, TILT and ZOOM knobs are the base value; the matching CV inputs ADD to the knob, so with knobs at default a patched LFO or joystick IS the position (or rate) and the knobs become stage trim. SLEW rate-limits absolute-axis motion (1 = instant); velocity axes ignore it — a commanded stop must never be slewed. Sends are coalesced to ~10 per second.

the faceplate

ptz campan_cvcvtilt_cvcvzoom_cvcvaudiocvgatepitch
3 inputs · 0 outputs · 4 params

inputs

idcablewhat it does
pan_cvcvPan CV, ±1, added to the PAN knob. On an absolute-axis camera the sum is the pan position; on a velocity-axis camera it is the pan rate (sign = direction, near-zero = stop).
control voltage (CV)
tilt_cvcvTilt CV, ±1, added to the TILT knob. Position on an absolute axis, rate on a velocity axis.
control voltage (CV)
zoom_cvcvZoom CV, added to the ZOOM knob; the summed 0..1 spans wide to full telephoto.
control voltage (CV)

params

idlabelrangedefaultcurve
panpan-1..10linear
tilttilt-1..10linear
zoomzoom0..10linear
slewslew0..10.3linear

controls

controlwhat it does
panBase pan, ±1. Position on an absolute-axis camera, rate on a velocity-axis one. CV on pan_cv adds to it.
Ptzcam connect {n}The gesture that makes the module do anything at all, and it is two grants in one. Web MIDI shows no port until the browser consents — one prompt, once per origin — and the PT-PTZ helper (tools/pt-ptz, started with start_ptz.sh) is what publishes the virtual PT-PTZ-… pair a camera lives behind, so before this press there is no port to bind, no camera to ask about, and PAN, TILT, ZOOM and SLEW all send nothing. Pressing it grants access, resolves the pair this module is pointed at (the first PT-PTZ-… pair unless a camera is picked in the device body), and requests the caps handshake that tells the module which axes are absolute and which are velocity. It is safe to press again: on an already-granted origin it simply re-resolves, which is what re-binds a helper that was restarted or a camera that was replugged. The outcome is always nameable — bound, no helper port, no caps reply, camera absent, or one of the browser's own refusals — and it is the device body's lamps and error line that name it.
slewRate limit on absolute-axis motion, fractions of full range per second on a square curve; 1 is instant. Velocity axes ignore it.
tiltBase tilt, ±1. Position on an absolute axis, rate on a velocity axis. CV on tilt_cv adds to it.
zoomBase zoom, 0 wide to 1 full telephoto. CV on zoom_cv adds to it.

source

ptzcam.ts on GitHub.

Generated from packages/web/src/lib/{audio,video}/module-registry.ts · repo