invite.cam — host & guest guide

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.

Contents

What is invite.cam?

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.

Two-tier model: participants vs. audience

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.

Connection states

invite.cam has two connection layers: the app lobby connection and the VDO.Ninja media connection. The app lobby connection is the WebSocket used for the roster, chat, raise-hand state, and host controls. The VDO.Ninja media connection starts only after a guest is sent into the room and joins with camera, mic, screen share, or avatar.

The roster on the right is about the app lobby and saved guest settings. The VDO.Ninja director panel is the source of truth for whether a camera or mic stream is actually publishing.

Roster stateWhat it meansWhat to do
WaitingThe guest is connected to invite.cam and is in the lobby. They can watch the preview, chat if allowed, and raise their hand. They are not on camera yet.Click their name and send them to This room (live camera/mic), or use Send waiting to room for everyone waiting.
ActivatedThe host has assigned that guest to the live room. Their page should load a VDO.Ninja iframe. They may still need to click through VDO.Ninja's join screen and allow camera/mic.Check the VDO.Ninja director panel for their actual media tile. If no media appears, have them confirm permissions, device selection, and network access.
Not ConnectedThe app has a saved user or invite entry, but that guest is not currently connected to the invite.cam lobby WebSocket. This can be normal for a previous guest, a prepared invite, or someone who disconnected.Have them reopen the current invite.cam guest link. To remove an old record, click the user and choose Delete saved entry, or use Clear offline for ordinary offline guests.

A guest can also be visible in one layer and missing from the other. For example, a person in Waiting is connected to invite.cam but not to VDO.Ninja. A person in Activated has been sent to VDO.Ninja, but their camera is not confirmed until they join there. A person in Not Connected may simply be an offline saved entry, even if their old settings are still remembered.

Saved settings and invite entries

When you configure a user or create an invite link, invite.cam saves that target so you can reuse or edit it later. Ordinary offline guest records expire after 30 days without a connection or settings update. Existing records created before this policy receive a 30-day grace period.

Reusable invite links, helpers, and blocked or muted records are kept until you delete or change them. Clear offline preserves those entries; Delete saved entry removes the selected offline entry explicitly.

What confirms a successful connection?

Host quickstart

  1. Go to app.invite.cam/signin and click sign in with Discord.
  2. You land in your own room (named after your Discord handle, e.g. app.invite.cam/yourname). The VDO.Ninja director iframe loads for you automatically — this is your live camera/mic panel.
  3. At the top, the Room link row shows the URL to share with guests. Click Copy.
  4. Optionally click Lobby Settings and paste a preview URL (see below) so guests in the lobby have something to watch while waiting.
  5. As guests arrive, they show up in the user list on the right. Click one, pick a destination, and click Save.
Tip: Your room name is permanent and tied to your Discord identity. The same link works next week. You never need to re-create it.

Sharing your room

Two ways to invite people:

The room link (casual — anyone can join the lobby)

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, unless you have explicitly enabled Testing mode in Lobby Settings.

A named invite link (for specific people or single-use)

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 single-use invite is claimed by the first authenticated guest account to use it. That same account can reconnect with the link; another account cannot claim it, even if two visitors arrive together. For anonymous guests, keep the original browser session so their guest identity is preserved.

Pulling a guest on-camera

A guest is in the lobby. You want them on camera.

  1. In the user list (right side), click their name. A settings panel opens.
  2. Change Send this user to from "The lobby" to "This room (live camera/mic)".
  3. Leave Apply on save checked.
  4. Click Save.

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.

Lobby Settings: preview, helpers, audio

Click Lobby Settings at the top of your room to configure what lobby viewers see.

Lobby embed URL

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.

Welcome message

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."

Guest 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.

Testing mode

Turn on Testing mode: send new guests straight into the room when guests need to test their VDO.Ninja camera and microphone setup without waiting for the host. It is off by default. While enabled, otherwise-unassigned new or reconnecting guests using the normal room link bypass the lobby. Individual lobby, room, and custom URL assignments still take priority.

The room link warning shows when Testing mode is on. Turning it off restores normal waiting-room behavior for future joins and reconnects; it does not interrupt guests who are already in the live room.

Guest isolation

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.

This is also enforced by the room server: changing a guest URL to a scene, solo viewer, or director URL does not grant access to other guests or director ownership. Turning isolation off intentionally allows that guest to receive other guests in the room.

