Vanguard Media
signed in as …
Watch
Everything here uses your Discord login. One sign-in covers all of it.
Recordings & clipsJellyfin — by streamer, by day/week/month
Live nowevery active stream in one page, audio follows the window you click
Sign outends the Discord session for all Vanguard sites
How watching works
- Jellyfin: each streamer is a show. This week's recordings sit under weekday seasons, older ones roll into week, month and year. Nothing moves; it is only re-labelled.
- Live: windows open as people go live and close when they stop. Click a window to hear it; the speaker button pins audio on; the slider is per window.
Live page: windows, groups, names
- Layout. Until you touch it, windows arrange themselves into an even grid whenever someone goes live or stops. Drag a tab to move a window, drag the bars between windows to resize, drop a tab onto another window to stack them as tabs.
- Your layout stays yours. The moment you move, resize or rename anything, the page stops rearranging. Streams that end just close. New streams do not barge in: a chime plays and a blinking chip appears in a thin tray under the top bar. Drag the chip onto any window edge, onto a tab bar to stack it, or to the page edge; or click it to add it as a new column on the right. Arrange (top bar) places everything in an even grid and switches automatic layout back on.
- Audio. Sound follows the window you click. The speaker button pins a window's audio on even when you click elsewhere; Mute all silences everything until you click a window; Follow focus clears pins.
- Rename a stream. Double-click its tab, type a name, Enter. Escape cancels; an empty name goes back to
user · title. Names stay in your browser and come back the next time that streamer uses the same title. - Name a group. Every tab bar starts with a
+ nameslot. Double-click it, type, Enter. Group names last until you reload the page. - One window big. The ⛶ button at the right of a tab bar maximises that window; click it again to restore. Arranging (a stream joining or leaving, or the Arrange button) restores it too.
- Timecode band. Streams with the timecode band on show it cropped off automatically; recordings never contain it.
Contribute: stream
OBS docktitle → Go Live; Dump tonight; manual setup
Go Live from the browserWindows Chrome: share the game window, no OBS
OBS setup (once)
- OBS → Tools → WebSocket Server Settings → enable, set a password.
- OBS → Docks → Custom Browser Docks → add
…/dock/; log in with Discord inside the dock. - OBS → Settings → Output → encoder B-frames: 0 (NVENC "Max B-frames"). With B-frames the live page cannot play you over WebRTC and falls back to a delayed HLS view.
- Dock → Settings: OBS WebSocket password (the rest is prefilled). Optional title prefix/suffix (
{date}= today). - Dock → Timecode band → Add band + clock source while not streaming (gives editors a frame-accurate timecode).
- Per stream: type a title, Go Live. The dock mints a 12-hour token and sets your stream key itself.
Rules worth knowing
- Everything streamed is recorded and visible to editors and members. Dump tonight throws a night away (3-day undo by an admin).
- Titles: letters, digits,
_ . -; no double underscore; the dock shows the final name as you type. - Browser Go Live needs Windows + Chrome/Edge 141+ for window audio and the GPU encoder; on Linux use OBS.
Contribute: your game clips
Anyone in the server. Pair your gaming PC once; after that your clips upload themselves and appear in Jellyfin under your name.
Three steps
- Install Syncthing on the PC your clips save to (Windows: Syncthing Tray works well). Open it → Actions → Show ID.
- Paste that Device ID on the clips page and press Connect.
- Back in your Syncthing: accept the new device Vanguard, then accept the folder it offers, point it at your clip directory (ShadowPlay / Medal / Steam), Folder Type Send Only.
- Only video files are pulled; your folder layout is mirrored; odd formats are converted on the server and one copy is kept per clip.
- Nothing is ever written back to your PC.
Edit
Browse & downloadcopyparty — scrub in the browser, download originals, zip folders
Upload finalsthe only folder editors can write to
Multicam & timecode
- Every stream file has a timecode track (time of day, Eastern) and a
.jsonsidecar with the exact capture time, source (strip= frame-accurate from the overscan band,arrival= coarse), drift and gaps. - Multicam: sync by timecode, cross-check with voice audio. Export at the game resolution (2560×1440 / 1920×1080) — that drops the thin band at the bottom.
- Files are H.264 MP4, constant frame rate, index up front. Streams are published a few minutes after they end.
- No WebDAV (Discord-only login). Select files/folders and use copyparty's zip/tar download.
Media admin
Trashdumped nights, purged after 3 days
Syncthingdevice pairing, folder states
Who am Iidentity headers as the apps see them
Admin notes
- Group changes in Authentik apply on the next login: sign out and back in.
- Dump anyone's night: the dock's Dump works on your own; for others use the API with
{"user":"name"}or ask the owner. - New gamer: they self-serve on the clips page; you only need to watch Syncthing accept the device.
Code
Notes
- SSH remotes use port 2222:
ssh://git@…:2222/org/repo.git. Add your key under Settings → SSH keys. - The stack's own repo is
techy/Media-Server-Setup.
Bot
Administration
You are in admins or authentik Admins.
Authentik adminusers, groups, Discord source, policies
Jellyfin dashboardlibraries, plugin, scheduled tasks
Gitea site adminauth sources, runners
Where things live
- Server:
~/vanguard-streamon the box;STATUS.md= what runs / who does what / what's unfinished;README.md= how. - Change hostnames, bot token:
./configure.py. Plugin updates:./installJellyfinPlugin.sh. Portal:./deployLive.sh(dev box). - Streamers = Authentik group
streamers; editors =editors; everything follows Discord roles via the roles policy.