Send an image to another application
Sync sends your browser image to a video application on the same computer. Audio input uses a separate setup.
In Noisedeck and Polymorphic, send to sync is in the View menu. Visualize also has a Sync output control.
- Start Sync on the computer that runs your browser.
- Open send to sync in your web application.
- On Linux, run
syncctl pair in a terminal.
- Select Connect Sync.
- If the browser asks for access to apps on your computer, select Allow.
- Check the website address in the Sync pairing request.
- If the address is correct, approve the request with the instructions below.
- Enter a name for the video output.
- Select Start sending.
- Select the Sync source in the receiving application.
On macOS or Windows, select the approval button. On Linux, type y in the pairing terminal. Then press Enter.
On Linux, the terminal must receive a pairing request within 35 seconds of starting syncctl pair.
This wait includes time spent answering browser permission requests. Answer Sync's approval request within 30 seconds.
Select the correct video source
- macOS: Select your named Syphon source, or Sync Camera in a camera list.
- Windows: Select your named Spout or NDI source. Windows 11 also supports the camera named Sync.
- Linux: Select Sync Camera in the receiving application's camera list.
Expected result: The receiving application shows your current browser image.
Closing the Sync dialog does not stop video output.
- To stop video output, open send to sync again.
- Select Stop sending.
Use separate audio inputs to control your image
Sync gives Noisedeck access to audio inputs outside the browser's microphone system. It supports up to 32 input channels per device.
An audio interface is the device that supplies your input signals. A channel is one input reported by that device.
An audio automation changes a visual parameter when its selected input signal changes. Sync does not play that input through your speakers.
1. Prepare your interface
- Connect the interface to the computer that runs Noisedeck.
- Turn on the interface.
- If the manufacturer requires a driver, install that driver.
- Check that the operating system lists the interface as an audio input.
- Connect a test signal to one input.
- Check the input level in the interface's control application.
- Install the current Sync download.
- Start Sync.
Only the selected input must receive the test signal. This makes the channel check clear.
2. Complete your platform setup
macOS: check the input and audio permission
- Open Audio MIDI Setup from Applications > Utilities.
- Select your interface in the Audio Devices window.
- Check the input channels and sample rate.
- Continue with step 3 below.
- If macOS requests microphone access for Sync, allow access.
The permission request can appear when Noisedeck first opens the input. An external audio interface also needs microphone permission.
Sync uses CoreAudio, the macOS audio system. Sync Camera approval does not grant audio permission.
Apple audio-device guide · Apple audio-permission guide
Windows: check the input and microphone access
- Open Settings > System > Sound.
- Check that Windows lists your interface under Input.
- Open the microphone privacy settings.
- Turn on microphone access.
- Turn on microphone access for desktop apps.
- Continue with step 3 below.
Windows 11 uses Settings > Privacy & security > Microphone. Windows 10 uses Settings > Privacy > Microphone.
Sync uses WASAPI, a Windows audio system. It cannot use an input that is available only through ASIO.
The interface's ASIO channel count can differ from its Windows input channel count. Sync uses the count that Windows supplies.
Microsoft microphone-permission guide
Linux: set up PipeWire audio and pairing
Sync supports ALSA and JACK. PipeWire supplies a JACK connection through pw-jack.
The following steps apply to the installed Ubuntu user service with PipeWire. They do not configure a separate JACK server.
- Install the PipeWire JACK package:
sudo apt install pipewire-jack
- Open the Sync service override:
systemctl --user edit noisedeck-sync.service
- Enter these lines in the editable section:
[Service]
ExecStart=
ExecStart=/usr/bin/pw-jack /usr/bin/syncd
- Save the file.
- Close the editor.
- Reload the service settings:
systemctl --user daemon-reload
- Restart Sync:
systemctl --user restart noisedeck-sync.service
- Check that Sync responds:
syncctl status
The empty ExecStart= line clears the previous start command. Keep both ExecStart lines.
Installing pipewire-jack alone does not change a running Sync service. The override starts Sync through pw-jack.
Restarting Sync stops active audio and video connections. Audio then needs new approval.
ALSA and separate JACK setups also use syncctl pair before connecting from Noisedeck.
Linux setup reference · PipeWire connection guide
3. Connect Noisedeck
- Open Noisedeck.
- Right-click a visual parameter that you want to control.
- Select audio input under create new. Noisedeck creates an audio automation for that parameter.
- If the website requests microphone access, close that request with Allow or Block.
- On Linux, run
syncctl pair in a terminal.
- In the audio automation, select Connect Sync audio.
- If the browser requests access to apps on your computer, select Allow.
- Check the website address in the Sync pairing request.
- On macOS or Windows, approve the request for the correct address.
- On Linux, type
y in the pairing terminal.
- On Linux, press Enter. The terminal shows
paired after approval.
- In device, select the interface whose name ends in Sync.
- In channel, select the input number that receives your test signal.
- In band, select vol for the first audio test.
The initial website microphone request belongs to browser capture. Either answer lets you continue to Sync audio.
Sync audio needs its own pairing approval and operating-system audio permission. Blocking the website microphone does not block Sync audio.
On Linux, the terminal must receive a pairing request within 35 seconds of starting syncctl pair.
This wait includes time spent answering browser permission requests. Answer Sync's approval request within 30 seconds.
For the normal Noisedeck website, the address is https://noisedeck.app. A preview website has a different address.
Sync can reuse approval while it remains open. If no pairing request appears, continue when the device list becomes available.
Expected result: The automation shows connected and a channel count. The assigned parameter changes with the input signal.
A device name without the Sync suffix uses browser audio capture. It can have fewer channels.
4. Check each channel
- Start the test signal on one input.
- Check that its assigned visual parameter changes.
- Stop the test signal. With vol selected, the parameter returns toward min.
- Move the test signal to the next input.
- Select that input's channel number in Noisedeck.
- Repeat the check for each input you plan to use.
The channel list follows the operating system's input order. The interface's routing settings can change that order.
If several channels react to one signal, check the interface mixer and Linux audio connections.
5. Select the response
- low: Use the low-frequency level, such as bass.
- mid: Use the middle-frequency level.
- high: Use the high-frequency level, such as a hi-hat.
- vol: Use the overall audio level.
- raw: Use the signal's positive and negative values.
min and max set the visual parameter's output range. They do not change the interface's input gain.
With raw, zero input sets the parameter halfway between min and max. This is normal.
For control voltages, the interface must support the signal type and voltage. Sync cannot remove the interface's electrical limits or filtering.
Audio response reference
Stop or reconnect an input
Closing the automation panel does not stop capture. An input stays active while a parameter uses it.
- To remove an assignment, right-click its visual parameter.
- Select remove automation.
- Repeat for other parameters that use the input.
Capture stops when no parameter uses that input.
After Sync restarts, its earlier audio approval is no longer valid.
- On Linux, run
syncctl pair again.
- Select Connect Sync audio.
- If the first attempt fails, select Connect Sync audio again to request new approval.
- Approve the request for the correct website address.
- Check the selected device and channel.
Current limits
- Sync uses the first 32 inputs reported by the selected audio system. A device can report fewer inputs.
- Sync cannot select input 33 or higher. It cannot rearrange the native input order.
- Sync does not convert sample rates. Some interface sample rates are not available in the browser.
- Sync does not promise exact timing between audio and video.
- On macOS, capture from a physical interface has been checked with a 32-channel WING Rack over several hours. Physical interfaces on Windows and Linux have not been checked yet. Test your own setup before use.
- Audio can drop out briefly while a Mac heats up. In our three-hour test that happened once, for about two and a half seconds.
Test results and research
Our longest tests ran on an Apple M2 MacBook Air with Sync 0.2.88 and Noisedeck in Chrome. A WING Rack sent 32 USB channels at 44.1 kHz, each carrying its own tone. The picture was 1920 by 1080 at 60 frames per second, received through Syphon by a separate app that checked every frame.
In a one-hour run, 215,938 of 216,000 frames arrived, all 32 tones were identified on the right channels, and Sync dropped no audio. The only loss came from one background disturbance on the Mac.
Three more hours back to back on the final build each lost less than a tenth of a percent of the picture and the sound.
Sync's built-in renderer ran 30 minutes at 60 frames per second with all 32 WING channels open and lost no frames. The inputs were silent in that run, so it shows the capture works, not how the image responds.
Earlier runs on the same laptop fell to about 35 frames per second after several minutes. The cause was heat: macOS slowed the graphics chip, and the video encoder ran out of time. A lighter default program and Noisedeck's new pacing fixed it for these tests. The thermal report shows the measurements.
Windows and Linux have passed package and build checks, and 32 software-generated channels passed through JACK and PipeWire on Linux, but no physical interface has been tested on either. Earlier multichannel audio report
For a problem with these steps, open Troubleshooting.
Allow a website to use Sync
Pairing gives one website permission to connect to Sync on your computer. The request shows the website's origin.
An origin is the website address, including https:// and any port number. Different origins need separate approval.
- On Linux, run
syncctl pair before requesting a connection.
- Select Connect Sync audio for audio, or Connect Sync for video.
- If the browser requests access to apps on your computer, select Allow.
- Compare the address in Sync's request with the website you opened.
- If the address is incorrect, deny the request.
- If the address is correct, approve the request.
On Linux, approval means typing y in the pairing terminal, followed by Enter. An empty answer denies the request.
On Linux, the terminal must receive a pairing request within 35 seconds of starting syncctl pair.
This wait includes time spent answering browser permission requests. Answer Sync's approval request within 30 seconds.
The macOS and Windows request also defaults to denial. Read the request before you press Return.
Browser connection permission, Sync pairing, and operating-system microphone permission are separate. Audio can need all three.
After Sync restarts, audio needs new approval. A saved video pairing does not provide that approval.
Remove a website's access
On macOS and Windows, the Pairings menu lists approved websites.
- Open the Sync menu.
- Open Pairings.
- Revoke the website that must no longer have access.
On Linux, these commands use the running service:
syncctl pairings
syncctl revoke https://example.com
Replace https://example.com with the address from your pairing list.
For a source build, quit Sync before using these direct commands:
syncd --list-pairings
syncd --revoke-origin https://example.com
Connection and permissions
Select the problem that matches your screen. Complete its steps in order.
Noisedeck cannot find Sync, or shows Needs attention
- Check that Sync is running on the same computer as Noisedeck.
- On macOS, check for the Sync menu-bar icon.
- On Windows, check the notification area near the clock.
- On Linux, run
syncctl status.
- If the Linux service does not respond, run
systemctl --user start noisedeck-sync.service.
- For audio, select Connect Sync audio.
- For video, select Connect Sync.
- If the browser requests access to apps on your computer, select Allow.
The video dialog's Check again button checks for Sync. It does not request browser permission.
If you previously denied browser access, change the site's local-network permission in the browser's site settings.
Noisedeck Standalone does not need the browser local-network prompt.
The browser reports ERR_BLOCKED_BY_CLIENT
A browser content blocker can prevent the website from connecting to Sync.
- Open the content blocker's controls for the current Noisedeck website.
- Allow the website to connect to local applications, or disable filtering for that website.
- Select Connect Sync audio for audio, or Connect Sync for video.
Use a site-specific exception. Sync does not require a public network port or a router change.
The pairing request was denied, timed out, or did not appear
- On Linux, if the previous pairing command is still active, press Ctrl+C.
- Wait 30 seconds after the previous pairing request ends. This also applies if you selected Connect before running
syncctl pair.
- On Linux, run
syncctl pair before trying again.
- Select Connect Sync audio for audio, or Connect Sync for video.
- Check the Sync request for the correct website address.
- On macOS or Windows, approve the request.
- On Linux, type
y in the pairing terminal.
- On Linux, press Enter.
The request defaults to denial. An empty Linux answer also denies it.
Each Linux pairing command handles one request. Start the command again for another attempt.
The Linux terminal must receive a pairing request within 35 seconds of starting syncctl pair.
This wait includes time spent answering browser permission requests. Answer Sync's approval request within 30 seconds.
If the terminal shows failed to read the control response, its wait may have expired. Repeat the steps above.
If Sync reports a pairing limit, remove an unused pairing. The Pairing guide gives the commands.
Microphone permission was denied
Permission to connect to Sync does not grant permission to use an audio input.
Website microphone request
Noisedeck can request website microphone access when you create an audio automation. This request controls ordinary browser capture.
For Sync audio, continue with Connect Sync audio. Select a device whose name ends in Sync.
You can leave website microphone access blocked. The settings below control Sync's separate operating-system permission.
macOS
- Open System Settings > Privacy & Security > Microphone.
- Turn on access for Sync.
- Quit Sync.
- Open Sync from Applications.
- Complete the reconnect steps in Audio input.
If Sync is absent from the list, select a Sync audio input in Noisedeck to request access.
Camera Extensions and Input Monitoring are different permissions. They do not grant audio-input access.
Windows
- Open the Windows microphone privacy settings.
- Turn on microphone access.
- Turn on microphone access for desktop apps.
- Quit Sync.
- Open Sync.
- Complete the reconnect steps in Audio input.
Desktop apps do not have individual microphone switches in Windows. Use the desktop-app setting.
Apple permission help · Microsoft permission help
Audio input
The interface is missing, or only two channels appear
- Check the interface's power and cable connections.
- Check that the operating system lists the interface as an input.
- Check the input count in the interface's control application.
- On Linux, check the PipeWire profile and JACK connections.
- Select Connect Sync audio to update the device list.
- In device, select the name ending in Sync.
- Check the displayed channel count.
A name without Sync uses browser capture. A native input can still have only two channels if its driver reports two.
Windows ASIO channels are not available through this release. Linux PipeWire needs the service setup in Audio input.
Sync omits devices with identical names in the same audio system because it cannot identify them safely.
If two interfaces have the same name, test with only one connected.
The device is connected, but the image does not react
- Check that the visual parameter has an audio automation assigned.
- In device, select the name ending in Sync.
- Select the channel that receives your test signal.
- Select vol in band.
- Set different values for min and max.
- Start the test signal.
- Check that the interface's input meter changes.
- Check that the assigned visual parameter changes.
The connected label confirms an open input. It does not confirm that the selected channel has a signal.
With raw, zero input gives the midpoint of min and max. Use vol for an audio-level check.
I cannot hear the input through my speakers
Sync audio input controls visual parameters. Noisedeck keeps this input silent at its speaker output.
Use your interface's monitoring controls or an audio application if you need to hear the input.
The wrong channel reacts, or several channels react together
- Send a test signal to only one interface input.
- Select that channel in Noisedeck.
- Check the interface's mixer for combined or duplicated inputs.
- On Linux, check which source ports connect to the Sync capture ports.
- Repeat the one-channel test after correcting the connections.
Noisedeck channel numbers follow the input order supplied to Sync. That order can differ from the labels on physical sockets.
The channel-check procedure helps you identify the inputs you need.
The input is unavailable or another application is using it
- Save your work in other audio applications.
- Close applications that hold the interface for exclusive use.
- Select Connect Sync audio.
- Check the selected device and channel.
An audio application can prevent Sync from opening the same interface. Direct ALSA access can also conflict with PipeWire or JACK.
For a PipeWire system, use the PipeWire setup before trying direct ALSA access.
Audio stopped after a cable change or Sync restart
- Reconnect the interface if necessary.
- Check that the operating system lists the input again.
- On Linux, run
syncctl pair.
- Select Connect Sync audio.
- If the first attempt fails, select Connect Sync audio again to request new approval.
- Approve the request for the correct website address.
- Check the selected device and channel.
- Repeat the one-channel signal check.
Sync does not automatically recover every device failure. A device change can also change its name, channels, or sample rate.
Audio approval expires when Sync restarts. Earlier video approval does not replace it.
A sample-rate or format error appears
The sample rate is the number of audio samples each second. Sync uses the interface's active or preferred rate.
- Save your program in Noisedeck.
- Stop applications that use the interface before changing its sample rate.
- Open the interface's sample-rate settings.
- If available, set the interface to 48,000 Hz for this test.
- Restart Sync.
- Complete the reconnect steps in Audio input.
- Repeat the one-channel signal check.
On macOS, the sample rate appears in Audio MIDI Setup. Other systems can use the interface's control application.
A rate change can stop other audio applications. Sync does not convert an unsupported rate to another rate.
Audio controls jump, pause, or reset
Late audio data can make a control hold its last value. Lost frames can reset the response.
Heavy processing load can cause these problems.
- Save your Noisedeck program.
- Stop Sync video output during the audio test.
- Close other applications that use heavy audio or graphics processing.
- Test one audio input with a simple Noisedeck program.
- Repeat the channel check.
- If the problem continues, collect the report information below.
Sync can discard audio data when it cannot keep up. The preview does not guarantee continuous audio or exact audio/video timing.
Noisedeck says to update Sync for audio input
- Quit the running copy of Sync.
- Install the current Sync download.
- Start the installed copy.
- Complete the reconnect steps in Audio input.
Older Sync releases do not have native audio input. A second, older copy can still be running after an update.
Custom command-line settings can also disable audio. The standard installer uses settings that enable it.
Video output
Sync Camera is missing on macOS
- Check that Sync is in Applications.
- Open Sync from Applications.
- Open the Sync menu.
- Select the Camera line to open the extension settings.
- Allow the Sync Camera extension.
- Close the receiving application.
- Open the receiving application again.
- Select Sync Camera in its camera list.
On macOS 13 and 14, approval is under Privacy & Security. On macOS 15, use General > Login Items & Extensions > Camera Extensions.
If the approval entry is missing, quit Sync and open it again from Applications. The entry needs an active extension request.
The Sync camera is missing on Windows or Linux
Windows
- Check that the computer runs Windows 11.
- Open the Sync tray menu.
- Select Enable Sync Camera….
- Approve the Windows installation request.
- Restart the receiving application.
- Select the camera named Sync.
Windows 10 supports Spout and NDI output, but not Sync Camera.
Linux
- Run
syncctl doctor.
- If camera setup is incomplete, follow the Linux installation steps.
- If setup added the
video group, sign out of Ubuntu.
- Sign in again.
- Restart the receiving application.
Existing v4l2loopback settings can prevent automatic camera setup. Keep the reported error for your support request.
The camera shows a waiting card
The card confirms that the camera is available. It has no active video sender.
- Open send to sync in your web application.
- Select Start sending.
The current browser image replaces the waiting card after video arrives.
The camera image is black, frozen, or delayed
- Save your Noisedeck program.
- Check that Noisedeck shows a changing image.
- Keep the Noisedeck window visible.
- In the Sync dialog, select Stop sending.
- Select Start sending.
- If the image remains frozen, install the current Sync download.
- Restart the receiving application.
- If the problem continues, collect diagnostics below.
Some older versions retained a closed video connection. Sync 0.2.55 and later include the fix for that problem.
A gradual slowdown during a long session is usually heat. See the next item.
The video stutters, runs at 30 fps, or slows over time
- Check the frame rate selected by the receiving application.
- On a laptop, connect power and give it room to breathe.
- Check the GPU busy, Network, and Failed counters in the Sync dialog.
- Reduce the browser image size.
- If necessary, reduce the output frame rate.
- For a long-session problem, record how long the session ran.
- Save your program before restarting the browser or standalone application.
A slowdown that starts several minutes in is usually heat. Fanless laptops such as the MacBook Air are the most affected. Once the machine gets hot, macOS slows the graphics chip and the video encoder can no longer keep up. A lighter program, a smaller image, or a Mac with a fan all help.
Sync skips video frames under load. An advertised rate of 60 fps does not guarantee 60 different received images each second.
Older cameras were limited to 30 fps. The current download offers up to 60 fps where the receiving application supports it.
The picture stopped while another heavy app was running
If another app takes over the graphics chip completely, Noisedeck cannot encode video and the picture stops. It comes back on its own a few seconds after that load ends.
- Close or pause the other app.
- Wait a few seconds for the picture to return.
- If you started sending while the other app was busy and saw a warmup error, select Start sending again.
- If a Syphon receiver stays blank, select the Sync source in it again. OBS reconnects on its own.
The video dialog shows No provider available
A provider is a video output method, such as Syphon, Spout, NDI, or a camera.
- Restart Sync.
- On Linux, use
systemctl --user restart noisedeck-sync.service.
- For NDI output, check that the separate NDI Runtime is installed.
- Open the Sync dialog again.
- Select Connect Sync.
Linux NDI needs libndi.so.5. Syphon and Spout do not require the NDI Runtime.
The Sync menu shows an old version after an update
- Quit Sync.
- Open the copy from its normal installation location.
- Check the service version in Copy Diagnostics.
Versions 0.2.31 and earlier could show an incorrect menu version. The current release includes the corrected label.
Collect information for a support request
The following information helps us reproduce the problem.
- Your operating system and version.
- Your browser and version, or the Noisedeck Standalone version.
- The Sync version and the exact error text.
- The steps that cause the problem.
- For audio: interface model, selected device name, channel number, channel count, and sample rate.
- Whether video output was active during the audio problem.
- For video: receiving application, output size, frame rate, sender counters, and elapsed session time.
macOS or Windows
- Open the Sync menu.
- Select Copy Diagnostics.
- Paste the text into your support request.
Linux
- Run
syncctl status.
- Run
syncctl doctor.
- Copy the service log:
journalctl --user -u noisedeck-sync.service --since "10 minutes ago" --no-pager
- Include the command output in your support request.
Additional macOS camera log
- Reproduce the camera problem.
- Within a few minutes, run this command in Terminal:
/usr/bin/log show --last 10m --info \
--predicate 'process == "syncd" OR process CONTAINS "sync.camera" OR process == "sysextd"'
- Include the output with the diagnostics.
Report a Sync problem
Sync can pair with a web origin that the user approves. The browser SDK supports direct RGBA, Canvas 2D, WebGL2, and WebGPU sources. Call pair() from a click. Keep the token out of URLs and logs. Send Permissions-Policy: loopback-network=(self) from your page.
Each successful pairing replaces the token for that origin. Share the latest token between audio and video before opening another connection. Already authenticated sessions remain open.
Sync SDK 0.3.0 includes an installable package and browser modules.
npm install https://github.com/noisefactorllc/sync/releases/download/sdk-v0.3.0/noisefactor-sync-0.3.0.tgz
import { SyncBridgeClient } from '@noisefactor/sync'
const pairingClient = new SyncBridgeClient()
const { token } = await pairingClient.pair('My visual app')
pairingClient.close()
const sync = new SyncBridgeClient({ token })
await sync.connect()
const sender = await sync.createRgbaSender('My output')
sender.configure({
width: 1280, height: 720, format: 'rgba8unorm',
colorSpace: 'srgb', alphaMode: 'opaque', fps: 60
})
Native audio input
Use a separate connected client for each active audio source. readAudioSource() returns one planar Float32Array per channel and cumulative frame and drop cursors.
async function readSelectedAudioSource(selectedSourceId) {
const audio = new SyncBridgeClient({ token })
try {
const sources = await audio.listAudioSources()
const source = sources.find(({ id }) => id === selectedSourceId)
if (!source) throw new Error('Selected audio input is unavailable')
await audio.openAudioSource(source.id)
try {
const packet = await audio.readAudioSource(source.id)
consumeAudio(packet.planes, packet.firstFrame, packet.droppedFrames)
} finally {
await audio.closeAudioSource(source.id)
}
} finally {
audio.close()
}
}
Developer guide · Protocol v1 · Canvas, WebGL2, WebGPU, and Electron examples