What is NINJAM?
NINJAM stands for "Ninjam Is Not Just Another MP3 Jamming" tool. It was created by Justin Frankel, the same person who created Winamp (the legendary media player) and Reaper (the popular digital audio workstation).
Unlike video calls or other jamming apps that try to fight internet latency and usually fail, NINJAM takes a completely different approach: it embraces the latency.
How does it work?
NINJAM uses an interval-based approach. Instead of trying to send audio in real time (which always has noticeable delays over the internet), it organizes music into synchronized loops called intervals. Here is the key idea:
- Everyone plays in sync to the same tempo and interval length
- While you record what you are playing in the current interval, you hear what others played in the previous interval
- Think of it like a musical round or relay — you respond to what just happened
- There is always a delay of one interval, but everyone stays perfectly in sync
During Interval 1 you only record — there is nothing from others yet. Starting from Interval 2, while you record your new part, you hear what others played during the previous interval. This one-interval offset is what makes NINJAM work over any internet connection, regardless of distance.
This means NINJAM works best with improvisational music: jazz, blues, ambient, experimental, funk, and anything where you can react to what you hear. It is not designed for playing pre-written songs note-for-note, but for creative, free-flowing jams where musicians respond to each other.
Understanding BPM and BPI
Two settings control the timing of every NINJAM session:
- BPM (Beats Per Minute) — the tempo, how fast the music goes
- BPI (Beats Per Interval) — how many beats fit in one loop/interval
Together, they determine the interval length:
(BPI / BPM) x 60 = seconds.
For example, at 120 BPM / 16 BPI, each interval lasts
8 seconds (16 / 120 x 60 = 8).
Why NinjamZap?
The name says it all: NINJAM + Zap. “Zapada” is Argentine slang for an informal jam session — getting together with friends to play music, improvise, and have fun with no pressure. That spirit is at the heart of this app.
NinjamZap was born during the pandemic, when a group of musician friends from Córdoba, Argentina could no longer meet to play together. Searching for a way to keep jamming, they discovered NINJAM — and fell in love with it. What started as weekend “zapadas” over the internet became a six-year passion for the platform and its community.
The app was created by Javier Alejandro Cordero, an independent developer and drummer from Córdoba with over 25 years of experience in software engineering, who simply wanted a mobile NINJAM client that didn’t exist yet. NinjamZap is a personal project and a love letter to the NINJAM community — built to make online jamming accessible to everyone, right from your phone.
Have questions, ideas, or just want to say hi? Reach out at [email protected] or connect on LinkedIn.
Getting Started
NinjamZap is the first mobile NINJAM client for iOS. You can join jam sessions with musicians around the world directly from your iPhone or iPad.
When you first open NinjamZap, you will see the login screen:
The login screen — sign in or continue as guest
You have two options to get started:
- Sign in with an account — use Google, Microsoft, or Apple to log in. This saves your preferences and settings across sessions.
- Continue as Guest — no account needed. Just tap the button and jump straight into jamming. Guest mode gives you full access to all jam session features.
Tip: If you just want to try NINJAM for the first time, Guest mode is the fastest way in. You can always create an account later.
Connecting to a Server
After logging in or entering guest mode, you will see the Connection screen. This is where you configure your session before joining a jam.
The connection screen — configure and connect
NINJAM Username
Choose a name that will be visible to other musicians in the session. This can be anything you like — your name, your instrument, or a creative alias.
Server Address
Enter the address of a NINJAM server you want to join, for example ninbot.com:2049.
If you do not know any servers, tap "Browse" to open the Server Browser,
which shows a list of available public servers along with the number of musicians
currently connected to each one.
Audio Routing
Select your audio input and output devices. For the best experience:
- Wired headphones — lowest latency, no feedback issues
- Audio interface (iRig, Focusrite, etc.) — best quality for instruments and microphones
- Bluetooth headphones — they work, but add some latency
Latency Settings
Choose a latency preset based on your audio setup:
- Ultra Low — best for wired headphones and audio interfaces. Smallest audio buffer for the tightest response.
- Safe — recommended for Bluetooth devices or if you experience audio glitches. Larger buffer to prevent crackling.
Connect
Once everything is configured, tap Connect to join the session. The app will connect to the server and start syncing with the current interval.
The Session
Once connected, you are in the Session screen — the main jamming interface. Here is what you will find:
Master Volume, Mute and Metronome
Master controls and local channels
- Master Volume — controls the overall output level of everything you hear (remote musicians, metronome). The VU meter next to it shows your current output level.
- Mute — mutes all audio output instantly.
- Metronome — a click track that keeps everyone in sync, following the BPM set by the server. Enable it, especially when you are starting out. It helps you stay on beat and understand when each interval begins and ends.
Local Channels (Your Audio)
This section shows your audio input. The key control here is the "Xmit" toggle (short for Transmit). When Xmit is enabled, your audio is sent to the server and other musicians can hear you. When it is disabled, you are in "listen only" mode.
Tip: When you first join a session, start with Xmit off. Listen for a few intervals to get a feel for the music, then enable Xmit when you are ready to play.
Remote Channels (Other Musicians)
Remote channels — each musician has their own controls
Each musician in the session appears as a separate channel with their own controls:
- Volume slider — adjust how loud you hear that musician
- Mute (speaker icon) — temporarily silence a musician
- Solo (headphone icon) — hear only that musician, muting everyone else
- Recv toggle — enables or disables receiving audio from a remote user. Turn it off if you do not want to hear a particular person at all.
- VU meters — show the audio levels for each channel in real time, so you can see who is playing even before adjusting volumes
Chat
The chat panel lets you communicate with other musicians via text messages. It is an essential part of the NINJAM experience.
The chat panel — communicate with other musicians
- The server topic and rules are shown at the top of the chat
- System messages tell you when musicians join or leave the session
- Use chat to introduce yourself, suggest a key or tempo change, coordinate the jam, or just say thanks for a great session
- Be friendly — the NINJAM community is welcoming and collaborative
BPM / BPI
Tap the green BPM/BPI bar at the bottom of the session screen to open the BPM/BPI panel. This is where you can view and propose changes to the session tempo and interval length.
The BPM/BPI panel — adjust tempo and interval length
- BPM slider — adjust the tempo (beats per minute)
- BPI slider — adjust the beats per interval (loop length)
- Vote buttons — propose your changes to the server. Changes require a majority vote from the connected musicians to take effect.
- Tap Tempo — tap the button repeatedly to detect a tempo from your tapping rhythm. Useful when you want to match a song or a groove you have in mind.
Common BPM/BPI combinations
| Setting | Duration | Style |
|---|---|---|
120 / 16 |
8 sec | Standard jam — 4 bars of 4/4, works for most genres |
85 / 16 |
11.3 sec | Relaxed groove — blues, soul, laid-back funk |
90 / 8 |
5.3 sec | Short loops — fast call and response |
70 / 32 |
27.4 sec | Ambient — slow, evolving soundscapes |
Audio Setup Tips
Use headphones! Without headphones, your microphone picks up the playback audio and creates a feedback loop. This ruins the experience for everyone in the session.
Recommended setups (best to good)
- Audio interface (iRig, Focusrite iTrack, etc.) + wired headphones — the gold standard. Best audio quality, lowest latency, no feedback.
- Wired headphones with the built-in iPhone microphone — great for getting started. Low latency, no feedback.
- Bluetooth headphones — works, but adds latency. Use the "Safe" latency preset. Good enough for casual jams.
- Speaker with Echo Cancellation — when the built-in microphone is selected, tap the phone icon on the microphone row to enable Echo Cancellation. Audio quality will be reduced.
Audio interface tips
If you use an external audio interface (like an iRig), plug it in before opening NinjamZap. The app will automatically detect it and route audio through it. You can verify the selected device in the Audio Routing section on the Connection screen.
Technical details
NinjamZap processes all audio internally at 48 kHz. If your audio device runs at a different sample rate (common with Bluetooth), the app automatically resamples to match. This is handled transparently — you do not need to configure anything.
Streaming a Room to OBS
Every NinjamZap room is broadcast live on the web through our public bot
(you'll see it joined as ninjamzapbot in the player list). The
bot exposes one independent video stream per musician, plus a mixed audio
stream for the whole room. You can pull those streams into
OBS Studio
as Browser Sources, switch between cameras, add overlays, and restream the
result to YouTube, Twitch, or anywhere else OBS can push to.
Who is this for? Hosts who want to broadcast a jam as a livestream — multi-camera switching, picture-in-picture, scene transitions, branded overlays. If you just want to listen along to a room, the player at ninjamzap.com/live already does the right thing.
The tile URL
Each musician in a room has a dedicated single-tile page designed for OBS. Use either URL shape — they're equivalent:
- Pretty path:
https://www.ninjamzap.com/tile/<host>/<port>/<username> - Query string:
https://www.ninjamzap.com/tile/?host=<host>&port=<port>&u=<username>
<host> and <port> identify the
NinjamZap room (for example video.ninjamzap.com and
2049). <username> is the musician's NINJAM
nickname — exactly as it appears on the
live page for that room.
The page has a transparent background, no chrome, and auto-plays the stream
so OBS picks it up the moment the scene becomes active.
Step by step
- Open the live page for the room you want to stream (ninjamzap.com/live) and note the host, port, and the nicknames of the musicians in the room.
- In OBS, create a new scene. Add a Browser Source for each musician you want as a separate camera. Set the URL to the tile URL above with that musician's nickname, choose the width/height you want for the tile, and click OK.
-
Add one more Browser Source for the room's audio. Use
any musician's tile URL with
?audio=1appended (or&audio=1after the existing query string). Only add this flag to one source — if more than one Browser Source plays audio you'll get duplicate streams stacked on top of each other and unpleasant phasing. - Lay out the tiles on your canvas: grid, picture-in-picture, single pinned camera with thumbnails, whatever works for your show. Each tile is just a video element — resize, crop, and apply OBS filters freely.
- Start streaming or recording in OBS as you normally would.
OBS Browser Source settings we recommend: uncheck "Refresh browser when scene becomes active" and "Shutdown source when not visible". Both options would tear down the HLS buffer every time you cut to a different scene, which means a fresh 4-second buffer wait and an audible audio glitch on every cut. Leaving them off keeps the streams warm in the background.
URL flags
You can tweak any tile's behavior by appending these flags to the URL
(use ? for the first one, & for the rest):
audio=1— play the room's mixed audio. Add this to exactly one Browser Source.label=0— hide the small username chip at the bottom-left of the tile. Useful when you're rendering your own lower-thirds in OBS.fit=contain— letterbox the video instead of cropping. Helpful when a musician is filming vertically and your scene is horizontal.delay=<seconds>— override the audio offset (default1.0). Set to0to disable the built-in WebAudio delay if you're handling A/V sync in OBS.
What to expect
- Latency: about 10–15 seconds from what each musician plays to what your stream's audience hears. NINJAM itself introduces a one-interval delay (musicians play to the previous interval), and the HLS pipeline that feeds OBS adds another few seconds of buffering. For casual restreams this is invisible; for live talk-over hosts it's a constraint to plan around.
- Tile drift: between any two camera tiles you'll see roughly 100–300 ms of drift. It's stable (it does not grow over time) but it isn't zero. Acceptable for picture-only camera switching; visible if you try to cut between two angles of the same fast musical phrase.
- Reconnects: if a musician's stream goes offline (they hung up, lost their connection, switched cameras), the tile automatically reattaches when they come back. No action needed on your side.
Coming later: broadcast-grade per-camera streams
The Browser-Source path above is the lightest possible setup — great for hobby restreams and "press play and walk away" broadcasts. If you need sub-2-second latency or tighter tile-to-tile sync (real multi-cam directing with fast cuts), the next step is a per-user SRT or WebRTC push from the bot directly to OBS, with no HLS in between. That path is on the roadmap; if you have a concrete production use case for it, email [email protected] and we'll prioritize it.
Tips for Great Jam Sessions
- Start by listening. Join a session and listen for at least one full interval before you start playing. Get a feel for what is happening musically.
- Keep it simple. Leave space for others. The best jams happen when everyone contributes without stepping on each other.
- Use the chat. Say hello when you join. Suggest a key if the music needs direction. Thank people when you leave. Communication makes sessions better.
- If it sounds weird, give it a few loops. Remember, you are hearing the previous interval. After two or three intervals, your ear adjusts and things start to click.
- Experiment! NINJAM is a playground for improvisation. Try new sounds, play instruments you are learning, explore different genres. There are no wrong notes in a jam.
Troubleshooting
"I can not hear myself"
Turn up the volume slider on your local channel — this controls how loud you hear yourself in the mix. Also make sure Xmit is enabled so that others can hear you too, and that your Master Volume is up.
"Others can not hear me"
Make sure you have granted microphone permission to NinjamZap (check iOS Settings > NinjamZap > Microphone). Also verify that Xmit is turned on for your local channel.
"Audio is glitchy or crackling"
Switch to the "Safe" latency preset in Audio Routing on the Connection screen. Close other apps that might be using audio. If you are on Bluetooth, try switching to wired headphones.
"Can not connect to server"
Check your internet connection. Verify the server address is correct (including the port, e.g., ninbot.com:2049). Some servers may be temporarily offline — try a different one from the Server Browser.
"I hear echo or feedback"
Use headphones. Without them, your microphone picks up the playback and sends it back to the server. If you must use the speaker, tap the phone icon on the built-in microphone row to enable Echo Cancellation.
"The music sounds out of sync"
That is normal! In NINJAM you always hear the previous interval. This is by design. Turn on the metronome to help you stay on beat, and give it a few intervals to adjust your ear to the concept.
If you are experiencing other issues or need help, contact us at [email protected].