A website to listen and control norns

Connect a norns device through the internet, allowing tactile control and streaming music.

connect. norns.online is a norns script, a script library, and a website.

share tapes. use the norns.online script to upload or download tapes to norns.online/share.

share script saves. individual scripts also can upload/download saves to norns.online/share by going to the SHARE parameter from within a particular script (devs: feel free to ask me for help to add it your script).

listen and visualize. run the norns.online script to beam your audio+visual data to norns.online/<yourname>.

remote control. the website norns.online/<yourname> has the same inputs as your norns to provide remote access.

collaborate. use the norns.online script to connect to other norns via “rooms.” anyone in a “room” shares live audio. the latency is ~4 seconds, so you can imagine that you all are playing together while being socially distanced by a distance of a quarter-mile.


How norns.online works

norns runs a service that sends screenshot updates to norns.online/<yourname>. the website at norns.online/<yourname> sends inputs back to norns. norns listens to to inputs and runs the acceptable ones (adjustable with parameters). if enabled, norns will also stream packets of audio and send those to the website. the website will buffer them and play them so anyone with your address can hear your norns.

a pre-compiled jack_capture periodically captures the norns output into 2-second flac files into a /dev/shm temp directory. each new flac packet is immediately sent out via websockets and then deleted. because of buffering, expect a lag of at least 4 seconds. when in a room, audio from other norns is piped into your norns via mpv. the incoming audio from other norns is added at the very end of the signal chain so (currently) it cannot be used as input to norns engines.

for norns.online,if you are online, you have security through obscurity (weak security). that means that anyone with the url norns.online/<yourname> can access your norns so you can make <yourname> complicated to be more secure. code injection is not possible, as i took precautions to make sure the inputs are sanitized on the norns so that only enc() and key() and _menu.setmode() functions are available. but, even with these functions someone could reset your norns / make some havoc. if this concerns you, don't share <yourname> with anyone or avoid using this script entirely.

everything you load to norns.online/share is made public but everything is also authenticated. authentication means that the data you download from someone named "bob" is truly data from the user who registered as "bob" and not someone posing as "bob". the server does not ensure that "bob" is a good or bad person, but only that the "bob" the server knows is the "bob" that registered with the server. authentication is provided through using rsa key-pairs. the server verifies your data comes from who you say you are by checking the signature on the hash of anything you upload. in theory, other people can obtain your key-pair directly from you to independently verify your data is actually coming from you (so the server need not be trusted), but this is not implemented yet.

if audio is enabled, a fair amount of bandwidth is used. the norns sends out screenshots periodically, but at the highest fps this is only ~18 kB/s. however, if audio is enabled - the norns sends flac packets periodically (~170 kB/s = ~616 MB/hr). if you are audio-sharing a room you will be receiving about that much for each norns in the room. i tried reducing bandwidth by using lossy audio (ogg) however the gapless audio playback only worked without pops when using flac or wav.

on a raspberry pi 3b+ this uses about ~4% total CPU for capturing and sending audio data. screenshots also take cpu and higher fps takes more. the exact fps depends on the max fps (set in params) and how fast the screen changes (only updated screens are sent). at max it might take up to 30% of the cpu (15 fps!), but usually its 1-15%.

installation requires ffmpeg and mpv which take up about 300MB. other than that, it only takes up space when you download shared script saves and tapes.


  • move with any encoder, select with K3
  • update with K1+K2

note: if this is the first time running, wait for the mpv and ffmpeg programs to be installed (~300 MB).

beam your norns

  • press go online.
  • open browser to norns.online/<yourname>.
  • use norns normally, your norns will stay online in the background.

norns↔norns audio sharing

  • go to gloal parameters and make sure both “send audio” and “allow rooms” are set to “enabled”.
  • change the “room” to the room you want to share audio. make sure your norns partner uses the same room.
  • go to main screen and press go online. you should now be sharing audio with any other norns in that room.
  • adjust “room vol” to change the level of incoming audio.


  • make an internet radio from your norns
  • collaborate between two norns
  • twitch plays norns
  • make demos (screen capture norns.online)
  • download screenshots (right-click image at norns.online to download)
  • tech support other people’s norns
  • sharing tapes / script saves
  • !?!?!?

 / #norns #music #websites #portfolio 

Made by Zack, filed in Blog. 2019.