Skip to content

Scratchhhh/vtfedit-mac

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VTFEdit for Mac

VTFEdit for Mac

Open, preview, convert and create Valve Texture Format (.vtf) textures — natively on macOS.

Platform Swift Apple Silicon License Dependencies


.vtf is the texture format used by Valve's Source engine — CS:GO / CS2 skins, TF2, Garry's Mod, L4D and friends. Every decent VTF tool is Windows-only, so Mac users get stuck booting a VM or fighting Wine just to look at a texture.

VTFEdit for Mac fixes that. Drag your textures in and see them instantly. Export to PNG, TGA, TIFF or JPEG — one file or a whole folder at a time — or go the other way and turn any image into a game-ready .vtf with DXT compression and mipmaps. No Wine, no VM, no command line required.

VTFEdit for Mac screenshot

✨ Features

  • 🖼️ Instant preview — open a .vtf and see the texture immediately, with a transparency checkerboard so alpha is obvious.
  • 🔁 Both directions — decode .vtf → image, and encode any image → .vtf with DXT1/DXT5 compression, uncompressed output and automatic mipmaps.
  • 🎞️ Frames & cubemaps — step through animated frames and cubemap faces, and export them all at once.
  • 🧱 VMT materials — open a .vmt, read its fields, and preview the $basetexture it points to.
  • 🔍 Zoom & pan — pinch on the trackpad or use the on-screen controls ( / + / Fit / 1:1) to inspect every pixel.
  • 📦 Batch export — drop in a whole folder and convert everything in one click.
  • 🎨 Multiple output formats — PNG, TGA, TIFF and JPEG.
  • 🧩 Broad format coverage — DXT1/3/5 plus all the common uncompressed layouts, across VTF versions 7.1 → 7.6.
  • 🪶 Zero dependencies — a pure-Swift VTF codec. No VTFLib, no DevIL, no native libraries to install.
  • 🍎 Truly native — SwiftUI app, universal on Apple Silicon and Intel, tiny footprint.

📥 Install

One command — no Xcode required

curl -fsSL https://raw.githubusercontent.com/Scratchhhh/vtfedit-mac/main/install.sh | bash

Downloads the latest release, installs VTFEdit.app into your Applications folder, clears the Gatekeeper quarantine, and launches it. Requires macOS 13 Ventura or newer (Apple Silicon & Intel).

Manual download

Grab VTFEdit-macOS.zip from the latest release, unzip it, and drag VTFEdit.app to Applications. On first launch, right-click the app → Open (the build is ad-hoc signed, not notarized).

Build from source

Requires Xcode 15+ (or the Command Line Tools) on macOS 13+.

git clone https://github.com/Scratchhhh/vtfedit-mac.git
cd vtfedit-mac
./scripts/build_app.sh
open dist/VTFEdit.app

🕹️ Usage

Action How
Open file(s) Toolbar Open Files, ⌘O, or drag files onto the window
Open a folder Toolbar Open Folder, ⇧⌘O (scans recursively)
Pick output format Format menu in the toolbar — PNG / TGA / TIFF / JPEG
Export a texture Select it → Export…, or right-click → Export
Export everything Toolbar Export All → pick a destination folder
Convert image → VTF Open a .png/.jpg/… → choose DXT5 / DXT1 / uncompressed + mipmaps → Export VTF…
Browse frames/faces Use the Frame / Face controls over the preview; Export All writes every one
Zoom Pinch on the trackpad, or the / + / Fit / 1:1 controls

.vtf, .vmt and image files (.png .jpg .tiff .bmp .gif) are all accepted, and exports keep the original base name.

🧬 Supported formats

Read.vtf (versions 7.1 – 7.6, including the 7.3+ resource directory) and .vmt materials:

Compressed Uncompressed
DXT1 RGBA8888 · ABGR8888 · ARGB8888
DXT1 (1-bit alpha) BGRA8888 · BGRX8888
DXT3 RGB888 · BGR888
DXT5 RGB565 · BGR565
I8 · IA88 · A8 · P8
UV88 · BGRA4444 · BGRA5551 · BGRX5551
RGBA16161616 / RGBA16161616F (HDR)

Write to image — PNG · TGA · TIFF · JPEG. Write to VTF — DXT1 · DXT5 · BGRA8888 · RGBA8888, with a generated mipmap chain and low-res thumbnail.

🛠️ How it works

VTFEdit for Mac is split into two pieces:

  • VTFKit — a dependency-free Swift codec. It parses the VTF header, walks the mipmap/frame/face layout and decodes the pixel data (hand-rolled BC1/BC2/BC3 block decompression) into RGBA8; encodes RGBA8 back into VTF (BC1/BC3 compression, mipmaps, thumbnail); writes PNG/TGA/TIFF/JPEG; and parses .vmt materials.
  • VTFEditMac — the SwiftUI front-end: file management, preview, zoom, frame/face navigation and export.

Because VTFKit has no platform UI dependencies, it's also reusable on its own.

import VTFKit

// Decode a texture to an image
let vtf = try VTFFile(data: Data(contentsOf: url))
let image = try vtf.decode()
try image.write(to: pngURL, as: .png)

// Encode an image back into a VTF
let data = try VTFEncoder.encode(image, options: .init(format: .dxt5, generateMipmaps: true))
try data.write(to: vtfURL)

🧑‍💻 Development

swift build      # build the library + app
swift run        # run the app from the terminal
swift test       # run the VTFKit decoder tests

The test suite validates the parser and each decoder against synthetic fixtures; drop a real .vtf into Samples/ and the integration test will exercise the full pipeline on it.

🤝 Contributing

Issues and pull requests are welcome. If you hit a .vtf that fails to open, attach the file (or its header) to an issue — odd formats are exactly what makes a decoder better.

📄 License

Released under the MIT License.

Valve Texture Format and the Source engine are trademarks of Valve Corporation. This project is an independent, unaffiliated tool for working with the format.

About

Open, convert and create Valve Texture Format (.vtf) textures on macOS — VTF↔PNG/TGA/TIFF/JPEG, DXT compression, mipmaps, VMT preview. Native, free, no Wine/VM.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors