Immersive First Person adds a first-person body view, FreeLook, and adjustable height for V in Cyberpunk 2077.
Body correction applies while looking down with empty hands. FreeLook also works with a weapon equipped. Both yield to vehicles, workspots, scripted cameras, and forced animations. Height stays active during combat, ADS, scanner use, dialogue, and swimming; it returns to normal for vehicles, workspots, traversal, takedowns, body carrying, knockdowns, and camera-controlled scenes. FOV stays unchanged.
Supports Cyberpunk 2077 2.5. After an unsupported game update, remove archive\pc\mod\ImmersiveFirstPersonHeight.archive or its ITP compatibility replacement until a compatible mod build is available.
- Install Cyber Engine Tweaks, RED4ext, and redscript.
- Install Immersive First Person into the Cyberpunk 2077 directory containing the
binfolder.
Mods replacing player_base.animgraph conflict with height support. IFP disables height adjustment if compatibility checks fail; the other features remain available.
For Immersive Third Person, also extract Immersive First Person - ITP Compatibility.zip into the game directory and remove archive\pc\mod\ImmersiveFirstPersonHeight.archive. Keep the compatibility archive's 0_ filename prefix. Repeat this after updating the main package. The compatibility package requires ITP.
In CET's Bindings tab, bind FreeLook under Inputs and Toggle Enabled under Hotkeys.
Height adjustment changes leg proportions rather than scaling the whole body. Extreme settings can cause clipping and animation distortion.
CET mods access the API through GetMod("ImmersiveFirstPerson").api:
local ifp = GetMod("ImmersiveFirstPerson")
if ifp and ifp.api and ifp.api.SetHeightOffset then
local ok, reason = ifp.api.SetHeightOffset("MyMod", 5.5)
endDisable(modName)suspends the whole mod for that caller.Enable(modName)releases only that caller's suspension. Names are optional for legacy callers, which share one unnamed suspension; provide a stable name to keep callers separate. Neither call changes the user's Enabled switch. Both returntrueorfalse, reasonfor an invalid name. Suspensions clear on session end or CET reload.IsEnabled()reports whether the user's switch is on and no mod is suspending IFP. The CET overlay lists blocking mods.GetCameraState()returns camera mode, ownership, and body/FreeLook diagnostics. Fields are defined in CameraCore.lua.StartNativeCameraCapture()suspends camera corrections and starts diagnostic transform sampling. Close CET and sweep the view up-down-up while stationary. The sampler writes its samples automatically when complete.CancelNativeCameraCapture()stops sampling and discards the active capture.SetHeightOffset(modName, centimeters)replaces that name's contribution. Offsets add to the user's height within their allowed range; zero removes one. Changes blend like the height slider.SetHeightEnabled(modName, false)suspends height adjustment. Passingtruereleases only that name's suspension; the user's switch and other suspensions still apply.GetHeightState()returnsavailable,pending,enabled,targetCentimeters,effectiveCentimeters,suppressedBy, andcontributions(modName,centimeters).
Height setters return true or false, reason. Requests require height support and the user's permission; they cannot enable GigaV or overwrite saved height. Clearing offsets and releasing suspensions remain allowed without permission or support. Requests need no refresh calls and clear on session end, CET reload, or permission revocation.
Requires Visual Studio C++ tools, RED4ext.SDK at the release workflow's pinned revision, and CMake, LuaJIT, and Lua Language Server on PATH. To validate, build, and deploy with the game closed:
$gameRoot = 'C:\path\to\Cyberpunk 2077'
$sdkRoot = 'C:\path\to\RED4ext.SDK'
$cmake = (Get-Command cmake.exe).Source
scripts\deploy.ps1 -GameRoot $gameRoot -CMake $cmake -Red4extSdkPath $sdkRootArchive generation requires WolvenKit CLI. Packaging runs in Git Bash.
This project contains files that are parts of MIT licensed project cp2077-cet-kit.
See full license details here.