====== Frame Sync ====== When using CueCam with a networked video source (e.g. Continuity Camera, NDI®, or OMT), latency can be introduced between the network OSC messages from your console and CueCam. To counter this, CueCam provides the ability to offset the received data on the recording by up to 30 frames (1s) within the Recording Settings. It is also possible to automatically measure this latency as follows; * Create two new cues in your showfile with Time 0 (i.e. a snap) * The first cue should be as dark as possible (i.e. a blackout, with the house lights off) * The second cue should be as bright as possible or a fixture directed directly at the camera * Set Execute OSC String on the first cue to /cuecam/sync/arm * Set Execute OSC String on the second cue to /cuecam/sync/trigger * Ensure CueCam is NOT recording * Run the first cue, observe "Waiting for Event" on CueCam's display * Run the second cue, a calculated delay should appear on screen. NB This works best with LED or shuttered fixtures, as opposed to incandescent lamps. The detected delay will be automatically stored in the Recording Settings, and can be manipulated there (sometimes you may find it is up to 1 frame out) ---- === Alternative (Scripted) Method === This is for people comfortable with scripting and the command line, if you're not, use the method above with your Eos console. You can also use the following simple python script, save this to your Mac and change the IP and Port to reflect your cuecam instance, then point the camera at the terminal window. Note this requires your terminal window to be white-on-black not black-on-white #!/usr/bin/env python3 import socket, sys, time # Set your CueCam IP and Port here HOST, PORT = "10.24.60.100", 5555 ### No need to change anything beyond this point, but it's commented ### to explain what each command does # Very simple OSC packet formatter def osc(address): address = address.encode() + b"\0" address += b"\0" * (-len(address) % 4) return address + b",\0\0\0" with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as udp: # Stop CueCam recording and arm sync udp.sendto(osc("/cuecam/stop"), (HOST, PORT)) udp.sendto(osc("/cuecam/sync/arm"), (HOST, PORT)) sys.stdout.write("\033[0m\033[2J\033[H") try: # wait 2s time.sleep(2); # trigger sync pulse udp.sendto(osc("/cuecam/sync/trigger"), (HOST, PORT)) sys.stdout.write("\033[47;30m\033[2J\033[H") sys.stdout.flush() # wait 1 frame time.sleep(1/30) finally: # clear screen sys.stdout.write("\033[0m\033[2J\033[H") sys.stdout.flush()