The whole world: .streamingsector
Documentation on .streamingsector files
Summary
Last documented update: January 80, 2025 by mana vortex
This page will tell you what .streamingsector files do and how they do it.
Wait, this is not what I want!
If you would rather edit streamingsector files, check out our World Editing guides
If you're looking for a certain streaming sector, see here or check out RedHotTools -> World Inspector
For a list of interesting locations, see here
For a (partial) list of node types and what they are, see Reference: .streamingsector node types
What are streamingSectors?
This is where the world of Cyberpunk is defined.
Other than the world environment, streaming sector files can also define
navigation
sound
collision
illumination
as there are several types.
If you create a mod with sectors, you need to create a streamingblock
Sector splitting
CDPR auto-generates these files from a much larger dataset. For that reason, cutoffs are sometimes arbitrary, and locations are scattered across multiple streamingsectors.
In addition, different LODs also have different sector files. For more information, check the expendable box under LOD (Level of Detail) Data and grid sizes
World data
Node and nodeData indices may change every time CDPR updates their game.
nodeData
This list tells the engine where to put the data from nodes.
Via the NodeIndex property, each entry points an element inside the nodes array.
One node can have multiple associated nodeData entries.
nodeData properties
You can find some info in <Cyberpunk 2077>\tools\redmod\metadata.json
The actual class name of worldNodeData is worldCompiledNodeInstanceSetupInfo
QuestPrefabRefHash
globalNodeId
should be defined in nodeRefs block
MaxStreamingDistance
secondaryRefPointDistance
streamingDistance
UkFloat1
Pivot
secondaryRefPointPosition
Bounds.Min
streamingRefPoint
Bounds.Max
not listed
Seems there's no box/bounds, but two different vectors
nodes
This list defines the assets that make up the sector — everything from the list of objects around you and their interactions, to the locations of light, sounds, and effects, to the NPCs, the minimap, and almost everything else.
Each entry is a worldNode object with a number of nodeData entries. These nodes can do wildly different things, depending on their types and properties.
For a (partial) list of node types and what they are, see Reference: .streamingsector node types
nodeRef
This list contains linked quests that are triggered via scene files. You can find more information under NodeRefs (this is not yet fully explored)
variantIndices
contains as many values as ranges are needed (at least one default range). Each range is mapped on entries in nodeData starting at index, and stops before (excludes) the index of the following range.
The default variant index is 0.
Node entries in this default range are always enabled, regardless of variant state.
Example
Only the first node (nodeData?) with the index 0 is always enabled.

If we look at variant index #7, the range starts at 14 (included) and ends at 46 (excluded).
variantNodes
variantNodes contains as many empty arrays as variants (in this case, 10).
TODO: FAFO Do they have to be empty? What if they aren't? What even goes there?
Theory
Streaming Sectors contain the world's data, holding a node tree that includes all its models and entities.
LOD (Level of Detail) Data and grid sizes
The information below used to be the only way to find sectors. However, as this has gotten much easier via RedHotTools -> World Inspector, the information below has been preserved for posterity.
The world is broken up into a grid, with several sizes of squares available (bit like graph paper with major and minor grid lines). The size of the grid in use is dependent on the Level of Detail (LOD) of the sector file your looking at, which is the last digit of the filename.
Chunk sizes are as below.
0
32
64
1
64
128
2
128
256?
For every location, there can be multiple overlapping levels of LOD sectors with progressively more detail as you go down the levels.
For instance, Lizzies bar is located at approximately -1200, 1562, 22:

Filenames are structured as sectortype_X_Y_Z.streamingsector . If you preview a sector in wkit, the axes are shown as Z=-Y and Y=Z.
Calculating the files
I've left the detail of the process below for record, but if you just want a list of sectors I've created a python script to find the ones that a set of co-ordinates are in. You can find it HERE. Simply enter the co-ordinates in the player_loc dict in block 3 then run all blocks. You'll be given 2 lists containing of all the interior and exterior sectors which contain the co-ords within their bounding boxes. The list also shows the distance from the centre of the sectors to the co-ords given.
From those co-ordinates we can calculate the sector files for interior/exterior sectors by dividing by the grid size for the LOD and rounding. (ie 1200/32=38 etc)
0
-38_49_0
-19_24_0
1
-19_24_0
-9_12_0
2
-9_12_0
-5_6_0
At the level 0 files the whole building isn't covered by 1 sector, so you end up needing 4, conversely the exterior level 2 is several city blocks.
For example, the loft apartment uses these files:
interior_-24_-16_1_1.streamingsector: inner walls, floors, collision
interior_-48_-31_2_0.streamingsector: interior decoration, clutter
Note that the numbers are simply duplicated and rounded down. &#xNAN;No, I don't know how you round down 2*16 to 31 either.
Some locations are partially defined in quest sectors, where parts of the location are locked away behind story triggers (for example half of V's apartment, as a lot of decoration will only be shown after completing quests). The exact process isn't fully understood as of May 2023.
Different sector states
A steamingsector can split its nodes into ranges called variants. A variant is used to display/enable an amount of nodes in a specific situation (like during or after a quest). All sectors and their variants need to be declared somewhere; this place is the streamingblock.
For more information on how to trigger variants, see Switching between sector states in the World Editing section.
Last updated