Source 2 Viewer

Browse VPK archives, view, export, and decompile Source 2 assets, including maps, models, materials, textures, sounds.

Fully open-source and reverse-engineered.

Download v21.1
Screenshot of Source 2 Viewer displaying a 3D rendered map of Inferno Night with detailed lighting and textures
Inferno Night by Angel, created by decompiling with S2V

One tool for every Source 2 asset

Render, inspect, extract, and decompile files from CS2, Dota 2, Deadlock, Half-Life: Alyx, and every other Source 2 game.

Screenshot of the 3D renderer displaying a Counter-Strike 2 player model on a grid

Models & Animation

Preview any model with its animations, skeleton, and physics.

  • Animation playback with scrubbing, slow motion, root motion, and additive layers
  • Show skeletons, attachments, hitboxes, and physics shapes
  • Switch LODs, mesh groups, and material skins
  • Facial flexes, morph targets, bone constraints, and IK
  • Animation clips and skeletons from AnimGraph 2 (vnmclip, vnmskel)
Screenshot showing the VPK package explorer interface with a file tree and a list view

VPK Viewer & Extractor

Open game archives without unpacking them, and extract single files or whole folders.

  • Open VPK files from any Source 1 or Source 2 game, including VPKs inside VPKs
  • Folder tree with a detail list or a grid of rendered thumbnails
  • Search by name, path, regex, file contents, hex bytes, or asset info
  • Back and forward navigation, path bar, and quick preview
  • Export files as is or decompiled, choosing the output format per file type
  • Background extraction with progress, time estimate, and cancel
  • Recover deleted files left in VPK archives
  • Build new VPKs from folders and files, and verify signatures and checksums
  • Copy vpk: links that open a file directly in Source 2 Viewer
Screenshot of the animation graph viewer showing nodes

Node Graph Viewers

Animation graphs, Pulse scripts, and map entity I/O drawn as node graphs.

  • Animation graphs (vanmgrph, vnmgraph) with expandable state machines
  • Pulse graphs (vpulse) rebuilt from compiled bytecode
  • Entity I/O graph for maps, linked to the 3D view
  • Models and maps show their animation graphs and Pulse scripts as tabs
  • Search, filter, auto layout, and export graphs as images

3D Renderer

  • View maps, models, physics, particles, and materials from CS2, Dota 2, Deadlock, and other Source 2 games
  • Reverse-engineered game shaders with dynamic shadows, lightmaps, light probes, and cubemaps
  • GPU-driven OpenGL rendering with frustum, occlusion, and meshlet culling
  • Tiled light culling for maps with hundreds of lights
  • Bloom, depth of field, auto exposure, and color correction
  • Clutter, decals, and 3D skyboxes in maps
  • Debug render modes, overdraw view, and a performance overlay

Map Viewer

  • Click any entity to inspect its properties, inputs, and outputs
  • Walk around maps with Counter-Strike movement: collisions, ladders, bunny hopping, and surfing
  • First-person CS2 weapon viewmodel and crosshair in walk mode
  • Doors, buttons, triggers, and logic entities work as they do in the game
  • 3D positional sound with soundscapes and sound events
  • Toggle world layers and physics groups, and jump to map cameras
  • Navigation meshes, visibility clusters, and CS2 bomb damage overlays
  • WASD fly camera with orbit mode and customizable FOV

Source 2 Decompiler

  • Maps (vmap_c → vmap) for Hammer with entities, editable meshes, props, overlays, and ropes
  • Models (vmdl_c → vmdl) for ModelDoc with animations, physics, hitboxes, morphs, and cloth
  • Materials (vmat_c → vmat) with textures unpacked to their original inputs
  • Animation graphs, clips, and skeletons
  • Particles, post-processing, Panorama, choreo scenes, and closed captions
  • Sounds with reconstructed lip-sync phonemes
  • Produce editable assets for Source 2 Workshop Tools

glTF Export

  • Export maps, models, physics, animations, and navigation meshes to glTF 2.0
  • Skinned meshes, morph targets, and material skins
  • Root motion, additive animations, and morph weight animations
  • Materials converted to glTF PBR, keeping the original Source 2 parameters
  • Opens in Blender, Unity, and Unreal Engine
  • Batch export whole folders with textures as separate images

Texture Viewer

  • View textures, images, and SVGs per color channel or with all channels side by side
  • Save textures as PNG, JPG, or EXR for HDR, and export SVGs at any scale
  • Mip levels, depth slices, cubemap faces, and equirectangular projection
  • Animated sprite sheet playback with frame scrubbing
  • Normal map, YCoCg, and color space conversion toggles
  • GPU decoding with a software fallback
  • Color correction lookup tables (vpost)
  • UV tiling preview, zoom, and pan

