Peak4KScreenshot
One-key 4K screenshots for PEAK. Re-renders the view at true 4K via URP offscreen rendering. Optionally keeps the HUD and boosts quality.Peak4KScreenshot — One-Key 4K Screenshots for PEAK
A BepInEx mod for PEAK. Press F4 to re-render the current view at 4K resolution and save it as a PNG.
The frame is not stretched or upscaled — the main camera is actually rendered again at 4K, so distant terrain, character silhouettes and other fine geometry are genuine 4K pixels instead of interpolated blur.
Features
- True 4K re-render — uses the URP offscreen rendering pipeline
(
SubmitRenderRequest+SingleCameraRequest) to render the main camera at 3840×2160 - Multiple resolutions —
UHD_4K(3840×2160),QHD_2K(2560×1440),DCI_4K(4096×2160),UHD_8K(7680×4320),Native(current game resolution) - Supersampling — render at 1–3× the target resolution and downscale for cleaner edges
- Optional HUD in the shot — keep the health bar, crosshair, item bar and name tags visible, or hide them for a clean capture
- Boost quality for the capture — optionally raise every graphics setting (shadows, textures, world detail, render scale, ambient occlusion) to maximum for the instant of the screenshot, then restore your original settings automatically
- No stutter — PNG encoding and file writing happen on a background thread
- On-screen feedback — progress and result shown in the lower-left corner
- Localized — follows the game language (English / Simplified & Traditional Chinese)
On-screen notifications are rendered with TextMeshPro using PEAK's own font, so Chinese text displays correctly instead of appearing as empty boxes.
Installation
- Install BepInEx
- Copy the whole
F4一键4k截图folder intoBepInEx/plugins/ - Start the game
Folder layout:
BepInEx/plugins/F4一键4k截图/
├── manifest.json
├── README.md
├── README.zh-CN.md
├── CHANGELOG.md
├── icon.png
└── plugins/
└── Peak4KScreenshot.dll ← the mod itself
Usage
Press F4 in game. By default captures are written to a Screenshots folder next to the
game executable:
PEAK/Screenshots/PEAK-4K-2026-11-07-14-32-08.png
Configuration
Config file: BepInEx/config/peak4k.screenshot.cfg
| Setting | Description | Default |
|---|---|---|
Resolution |
Capture resolution preset | UHD_4K (3840×2160) |
Hotkey |
Capture hotkey | F4 |
HideHud |
Hide the HUD while capturing | true |
SuperSample |
Supersampling factor (1–3) | 1 |
OutputFolder |
Output folder (relative to the game root, or an absolute path) | Screenshots |
ShowNotification |
Show an on-screen notification | true |
OpenFolderAfterSave |
Open the output folder after saving | false |
OrientationFix |
Orientation correction | None |
UiScaleMode |
UI scaling used when keeping the HUD | Auto |
BoostQuality |
Temporarily raise all graphics settings to maximum while capturing | false |
OpenFolderKey |
Hotkey that opens the screenshots folder | F12 |
All settings can be changed by editing the config file — no recompilation needed. Restart the game for them to take effect.
Supersampling (SuperSample)
Offscreen rendering happens at the target resolution, so SuperSample = 1 is already native
4K — it is not an upscale.
1(recommended) — render directly at the target resolution2— render at 2× and downscale with a box filter; cleaner edges, but slower and heavier on VRAM3— render at 3× and downscale; highest quality, most expensive
Keeping the HUD (HideHud = false)
Set this to false to keep the interface in the capture (health bar, crosshair, item bar,
player names, …).
PEAK's HUD canvases use Screen Space - Overlay, and URP does not draw Overlay UI into a
render texture when rendering offscreen (resolveToScreen is false). The mod therefore
temporarily switches those canvases to Screen Space - Camera bound to the main camera, so
they are rendered into the 4K texture, and restores them right afterwards.
The UI is not rescaled during this — PEAK's HUD uses a relative layout, so its proportions
already match the screen once the canvas is resized to the 4K viewport. If an element still
looks off, try UiScaleMode:
| Value | Effect |
|---|---|
Auto |
Leave the canvas scaling untouched (default) |
MatchScreen |
Scale the UI by render width / screen width (for fixed-pixel layouts) |
Boost quality (BoostQuality)
Set this to true and every graphics setting is raised to its highest level for the
instant of the capture, then restored to your original values right afterwards:
| Setting | Raised to | Effect |
|---|---|---|
| Shadow Distance | High | Shadow distance 200 with 2 cascades |
| Texture Quality | Native | No mipmap downscaling |
| World Quality | High | LOD bias 1.0 |
| Render Scale | Native | 100% render scale, linear filtering |
| Ambient Occlusion | On | HBAO enabled |
The values are changed through PEAK's own settings objects, so the result is identical to picking the highest option in the game's Graphics menu. Your settings are restored immediately after the capture — the game menu shows them unchanged again, and nothing is written to your save data.
Because the shadow atlas has to be rebuilt and textures re-uploaded, the capture takes noticeably longer and the GPU load spikes while it runs. The option is off by default.
Opening the screenshots folder
Press F12 (configurable via OpenFolderKey) to open the folder the screenshots are saved
to — handy right after a capture. The folder is created if it does not exist yet.
Orientation correction (OrientationFix)
If a capture comes out upside down or mirrored, change this setting — no recompilation needed, just restart the game.
| Value | Effect |
|---|---|
None |
No correction. Default, and correct as-is |
FlipVertical |
Flip top/bottom |
FlipHorizontal |
Mirror left/right |
Rotate180 |
Rotate 180 degrees |
Note: Unity's
EncodeToPNGalready converts the texture's row order (bottom-left origin) into PNG's row order (top-left origin), so the pixel buffer must not be flipped again manually — doing so would turn the image upside down.Noneis based on that behaviour.
Resolution presets
| Preset | Size | Notes |
|---|---|---|
UHD_4K |
3840×2160 | Standard 4K, 16:9 |
QHD_2K |
2560×1440 | 2K QHD |
DCI_4K |
4096×2160 | DCI 4K, cinematic |
UHD_8K |
7680×4320 | 8K — watch your VRAM |
Native |
Current game resolution | No upscaling at all |
Hotkey conflicts
F4 is already used by several other mods. If several actions fire at once, the result depends on load order:
| Mod | Setting | Purpose |
|---|---|---|
摄像机 (PeakSpectatorMode) |
Reset Near Self |
Reset the free camera to the local player |
sword末日 (TFAStatusTracker) |
ToggleHudKey |
Toggle the HUD |
waffl.AfflictionConfig |
Player Target Menu |
Player target menu |
BetterModVerifier |
RebuildWhitelistKey |
Rebuild the whitelist |
PeakWorkshop |
— | — |
Important —
摄像机(PeakSpectatorMode) in particular. ItsReset Near Selfkey defaults to F4, the same key this mod uses. When both are installed, pressing F4 triggers both: the free camera is yanked back to the local character (characterResetPosition - forward * 2.4 + up * 1.2) at the same time as the capture starts. The capture then ends up framed on the character instead of the scene you were looking at.Rebind the other mod so the two no longer share a key — for example set its
Reset Near SelftoF11, which is free in a default PEAK installation:# BepInEx/config/com.AiAe.peakspectatormode.cfg Reset Near Self 重置到自己附近 = F11Note that this key only has an effect while the free camera (F3) is active.
If F4 behaves oddly or triggers multiple actions, change this mod's Hotkey (F5, F7 or
F9 work well — note that F6 and F9 are used by PEAK RANKED as well).
To rebind this mod, edit BepInEx/config/peak4k.screenshot.cfg:
[Capture]
Hotkey = F7
Restart the game for either change to take effect.
Edit BepInEx/config/peak4k.screenshot.cfg:
[Capture]
Hotkey = F7
Restart the game for it to take effect.
Compatibility
- Purely local rendering — no network data is sent, zero impact on other players online
- Does not modify the game assemblies; a plain BepInEx plugin
- Requires the URP offscreen rendering API (Unity 6 / URP 17), satisfied by PEAK v2.6+
How it works
- Determine the target resolution and supersampling factor
- If
HideHud = true, temporarily disable the HUD canvases — the same approach the game itself uses for its own screenshots (onlyenabledis touched, never the layout) - If
HideHud = false, temporarily switch Overlay canvases to Screen Space - Camera bound to the main camera, then wait a few frames so Unity rebuilds their meshes - Submit an offscreen render request and wait until the pipeline reports it as finished
(
SubmitRenderRequestis asynchronous — reading the pixels immediately would return garbage) - Read the pixels back, encode with
EncodeToPNG(which already flips vertically, so the buffer must not be flipped again) and write the file on a background thread - Restore every canvas to its original state
Building from source
Requires the .NET 8.0 SDK; the target framework is net472 (matching BepInEx 5).
Source location: PEAK/workbuddy/_tools/4k/src/
cd workbuddy/_tools/4k/src
bash build.sh # build + copy into the plugins folder
build.shexplicitly restoresLOCALAPPDATA/ProgramFilesand friends, which the sandboxed Git Bash strips — NuGet needs them during restore, otherwise it fails withValue cannot be null. (Parameter 'path1').
