A hosted lobby and guest portal built on VDO.Ninja. Peer-to-peer video chat for a handful of participants, plus a CDN-backed lobby for the audience that wants to watch without being on camera.
invite.cam is a front-end for VDO.Ninja that adds tools for running events, shows, and interviews where not everyone needs to be on camera at once. Hosts get a permanent room under their Discord name, a lobby where viewers can watch and chat, and a control panel for pulling guests live.
Everyone who opens your room lands in one of two places:
You (the host) decide who crosses from one to the other. A guest in the lobby can click Raise hand or let you know in chat; you pull them in when ready, and send them back to the lobby when done.
app.invite.cam/yourname). The VDO.Ninja director iframe loads for you automatically — this is your live camera/mic panel.Two ways to invite people:
Copy the link from the Room link row at the top of your room. Post it anywhere. Anyone who opens it lands in the lobby, where they can watch the preview and chat. They won't go on camera unless you activate them.
Click + Create invite link. Give it a label (e.g. "Panelist — Alice"). Pick where they should go when they click the link:
Click Save. The invite link appears in the dialog. Uncheck "Anyone with this link can use it" if you want a single-use link (first person to use it claims it).
A guest is in the lobby. You want them on camera.
On their end, the lobby iframe swaps to VDO.Ninja. They get the standard room-join screen — they pick camera, mic, or an avatar/photo placeholder and click to join. They appear in your director panel.
If the guest should use a specific filler image, paste an HTTPS image URL into Avatar/photo URL before saving. The guest still joins through VDO.Ninja, but that image is preloaded as their avatar source.
To send them back to the lobby: open their settings again, pick "The lobby", Save. Their mic/camera stream is released on the VDO.Ninja side, and they're back to watching.
Click Lobby Settings at the top of your room to configure what lobby viewers see.
Any embeddable HTTPS URL. The lobby iframe loads this for every non-activated visitor. See supported formats. Leave blank and the lobby is chat-only.
After you click Save, the button changes to Saved. If you reopen Lobby Settings, the same URL and welcome message should still be filled in.
A short text that appears in the chat as a system notice when a guest joins. Good for things like "Starting at 7pm ET — drop your questions in chat."
By default, lobby guests can type in the shared chat. Turn Allow guests to send lobby chat off for read-only audience lobbies. Host messages still appear and are styled larger.
Keep activated guests from seeing each other is recommended for larger rooms. Activated guests can still publish to the director, but their VDO.Ninja view only subscribes to directors instead of every other guest.
Add Discord usernames to App helpers / co-directors, one per line. Helpers must sign in with Discord. They get the app.invite sidebar, can move guests between the lobby and room, and can add guests to scenes through the director iframe. Only the room owner can change Lobby Settings.
Guests join muted by default adds VDO.Ninja's muted-on-join flag to activated guest links. Only host/helpers can unmute guests uses VDO.Ninja's director-unmute-only link option. Guest mic processing can request VDO's compressor or limiter; the default leaves VDO/browser processing alone.
Guests opening your room link go through app.invite.cam/guest, enter a display name, and land in the lobby. They see:
When a guest raises their hand, the host sees a [HAND] marker next to that guest in the user list. The marker clears when they lower their hand, leave, or get activated.
The lobby embed URL accepts a wide range of formats. Paste whatever is easiest — the app normalizes to an embeddable version automatically.
| Source | Paste this | Notes |
|---|---|---|
| YouTube video | https://www.youtube.com/watch?v=IDhttps://youtu.be/ID | Auto-rewrites to /embed/, adds autoplay + mute. |
| YouTube live / Shorts | /live/ID or /shorts/ID | Normalized to embed. |
| YouTube playlist | /playlist?list=... | Becomes embed/videoseries. |
| Twitch channel | https://twitch.tv/channel | Live stream embed. Muted + autoplay. |
| Twitch VOD | https://twitch.tv/videos/NUMERIC_ID | |
| Twitch clip | https://clips.twitch.tv/SLUG | |
| Kick.com | https://kick.com/channel | |
| Vimeo | https://vimeo.com/ID | |
| TikTok | https://tiktok.com/@user/video/ID | |
| MeshCast | https://meshcast.io/view.html?scene=... | Sub-second latency (<500ms). Best option for real-time lobby. |
| HLS .m3u8 | any direct .m3u8 URL | Wrapped in the MeshCast player automatically. |
| Pasted iframe | a full <iframe src="..."> tag | The src is extracted and re-parsed. |
Everyone in the lobby shares one chat unless the host turns guest chat off. Participants in the room also see the lobby chat. Host and helper messages are highlighted and larger.
Expected — they're in the lobby. Activate them (see above). If they're already activated and still don't see a prompt, have them check browser permissions (the iframe is allowed camera + mic; the block is likely at the browser or OS level).
You opened invite.cam in a second tab or device. Only one session per user is allowed to prevent split-brain state. Reopen in the tab you want to keep.
No Lobby embed URL is set. Open Lobby Settings and paste one (see URL formats).
Check: is the invite single-use? If "Anyone with this link can use it" was unchecked, the first person to open it claims it — subsequent visitors will bounce. Create a new one, or re-open its settings and check that box.
Admin mode only activates when the room name matches your Discord username. If you signed in but landed on someone else's room URL (via ?room=), you'll be a guest there, not the host.
Use the app.invite helper list in Lobby Settings, then have helpers sign in with Discord and open the app.invite room link. VDO.Ninja's own generated co-director invite may not include the app.invite room wiring, which can make it land in the wrong/default room.
Use Block this guest from joining in the user's settings panel. This works best for Discord-authenticated users. Anonymous guests can change names, so use named Discord invites if you need stronger identity.