Particles & Materials

  • Particle systems with sprites, trails, ropes, models, decals, and child systems
  • Particle lighting, scene collisions, and detail level selection
  • Operator list that flags unsupported operators
  • Particle snapshots (vsnap)
  • Live material editing with shader-defined parameter ranges
  • Preview materials on different meshes and jump to their shader

Audio

  • Built-in audio player with waveform, seeking, and looping
  • Play WAV, MP3, and Source 2 sounds (PCM, ADPCM, MP3, AAC)
  • Sound events play in the map, model, and particle viewers
  • Volume control and per-tab mute
  • Keyboard controls and auto-play in preview mode

Shader Packages

  • Browse Source 2 shader files (vcs) as a tree of static and dynamic combos
  • Inspect parameters, combos, constraints, and render state
  • Reconstruct VFX source for whole shader collections
  • Decompile Vulkan SPIR-V to readable HLSL or GLSL
  • Open raw SPIR-V files and export shader bytecode
  • Compiled shader versions 58 through 72

Source 2 Resource Files

  • Open vtex_c, vmdl_c, vmat_c, vpcf_c, and all Source 2 file types
  • View every resource block in its own tab
  • Browse external references and open them with a double-click
  • Decode binary data to readable KeyValues3 text

User Interface

  • Tabs with middle-click close, bulk close, and reload
  • Dark and light themes, or follow the system setting
  • Explorer lists VPKs, maps, shaders, and Workshop items from installed Steam games
  • Recent files and bookmarks
  • Drag and drop any file onto the window
  • Keyboard shortcuts, with hints for the active viewer
  • Register as the handler for .vpk files and vpk: links
  • Built-in updater with stable and dev channels

Additional File Formats

  • Navigation meshes (.nav) in 3D, grid navigation (.gnv), and ToolsAssetInfo (.bin) files
  • World nodes (vwnod_c) and visibility data (vvis)
  • KeyValues3 binary and text, binary KeyValues1, and DMX files
  • Closed captions, choreo scenes, and facial animation (.vfe) files
  • PNG, JPG, GIF, and SVG images
  • Hex viewer and text viewer with syntax highlighting

Libraries and command line

Use the same .NET libraries as Source 2 Viewer in your own projects, or export files from scripts with the command line tool.

Command line utility

Export and decompile Source 2 resources from the command line on Windows, Linux, and macOS.

ValveResourceFormat

.NET library that powers Source 2 Viewer (S2V), also known as VRF. This library can be used to open and extract Source 2 resource files programmatically.

ValveResourceFormat.Renderer

.NET library providing an OpenGL-based rendering engine for Source 2 assets. Standalone rendering of models, maps, particles, animations, lighting, and materials with physically-based rendering (PBR).

ValvePak

.NET library to read Valve Pak (VPK) archives. VPK files are uncompressed archives used to package game content. This library allows you to read and extract files out of these paks.

ValveKeyValue

.NET library to read and write files in Valve key value format. This library aims to be fully compatible with Valve's various implementations of KeyValues format parsing.

Screenshot of the command line interface showing DATA block for an audio file
Source2Viewer-CLI printing the data block of a sound file
C#
// Open package and read a file
using var package = new Package();
package.Read("pak01_dir.vpk");

var packageEntry = package.FindEntry("textures/debug.vtex_c");
package.ReadEntry(packageEntry, out var rawFile);

// Read file as a resource
using var ms = new MemoryStream(rawFile);
using var resource = new Resource();
resource.Read(ms);

Debug.Assert(resource.ResourceType == ResourceType.Texture);

// Get a png from the texture
var texture = (Texture)resource.DataBlock;
using var bitmap = texture.GenerateBitmap();
var png = TextureExtract.ToPngImage(bitmap);

File.WriteAllBytes("image.png", png);

Made possible by amazing people

Source 2 Viewer is open-source and built by volunteers. Every contribution helps make it better for everyone.

xPawkristikerw1tcherrrPerryvwkrotter0Angel-foxxoPoggicekMarlaminPurrspctivSinZ163lewa-jrobert-hoffdr3ftymoofMonkeymovexigdirtkiller23BogdanuqnecukLionDogemdillerH7perusyaakov-hAveYoin0finitevermadasArenovasmircokroonKashimuraBakaAnsimistMattFileriwasinminedreamNeoExperiencesdanggui1995TianQiBuTiantimkurversThomasK33r2d2rigoihatecsvDatGuy1Artemon121aoisensiKampfkarrenzndxcvbnifpCDitrisalong0900snowyukittytgrgdsttrebuchonuser8738423YuRaNnNzZZSamboyCodingSTL1tepjoeIOExceptionalgarrynewmanEgezennogniK5377aquaismissingLonswaya