

A BepInEx plugin for PEAK that lets a player spawn into every match as a permanent ghost, never alive, never revived, so they can spectate, switch between live players, and talk on voice chat exactly like a vanilla ghost.
Primary repository: This project is developed at forgejo.bryantserver.com/SisyphusMD/GhostSpectator. The GitHub copy is a read-only mirror.
PEAK already has a ghost mechanic: when a player dies, they become a camera that follows live teammates and can talk on voice. This mod makes that state the starting state for one player, so you can join the lobby as a permanent ghost spectator and follow your teammates' climb.
PEAK gates the vanilla ghost camera, voice handler, and player-ghost spawning on a single boolean: CharacterData.fullyPassedOut. GhostSpectator sets that flag (and dead) on the local player's Character.Start when the run starts, i.e., only on the island scene, not in the airport lobby. This way the spectator is alive in the airport (can walk around, socialize, watch you press the kiosk) and becomes a ghost the moment the run begins. To keep the spectator from breaking other players' revive economy, the mod also filters the local spectator out of every revive-candidate pool the game builds (Scout Effigy, Ancient Statue, Respawn Chest) and adjusts per-player item spawns, fog/lava pacing, and the end-of-run UI to ignore spectator presence.
Beyond the single-player ghost mechanic, GhostSpectator raises PEAK's room cap from 4 to 4 live + 16 spectator (20 total), gates mid-run joiners through a [Play] vs [Spectate] popup, and locks each player's role for the duration of a run.
PEAK mods are distributed through Thunderstore, a community-hosted mod registry for Unity games. There are two common ways to install: through a graphical mod manager (recommended, handles dependencies and updates) or by dropping files into the game's BepInEx folder manually.
BepInExPack_PEAK automatically as a dependency.PEAK.exe). On a default Steam install this is at:
C:\Program Files (x86)\Steam\steamapps\common\PEAK\~/.local/share/Steam/steamapps/common/PEAK/plugins/SisyphusMD.GhostSpectator.dll into <PEAK>/BepInEx/plugins/.<PEAK>/BepInEx/config/SisyphusMD.GhostSpectator.cfg.In the airport lobby, click the power button in the top-left Ghost Spectator panel to toggle. The button is gray when OFF (the default) and green when ON. The setting persists across launches.
The panel shows two sections: LIVE n/4 with one row per live-climber slot (empty slots show as "(open)"), and SPECTATORS n/16 with the current spectators. Each spectator row has a ghost icon tinted by that player's chosen skin color.
When ON, you'll stay alive in the airport (walk around, socialize, watch the host press the kiosk) and transition to the ghost camera the moment the run starts on the island. Standard ghost-camera controls apply (hotbar 1/2 to switch between live players, scroll to zoom). Voice chat works normally.
Click the button again to toggle back to OFF and play normally.
The button is the only intended interface for changing your spectator status, toggling it broadcasts your new status to the rest of your lobby. Don't edit
<PEAK>/BepInEx/config/SisyphusMD.GhostSpectator.cfgdirectly; changes made there won't be communicated to other players until the next time you join a room.
When a friend invites you to a lobby that's already on the island, you'll see a centered [Play] vs [Spectate] popup over the loading screen. Pick one, and you'll spawn into the run in that role. If you pick Play, you join as a vanilla mid-run ghost (revivable at the next statue / chest, per PEAK's normal mid-run join behavior). If you pick Spectate, you spawn as a permanent ghost spectator.
Once you've made the choice, your role is locked for the rest of that run. If you leave the room and rejoin (intentional disconnect, wifi blip, etc.), the popup won't show again -- you'll auto-rejoin in the same role. To switch roles, wait for the host to start a new run from the airport.
If the host has GhostSpectator installed, every other player must too. When the host clicks the kiosk, the run refuses to start if any player in the lobby is missing the mod (with a banner naming them). Mid-run joiners without the mod are kicked immediately. This is what makes the per-player spectator/live distinction reliable across the whole lobby.
Suggest having everyone subscribe to the mod once via Thunderstore so the group's runs always work.
Validated against PEAK build 23203792 as of 2026-05-19 (GhostSpectator 0.2.0).
Each release is validated against a specific PEAK build before publishing (see CHANGELOG.md for per-version history). When PEAK updates, an older GhostSpectator may continue to work or may break on specific patch targets; if you hit issues after a PEAK update, check whether a newer GhostSpectator release is out.
Found a bug or have a feature request? Email [email protected]. Include your PEAK build, GhostSpectator version, and the relevant <PEAK>/BepInEx/LogOutput.log output. Multiplayer issues are easier to debug if you can also provide logs from the host.
This is a hobby project, not commercially supported. Best-effort response times.
If GhostSpectator makes your runs better and you'd like to chip in: buymeacoffee.com/sisyphusmd. Donations are entirely optional and don't change anything about the mod -- everything's free and AGPL-3.0.
fullyPassedOut.GNU AGPL-3.0, see LICENSE.
Building from source or running a local release? See DEVELOPING.md.