Directors and authorized helpers can generate scene and solo links for OBS or other viewers. Guests are not given those viewing tokens by the app. Anyone you deliberately share a director-generated viewing link with can use it, so keep those links private. Existing saved viewing links remain valid.

New solo links, like group scene links, use a viewer-only token rather than your director/helper login. They work in OBS without sign-in but cannot grant director ownership. Anyone holding a viewer link can change its scene/source selection to view other feeds in the room. Refresh your director page before copying new links; older solo links containing account credentials are not automatically invalidated by this update.

Returning a guest to the lobby or blocking them removes their media access and tells connected peers to close their feeds, including separately opened guest media tabs. A peer that has lost its signaling connection cannot receive that removal notice until it reconnects.

Bulk activation and return-to-lobby actions preserve each guest's mute, isolation, and other saved settings. Once you save an individual guest's settings, that override survives reconnecting through a reusable invite; the invite cannot silently reactivate them. Other guests can continue using the reusable invite normally.

Anonymous helpers receive temporary access for their currently connected app sessions. Reloading or disconnecting those sessions ends that grant; the host can also revoke it immediately. Use Discord helpers when access should persist across sign-ins. A guest with multiple open tabs stays online in the roster until their last tab disconnects.

App helpers / co-directors

Add exact Discord usernames to App helpers / co-directors, one per line, keeping periods and underscores. Use the Discord username, not the app room URL name: those can differ. An optional leading @ or a full username#discriminator is also accepted. 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.

Removing a name from the helper list immediately revokes access granted by that list. If the person also has a Helper role in their individual settings or a temporary helper grant, revoke that separately to remove their remaining helper access.

Guest audio defaults

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.

What the guest sees

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.

This is the #1 source of new-host confusion: guests won't see a "join with camera" prompt until you activate them. If a guest tells you "it's not asking me for camera," the answer is that they're correctly parked in the lobby and waiting for you.

Embeddable URL formats

The lobby embed URL accepts a wide range of formats. Paste whatever is easiest — the app normalizes to an embeddable version automatically.

SourcePaste thisNotes
YouTube videohttps://www.youtube.com/watch?v=ID
https://youtu.be/ID
Auto-rewrites to /embed/, adds autoplay + mute.
YouTube live / Shorts/live/ID or /shorts/IDNormalized to embed.
YouTube playlist/playlist?list=...Becomes embed/videoseries.
Twitch channelhttps://twitch.tv/channelLive stream embed. Muted + autoplay.
Twitch VODhttps://twitch.tv/videos/NUMERIC_ID
Twitch cliphttps://clips.twitch.tv/SLUG
Kick.comhttps://kick.com/channel
Vimeohttps://vimeo.com/ID
TikTokhttps://tiktok.com/@user/video/ID
MeshCasthttps://meshcast.io/view.html?scene=...Sub-second latency (<500ms). Best option for real-time lobby.
HLS .m3u8any direct .m3u8 URLWrapped in the MeshCast player automatically.
Pasted iframea full <iframe src="..."> tagThe src is extracted and re-parsed.
Latency matters. YouTube / Twitch embeds lag 10–30 seconds behind live. For anything interactive (Q&A, audience callouts), prefer MeshCast or a direct HLS URL with low-latency output.

Chat

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.

Troubleshooting

Guests are listed under "Not Connected"

This usually means they are saved roster entries, prepared invites, or guests who disconnected from the invite.cam lobby. It does not mean their camera failed. Ask the guest to reopen the current invite.cam guest link and watch for them to move to Waiting. If they are supposed to be live, activate them and then check the VDO.Ninja director panel for the actual media stream.

Guest says "no camera/mic prompt"

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).

Guest is activated but no video appears in VDO.Ninja

At that point the issue is on the media side, not the invite.cam roster side. Have them verify browser camera/mic permissions, pick the correct device in VDO.Ninja, and run vdo.ninja/check. If the room is overloaded, host-side VDO.Ninja parameters such as &optimize=50, &codec=vp8, or &codec=h264 may help, but they should not be needed just to appear as connected in the invite.cam roster.

"Bye. You signed in somewhere else."

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.

Chat works but lobby video is blank

No Lobby embed URL is set. Open Lobby Settings and paste one (see URL formats).

Invite link sent but guest says "it doesn't work"

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 controls are missing

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.

VDO.Ninja co-director controls are missing

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.

I want to kick someone permanently

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.