VPKEdit

A CLI/GUI tool to create, read, and write several pack file formats.

MIT License

Stars
199
VPKEdit - v4.2.3 Latest Release

Published by craftablescience 3 months ago

[!TIP]
Read the install guide for assistance installing VPKEdit.

[!WARNING]
As of v4.2.2, VPKEdit relies on a more recent version of the Visual C++ Redistributables. If you experience a crash when VPKEdit worked before the update, the installer is located here: https://aka.ms/vs/17/release/vc_redist.x64.exe

General Changes

  • Fix loading/saving Left 4 Dead 2, Contagion BSPs
  • Use an actual keyvalues parser when signing VPKs to parse private key VDF files more reliably
  • Fix multiple VPKEdit CLI/GUI instances saving a BMZ/BSP/ZIP at the same time (would previously create conflicts)
  • Fix PAK writer appending _test.pak to the save filename (oops)
  • Fix PAK writer not writing directories of added files properly

GUI Changes

  • Add option to disable creating Open In... menu at startup (prevents scanning user's Steam library)
  • Populate Open In... menu in a separate thread to improve startup performance
  • Fix regression from last release where compressed image formats would disable alpha checkbox in VTF preview despite having transparency
  • Highlight KeyValues conditionals that start with a ! in KeyValues preview
  • Show milliseconds in sound preview
  • Fix Strata Source build crashes by removing all instances of QString::toStdString

CLI Changes

  • Allow any pack file format where appropriate, not just VPKs
  • Add -e, --extract parameter to extract files from pack file
  • Add --add-file parameter to add a file at the given path in the pack file
  • Add --remove-file parameter to remove a file at the given path in the pack file

For Developers

  • The libvpkedit library has been migrated to the sourcepp repository, and it has been renamed to vpkpp. This repository is now solely for the VPKEdit executables, and any submodules of it should be changed to point to the sourcepp repository.
  • Remove SAPP, SpeedyKeyV GUI dependencies in favor of sourcepp libraries
VPKEdit - v4.2.2

Published by craftablescience 5 months ago

[!TIP]
Read the install guide for assistance installing VPKEdit.

GUI Changes

  • Fix crashes when Steam installation is in a semi-invalid state
  • Detect Steam installation when installed through the Snap Store
  • Display CRC32 values in base-16 instead of base-10
  • Add texture size indicator to VTF preview
  • Switch to a different library for parsing VTFs with a more permissive license (no more vtflib!)
VPKEdit - v4.2.1

Published by craftablescience 5 months ago

[!TIP]
Read the install guide for assistance installing VPKEdit.

GUI Changes

  • Add mods in sourcemods folder to "Open In" menu
  • Games/mods with no icon will now have a placeholder icon in "Open In" menu
  • Add "Lay Flat" checkbox in VTF preview to preview all faces and frames at once
  • Split checksum verifier tool into checksum verifier and signature verifier tools
  • Add Zombie Panic: Source text formats to KeyValues preview
  • Stop referencing a VPK specifically in save failure dialog
  • On Linux, each pack file format is now given its own MIME type (thanks @HurricanePootis!)
  • Add fun April Fools prank

CLI Changes

  • Add Verify mode to verify integrity of a VPK
    • --verify-checksums - Verifies VPK checksums. Takes one argument, either files, vpk, or all
    • --verify-signature - Verifies the VPK signature if present
  • Add Preview mode to print VPK file tree
    • --file-tree - Prints the VPK file tree to console

Installer Changes

  • Add missing file associations for .grp and .pak on Windows
  • For Linux:
    • List libxcb-cursor0 as an explicit dependency
    • Use zstd compression over gzip compression

For Developers

  • PackFile::verifyEntryChecksums and PackFile::verifyFileChecksum have been joined by 4 other functions. One is for signatures, and the other 3 return whether the file has that type of checksum or a signature
VPKEdit - v4.2.0

Published by craftablescience 6 months ago

[!TIP]
Read the install guide for assistance installing VPKEdit.

4.2 Highlights

  • Drag and drop from inside application to filesystem
  • Select multiple files and/or folders
  • Model skin preview and material listing
  • VPK signing

General Changes

  • Add capability to sign VPK v2 files and verify their signature
  • Fix incorrect calculation of VPK v2 "whole file checksum"

GUI Changes

  • Add drag and drop from inside application to filesystem
  • Allow selecting multiple files and/or folders to extract or delete them all at once
    • Also works with drag and drop
  • Add model skin preview (based on the work on sourcepp by @Trico-Everfire, thanks!)
  • Add information panel to display materials used by a model
    • If a material is found in the current pack file, it can be clicked to instantly preview it
  • Add DMX binary file preview
    • This primarily means being able to browse particle definitions (.pcf)
  • Add context menu to image preview and VTF preview
    • It has one action currently, "Copy Image", which copies the displayed image to the clipboard
  • Some VTF preview options (alpha and tile checkboxes, zoom slider) will no longer reset switching to a different VTF
  • Fix off-by-one error in VTF preview spinners
  • Fix face spinner in VTF preview having no effect on the displayed face
  • Fix potential memory leak in VTF decoder
  • Add .qci, .qcx to the text preview's supported formats
  • Add VPK tool category
    • "Generate Public/Private Key Files...": Generates a public/private keypair which can be used for signing VPKs
    • "Sign File...": Signs the VPK using the given <name>.privatekey.vdf KeyValues file
  • VPK signature (if present) and file-wide MD5 checksums are now properly checked in the "Verify Checksums" tool
  • Remember save directory between "Create VPK From Folder" prompts
  • Add button to ignore updates for a given version
  • Show application version in Discord rich presence on hover
  • Update to Qt 6.6.3 from 6.6.2

CLI Changes

  • Add -k / --sign parameter which accepts a path to the private key KeyValues file. The keys held within will be used to sign the output VPK
  • Add two new "modes"
    • Generate: exists for the --gen-keypair command. <path> will be interpreted as the name of the files, prepended to .[public/private]key.vdf
    • Sign: when <path> is an existing VPK and -k / --sign is present, the existing VPK will be signed using the keys in the private key file
  • Add progress bar for packing files
    • Can be disabled with the flag --no-progress

Installer Changes

  • Stop installing minizip headers
  • Stop installing discord-rpc headers and static library

For Developers

  • Replaced most of the existing cryptographic algorithm code with the CryptoPP library
VPKEdit - v4.1.3

Published by craftablescience 7 months ago

[!TIP]
Read the install guide for assistance installing VPKEdit.

General Changes

  • Add Adler32 implementation creators to credits

GUI Changes

  • Add PAK write support (WON Half-Life, Quake, etc.)
  • Add PCK write support (Godot)
  • Add automatic update notification (thanks @Trico-Everfire!)
    • This can be disabled in the options menu
  • Add Discord rich presence support
    • Does not say what file you have open
    • This too can be disabled in the options menu
  • Fix files failing to save on exit if the save operation took too long (race condition)
  • Fix GUI elements not being disabled after a file fails to load
  • Display "Embedded" in status bar if a Godot PCK is embedded in an executable
  • Display "Encrypted" in status bar if a Godot PCK's directory is encrypted
  • Display MD5 hashes as hex codes instead of binary in folder previews
  • Stop translating language names in Language selector menu
    • For example Japanese is now "日本語" for all languages
    • This should make it easier to select the language the user knows
  • Update translations

For Developers

  • Create precompiled versions of the C wrapper library
  • Create a C# wrapper library based on the C wrapper library
  • Create virtual entry system, currently used to edit BSP lumps
  • Strip the Wrapper prefix from files and types in the C wrapper library
  • Change behavior of entry attributes getter to return a buffer allocated in the library
  • Don't prefix libvpkedit and libvpkeditc with an extra lib on Linux
  • Start applying proper compiler flags for debug/release on Linux
VPKEdit - v4.1.2

Published by craftablescience 8 months ago

[!TIP]
Read the install guide for assistance installing VPKEdit.

General Changes

  • Fix VPK archives not copying to specified save path on Linux
  • Fix attempting to load FPX files with the VPK parser

GUI Changes

  • Sort list of supported extensions in "Open Pack File" dialog alphabetically

For Developers

  • Fix C wrapper library's PackFileTypeWrapper enum so it matches PackFileType
VPKEdit - v4.1.1

Published by craftablescience 8 months ago

[!TIP]
Read the install guide for assistance installing VPKEdit.

General Changes

  • Stop compiling with liblzma to avoid IFUNC error on startup on Linux
  • Fix crash when saving a VPK with external archive files to the same folder

GUI Changes

  • Update translations
    • Complete languages: Bosnian, Chinese (Simplified), Dutch, Polish, Russian, Spanish
    • Languages in progress: Italian, Japanese, Swedish
  • Add empty English translation file to stop defaulting to alternate installed languages
    • For example, if you have a Japanese language pack installed but its priority is lower than English, it will use English by default now
  • Fix crash when navigating back or forward when a removed file is in the navigation history
  • Add list of missing files to MDL error message when the MDL preview cannot find all the required model files

Installer Changes

  • Properly deregister associated extensions on Windows during uninstall process

For Developers

  • Compile with PIC and LTO/IPO enabled
  • Fix C wrapper library compilation
  • Stop prepending an extra "lib" to the library names on Linux
VPKEdit - v4.1.0

Published by craftablescience 8 months ago

[!TIP]
Read the install guide for assistance installing VPKEdit.

4.1 Highlights

  • Six more supported formats: BMZ, FPX, GCF, GRP, PAK, PCK
  • Translated to seven languages (3 fully, 4 partially)
  • Audio preview implemented
  • Created C wrapper library
  • Many bug fixes

General Changes

  • Add BMZ read and write support
  • Add GCF v6 read-only support
  • Add Godot PCK read-only support
    • Also works for PCKs embedded inside executables
  • Add GRP (Build Engine) read and write support
  • Add PAK (Quake, others) read-only support
  • When adding a new file to a VPK, prioritize saving it to empty space in an existing archive
  • Fix problems when loading files larger than 4gb

GUI Changes

  • Add translation support
    • Complete languages: Dutch, Russian, Spanish
    • Languages in progress: Bosnian, Japanese, Italian, Polish
    • Add language selector in options menu (uses system language by default)
    • You can help translate VPKEdit into your language of choice here: https://poeditor.com/join/project/yxR9MLc9X2
      All translators are added to the application credits.
  • Add audio preview (.wav files only for now, was very buggy with .mp3 files)
  • Add checksum verifier tool
  • Add "Copy Path" button to file and folder context menus
  • Display more file metadata in the status bar
  • Display more valid attributes for files in the folder preview, for every supported pack file format
  • Display VTF metadata in the bottom right of the preview (thanks @Trico-Everfire!)
  • Use proper icons for navigation bar buttons instead of Unicode characters
  • Fix previews not being able to understand files with uppercase letters in their extensions
  • Fix the text preview not displaying text in non-UTF8 or non-ASCII encodings
  • Add .bns file type to KeyValues preview
  • Movement with the arrow keys in the entry tree works again
  • Always use valid Windows paths and filenames when extracting files on Windows
  • Update to Qt 6.6.2 from 6.6.1

CLI Changes

  • Remove --allow-caps, as case sensitivity is now directly controlled by the pack file and is no longer configurable

For Developers

  • Create C wrapper library, libvpkeditc
  • Add example PackFile subclass in the example folder
  • Build PDBs in release and upload them (in Debug and Release) as an artifact in CI
VPKEdit - v4.0.1

Published by craftablescience 9 months ago

General Changes

  • Fix BSP files being corrupted after writing the paklump
  • Add GMA (Garry's Mod Addon) parser
  • Fix keeping file handles active after parsing BSP, VPK files
VPKEdit - v4.0.0

Published by craftablescience 9 months ago

4.0 Highlights

  • Added support for editing BSP paklumps
  • Added a command-line VPK packer
  • Tons of bug fixes and improvements to the UI

General Changes

  • Add support for editing BSP pakfiles and ZIP (uncompressed, LZMA) files
  • When failing to load archive VPKs, try to load the directory vpk instead
  • When creating a VPK from a directory, don't crash processing files with non-ASCII names
  • Don't keep the contents of unbaked entries in memory if added though a file path
    • If the file is moved/deleted before the VPK is baked, it will be empty in the VPK
    • This saves a massive amount of RAM when creating VPKs from folders
  • Fix trying to write to a wonky path when saving an archive to the same folder as the VPK
  • Fix two bugs with using relative paths in different places
  • Fix the archive paths that will be copied when re-saving an existing VPK to a different folder
  • Add a code of conduct and issue templates to the GitHub page
  • Add badges to README.md for license, build status, and associated Discord server
  • Add better screenshots to the readme, and added a custom social preview image

GUI Changes

  • Add icons to entries in the entry tree
    • Add option to disable icons in the entry tree
  • Add "File > Open Recent" menu to open recent files
  • Add a progress bar when saving VPK
  • Add a progress bar when creating a VPK from a folder
  • Add new VPK creation properties to VPK creation dialog
    • Save to single file - when creating a VPK from a folder, save all the files to the directory VPK
    • Preferred chunk size - size of archive VPKs created when adding files to the VPK
    • Generate per-file MD5 entries - generate MD5 hash information for each file when saving VPKs
  • Add new pack file properties under "Edit > Properties"
    • Currently this is just the VPK version property, but it provides a framework for more properties in the future
  • Add new entry properties to Entry Properties dialog
    • Use Compression - In BSP/ZIP files, entries can optionally use LZMA compression
  • Make Delete (and Shift+Delete) remove entries from entry tree or folder preview
  • Add a list of keyboard controls
  • Fix some bugs when opening or closing a pack file and selecting "cancel" or "discard", where the internal state would no longer match the GUI
  • Fix menu items staying disabled after failing to load a pack file
  • Fix crash after viewing more than 512 items without closing the VPK
  • Fix crash when Steam is installed but no Source games are found
    • Also, don't show the "Open In" menu if no Source games are found
  • Fix Source 2 games not appearing in "Open In" menu
  • Center text in info previews
  • Bundle credits text into the application, so Help > About dialog still works if CREDITS.md isn't present
  • Update the status text at the bottom of the window more consistently
  • When creating a VPK from a folder, append "_dir" to the default name if it is a chunked VPK
  • Don't append _dir to a VPK filestem if the folder it is being created from ends in _dir
  • Fix files not being easily overwritable
  • Fix entry options dialog not using the correct maximum preload bytes value
  • Fix entry options dialog using inverted wording interacting with files versus folders
  • Fix filenames not always being lowercased in the GUI compared to the VPK in memory
  • Fix entry options inverting saving to dir vs archive
  • Fix leaking memory when dialogs are closed successfully
  • Use release name instead of release tag in the update checker dialog
  • Always check the latest GitHub release in the update checker dialog
  • Properly display beta versions (versions with a tweak number) as beta
  • Properly display RC versions (versions where the tweak number matches this regex: ^99+$)

CLI Changes

  • Create CLI executable!
    • -h. --help, or no arguments - print usage and program information
  • Convert directory to VPK (pack)
    • -v, --version - specify version
    • -c, --chunksize - specify chunk size
    • -p, --preload - accepts a list of file extensions and/or filenames to preload in the directory VPK
    • -s, --single-file - pack to single file
    • -o, --output - specify output VPK path
    • --gen-md5-entries - enables generating per-file MD5 hashes to store in the directory VPK
    • --allow-caps - stops automatically lowercasing filenames (filenames are now lowercased when packing by default)
      • Only pass this if you know what you're doing! Files with uppercase letters will not be loaded by Source

Installer Changes

  • Add the CLI program to the installer
  • BSP extension is now registered to VPKEdit using the installer
  • When using the Linux installer, symlinks for the GUI and CLI are now created in /usr/bin, which puts the programs on the PATH
    • This was documented in INSTALL.md by @Nbc66
  • Add VPKEdit to the WinGet package registry
  • Create a PPA to serve VPKEdit packages over apt
  • Create binaries for bundling into Strata Source games (made for Portal 2: Community Edition)

For Developers

  • Completely refactored the libvpkedit library. It would be faster to describe what hasn't changed, so rather than describe it here, I added a bunch of comments to the library. To use it now, call PackFile::open on the pack file, rather than the filetype-specific open method (unless you're using a nonstandard file extension)
  • Move version header from GUI to libvpkedit
  • Split up project CMake for readability
  • Stop uploading artifacts produced by clang in GitHub Actions
  • Strip binaries of debug symbols in Linux installer creation process
  • Fix edge case where it would write to an incorrect path if saving to the same place it was loaded from, when that path was manually specified in the PackFile::bake parameters
  • Use a more reliable check for if a filesystem entry is a file or not
VPKEdit - v4.0.0-rc.1

Published by craftablescience 9 months ago

VPKEdit 4.0 is almost done! Assuming no bugs are found with this version, this will become the 4.0.0 full release. All known bugs will be fixed in the full release.

[!WARNING]
You may encounter bugs using this version that I haven't found yet. If you encounter any, please make an issue here so the fix will go in the full release!

Known bugs (fixed in the full release):

  • VPKEditCLI will append an extraneous ".vpk" to the filename printed in the console
  • VPKEdit will append the packfile extension to the name of the folder when using the "Extract All" function
  • VPKEdit will use the archive VPK filename instead of the directory VPK filename in the "Open Recent" menu when trying to open an archive VPK
  • The "New VPK Properties" dialog in VPKEdit mistakenly uses bytes for the user-facing input instead of megabytes
  • The "New VPK Properties" dialog in VPKEdit should not show "Save to single file" option when creating an empty VPK
  • Multichunk VPKs (VPKs with _XXX.vpk next to them) don't copy their chunk files when saved to a different folder
  • VPKEdit does not save ZIP files and BSP files to a different path when "Save As" is selected

4.0 Highlights

  • Added support for editing BSP paklumps
  • Added a command-line VPK packer
  • Tons of bug fixes and improvements to the UI

GUI Changes

  • Don't crash after viewing more than 512 items without closing the VPK
  • Center text in info previews
  • Use release name instead of release tag in the update dialog
  • Ignore prereleases in update checker
  • Bundle credits text into the application, so Help > About dialog still works if CREDITS.md isn't present
  • Add a progress bar when saving VPK
  • Add a progress bar when creating a VPK from a folder
  • Update the status text at the bottom of the window more consistently
  • Add an option to create a single-file VPK (the default is now a chunked VPK)
  • Fix crash when Steam is installed but no Source games are found
    • Also, don't show the "Open In" menu if no Source games are found
  • When creating a VPK from a folder, append "_dir" to the default name if it is a chunked VPK
  • Fix Source 2 games not appearing in "Open In" menu
  • Fix files not being easily overwritable
  • Fix entry options dialog not using the correct maximum preload bytes value
  • Fix entry options dialog using inverted wording interacting with files versus folders
  • Fix filenames not always being lowercased in the GUI compared to the VPK in memory

Changes since the last beta:

  • Fix entry options inverting saving to dir vs archive
  • Make Delete (and Shift+Delete) remove entries from entry tree or folder preview
  • Don't append _dir to a VPK filestem if the folder it is being created from ends in _dir
  • Always check the latest GitHub release in the update checker
  • Fix leaking memory when dialogs are closed successfully
  • Add a list of keyboard controls
  • Add icons to entries in the entry tree
    • Add option to disable icons in the entry tree
  • Fix some bugs when opening or closing a pack file and selecting "cancel" or "discard", where the internal state would no longer match the GUI
  • Add "File > Open Recent" menu to open recent files
  • Fix menu items staying disabled after failing to load a pack file
  • Add new entry properties to GUI
  • Add new VPK properties to GUI
  • BSP extension is now registered to VPKEdit using the installer

CLI Changes

  • Create CLI executable!
    • Add CLI executable to VPKEdit installer
    • -h. --help, or no arguments - print usage and program information
  • Convert directory to VPK (pack)
    • -v, --version - specify version
    • -c, --chunksize - specify chunk size
    • -p, --preload - accepts a list of file extensions and/or filenames to preload in the directory VPK
    • -s, --single-file - pack to single file
    • -o, --output - specify output VPK path
    • --gen-md5-entries - enables generating per-file MD5 hashes to store in the directory VPK
    • --allow-caps - stops automatically lowercasing filenames (filenames are now lowercased when packing by default)

General Changes

  • When creating a VPK from a directory, skip files with non-ASCII names (VPKs don't support those)
  • Don't keep the contents of unbaked entries in memory if added though a file path
    • If the file is moved/deleted before the VPK is baked, it will be empty in the VPK
    • This saves a massive amount of RAM when creating VPKs from folders
  • Fix trying to write to a wonky path when saving an archive to the same folder as the VPK
  • When using the Linux installer, symlinks for the GUI and CLI are now created in /usr/bin, which puts the programs on the PATH
    • This was documented in INSTALL.md by @Nbc66
  • Fix two bugs with using relative paths in different places
  • Fix the archive paths that will be copied when re-saving an existing VPK to a different folder
  • Added badges to README.md for license, build status, and associated Discord server
  • Automatically lowercase all filenames given to the library
  • Properly display beta versions (versions with a tweak number) as beta
  • Added a code of conduct and issue templates to the GitHub page

Changes since the last beta:

  • Added support for ZIP (uncompressed, LZMA) and BSP formats
  • Properly display RC versions (versions where the tweak number matches this regex: ^99+$)
  • When failing to load archive vpks, try to load the directory vpk instead
  • Added better screenshots to the readme, and added a custom social preview image

For Developers

[!NOTE]
All changes to libvpkedit will be listed in the full release, since it is evolving quickly right now. In the meantime, here's an overview:

  • Add ability to control VPK chunk size
  • Remove VPKEntry::filenamePair member variable
  • Remove some redundant and not well documented VPK methods
  • Rename all usages of FileName to Filename
  • Move version header from GUI to libvpkedit
  • Split up project CMake for readability
  • Stop uploading artifacts produced by clang in GitHub Actions
  • Strip binaries of debug symbols in Linux installer creation process
  • Add a callback parameter to all functions that operate on all entries in a VPK (accepts the parent directory and a VPKEntry reference)
  • Add VPK::createFromDirectoryProcedural, which accepts a function that takes in the full entry path and returns if the entry should be saved in the directory VPK and the preload bytes amount
    • This function is then called for each file added to the VPK
  • Add VPK::getEntryCount to get the number of entries in the VPK
  • Add field VPKOptions::generateMD5Entries to control if per-file MD5 entries are generated
  • Fix edge case where it would write to an incorrect path if saving to the same place it was loaded from, when that path was manually specified in the VPK::bake parameters
  • Use a more reliable check for if a filesystem entry is a file or not
  • Added new boolean field, VPKOptions::allowUppercaseLettersInFilenames, which enables case sensitivity in all VPK operations (false by default)

Changes since the last beta:

  • Completely refactored the library to support multiple formats
VPKEdit - v4.0.0-beta.4

Published by craftablescience 9 months ago

VPKEdit 4.0 is coming soon! It brings with it a bunch of bug fixes and features. I want to delay the proper release to add more features and properly test everything that's changed, so in the meantime I'm making beta releases.

[!WARNING]
You may encounter bugs using this version that I haven't found yet. Hopefully it's more stable than the last release, but after changing so much code, it's possible there's a regression or two. If you encounter any, please make an issue here and I will patch it as soon as possible.

GUI Changes

  • Don't crash after viewing more than 512 items without closing the VPK
  • Center text in info previews
  • Use release name instead of release tag in the update dialog
  • Ignore prereleases in update checker
  • Bundle credits text into the application, so Help > About dialog still works if CREDITS.md isn't present
  • Add a progress bar when saving VPK
  • Add a progress bar when creating a VPK from a folder
  • Update the status text at the bottom of the window more consistently
  • Add an option to create a single-file VPK (the default is now a chunked VPK)
  • Fix crash when Steam is installed but no Source games are found
    • Also, don't show the "Open In" menu if no Source games are found
  • When creating a VPK from a folder, append "_dir" to the default name if it is a chunked VPK
  • More to come...

Changes since the last beta:

  • Fix Source 2 games not appearing in "Open In" menu
  • Fix files not being easily overwritable
  • Fix entry options dialog not using the correct maximum preload bytes value
  • Fix entry options dialog using inverted wording interacting with files versus folders
  • Fix filenames not always being lowercased in the GUI compared to the VPK in memory

CLI Changes

  • Create CLI executable!
    • Add CLI executable to VPKEdit installer
    • -h. --help, or no arguments - print usage and program information
  • Convert directory to VPK (pack)
    • -v, --version - specify version
    • -c, --chunksize - specify chunk size
    • -p, --preload - accepts a list of file extensions and/or filenames to preload in the directory VPK
    • -s, --single-file - pack to single file
    • -o, --output - specify output VPK path
    • --gen-md5-entries - enables generating per-file MD5 hashes to store in the directory VPK
  • Again, more to come...

Changes since the last beta:

  • Add --allow-caps flag that stops automatically lowercasing filenames (filenames are now lowercased when packing by default)

General Changes

  • When creating a VPK from a directory, skip files with non-ASCII names (VPKs don't support those)
  • Don't keep the contents of unbaked entries in memory if added though a file path
    • If the file is moved/deleted before the VPK is baked, it will be empty in the VPK
    • This saves a massive amount of RAM when creating VPKs from folders
  • Fix trying to write to a wonky path when saving an archive to the same folder as the VPK
  • When using the Linux installer, symlinks for the GUI and CLI are now created in /usr/bin, which puts the programs on the PATH
    • This was documented in INSTALL.md by @Nbc66
  • Fix two bugs with using relative paths in different places
  • Fix the archive paths that will be copied when re-saving an existing VPK to a different folder
  • Added badges to README.md for license, build status, and associated Discord server

Changes since the last beta:

  • Automatically lowercase all filenames given to the library
  • Properly display beta versions (versions with a tweak number) as beta
  • Added a code of conduct and issue templates to the GitHub page

For Developers

[!NOTE]
All changes to libvpkedit will be listed in the full release, since it is evolving quickly right now. In the meantime, here's an overview:

  • Add ability to control VPK chunk size
  • Remove VPKEntry::filenamePair member variable
  • Remove some redundant and not well documented VPK methods
  • Rename all usages of FileName to Filename
  • Move version header from GUI to libvpkedit
  • Split up project CMake for readability
  • Stop uploading artifacts produced by clang in GitHub Actions
  • Strip binaries of debug symbols in Linux installer creation process
  • Add a callback parameter to all functions that operate on all entries in a VPK (accepts the parent directory and a VPKEntry reference)
  • Add VPK::createFromDirectoryProcedural, which accepts a function that takes in the full entry path and returns if the entry should be saved in the directory VPK and the preload bytes amount
    • This function is then called for each file added to the VPK
  • Add VPK::getEntryCount to get the number of entries in the VPK
  • Add field VPKOptions::generateMD5Entries to control if per-file MD5 entries are generated
  • Fix edge case where it would write to an incorrect path if saving to the same place it was loaded from, when that path was manually specified in the VPK::bake parameters
  • Use a more reliable check for if a filesystem entry is a file or not

Changes since the last beta:

  • Added new boolean field, VPKOptions::allowUppercaseLettersInFilenames, which enables case sensitivity in all VPK operations (false by default)
VPKEdit - v4.0.0-beta.3

Published by craftablescience 9 months ago

VPKEdit 4.0 is coming soon! It brings with it a bunch of bug fixes and features. I want to delay the proper release to add more features and properly test everything that's changed, so in the meantime I'm making beta releases.

[!WARNING]
You may encounter bugs using this version that I haven't found yet. Hopefully it's more stable than the last release, but after changing so much code, it's possible there's a regression or two. If you encounter any, please make an issue here and I will patch it as soon as possible.

GUI Changes

  • Don't crash after viewing more than 512 items without closing the VPK
  • Center text in info previews
  • Use release name instead of release tag in the update dialog
  • Ignore prereleases in update checker
  • Bundle credits text into the application, so Help > About dialog still works if CREDITS.md isn't present
  • More to come...

Changes since the last beta:

  • Add a progress bar when saving VPK
  • Add a progress bar when creating a VPK from a folder
  • Update the status text at the bottom of the window more consistently
  • Add an option to create a single-file VPK (the default is now a chunked VPK)
  • Fix crash when Steam is installed but no Source games are found
    • Also, don't show the "Open In" menu if no Source games are found
  • When creating a VPK from a folder, append "_dir" to the default name if it is a chunked VPK

CLI Changes

  • Create CLI executable!
    • Add CLI executable to VPKEdit installer
    • -h. --help, or no arguments - print usage and program information
  • Convert directory to VPK (pack)
    • -v, --version - specify version
    • -c, --chunksize - specify chunk size
    • -s, --single-file - pack to single file
    • -o, --output - specify output VPK path
  • Again, more to come...

Changes since the last beta:

  • Don't add "_dir" to automatic output path if already present on the input folder
  • Remove terminal slash from input folder before creating automatic output path
  • Rename -m, --multichunk to -c, --chunksize to be more consistent with Valve's VPK tool
  • Add -p, --preload option that accepts a list of file extensions and/or filenames to preload in the directory VPK
  • Add --gen-md5-entries flag that enables generating per-file MD5 hashes to store in the directory VPK (now disabled by default)

General Changes

  • When creating a VPK from a directory, skip files with non-ASCII names (VPKs don't support those)
  • Don't keep the contents of unbaked entries in memory if added though a file path
    • If the file is moved/deleted before the VPK is baked, it will be empty in the VPK
    • This saves a massive amount of RAM when creating VPKs from folders
  • Fix trying to write to a wonky path when saving an archive to the same folder as the VPK
  • When using the Linux installer, symlinks for the GUI and CLI are now created in /usr/bin, which puts the programs on the PATH
    • This was documented in INSTALL.md by @Nbc66
  • Fix two bugs with using relative paths in different places

Changes since the last beta:

  • Added badges to README.md for license, build status, and associated Discord server
  • Fix the archive paths that will be copied when re-saving an existing VPK to a different folder

For Developers

[!NOTE]
All changes to libvpkedit will be listed in the full release, since it is evolving quickly right now. In the meantime, here's an overview:

  • Add ability to control VPK chunk size
  • Remove VPKEntry::filenamePair member variable
  • Remove some redundant and not well documented VPK methods
  • Rename all usages of FileName to Filename
  • Move version header from GUI to libvpkedit
  • Split up project CMake for readability
  • Stop uploading artifacts produced by clang in GitHub Actions
  • Strip binaries of debug symbols in Linux installer creation process

Changes since the last beta:

  • Add a callback parameter to all functions that operate on all entries in a VPK (accepts the parent directory and a VPKEntry reference)
  • Add VPK::createFromDirectoryProcedural, which accepts a function that takes in the full entry path and returns if the entry should be saved in the directory VPK and the preload bytes amount
    • This function is then called for each file added to the VPK
  • Add VPK::getEntryCount to get the number of entries in the VPK
  • Add field VPKOptions::generateMD5Entries to control if per-file MD5 entries are generated
  • Fix edge case where it would write to an incorrect path if saving to the same place it was loaded from, when that path was manually specified in the VPK::bake parameters
  • Use a more reliable check for if a filesystem entry is a file or not
VPKEdit - v4.0.0-beta.2

Published by craftablescience 10 months ago

VPKEdit 4.0 is coming soon! It brings with it a bunch of bug fixes and features. I want to delay the proper release to add more features and properly test everything that's changed, so in the meantime I'm making beta releases.

[!WARNING]
You may encounter bugs using this version that I haven't found yet. Hopefully it's more stable than the last release, but after changing so much code, it's possible there's a regression or two. If you encounter any, please make an issue here and I will patch it as soon as possible.

GUI Changes

  • Don't crash after viewing more than 512 items without closing the VPK
  • Center text in info previews
  • Use release name instead of release tag in the update dialog
  • Ignore prereleases in update checker
  • More to come...

Changes since the last beta:

  • Bundle credits text into the application, so Help > About dialog still works if CREDITS.md isn't present

CLI Changes

  • Create CLI executable!
    • Add CLI executable to VPKEdit installer
    • -h. --help, or no arguments - print usage and program information
  • Convert directory to VPK (pack)
    • -m, --multichunk - specify chunk size
    • -v, --version - specify version
    • -s, --single-file - pack to single file
    • -o, --output - specify output VPK path
  • Again, more to come...

Changes since the last beta:

  • Add icon to CLI executable on Windows
  • Fail if path to folder to pack is nonexistent or not a folder
  • Warn user when creating a multichunk VPK if the output filename is not suffixed with _dir

General Changes

  • When creating a VPK from a directory, skip files with non-ASCII names (VPKs don't support those)
  • Don't keep the contents of unbaked entries in memory if added though a file path
    • If the file is moved/deleted before the VPK is baked, it will be empty in the VPK
    • This saves a massive amount of RAM when creating VPKs from folders
  • Fix trying to write to a wonky path when saving an archive to the same folder as the VPK

Changes since the last beta:

  • When using the Linux installer, symlinks for the GUI and CLI are now created in /usr/bin, which puts the programs on the PATH
    • This was documented in INSTALL.md by @Nbc66
  • Fix two bugs with using relative paths in different places

For Developers

[!NOTE]
All changes to libvpkedit will be listed in the full release, since it is evolving quickly right now. In the meantime, here's an overview:

  • Add ability to control VPK chunk size
  • Remove VPKEntry::filenamePair member variable
  • Remove some redundant and not well documented VPK methods
  • Rename all usages of FileName to Filename
  • Move version header from GUI to libvpkedit
  • Split up project CMake for readability
  • Stop uploading artifacts produced by clang in GitHub Actions

Changes since the last beta:

  • Strip binaries of debug symbols in Linux installer creation process
VPKEdit - v4.0.0-beta.1

Published by craftablescience 10 months ago

VPKEdit 4.0 is coming soon! It brings with it a bunch of bug fixes and features. I want to delay the proper release to add more features and properly test everything that's changed, so in the meantime here's a beta release.

[!WARNING]
You may encounter bugs using this version that I haven't found yet. Hopefully it's more stable than the last release, but after changing so much code, it's possible there's a regression or two. If you encounter any, please make an issue here and I will patch it as soon as possible.

GUI Changes

  • Don't crash after viewing more than 512 items without closing the VPK
  • Center text in info previews
  • Use release name instead of release tag in the update dialog
  • Ignore prereleases in update checker
  • More to come...

CLI Changes

  • Create CLI executable!
    • Add CLI executable to VPKEdit installer
    • -h. --help, or no arguments - print usage and program information
  • Convert directory to VPK (pack)
    • -m, --multichunk - specify chunk size
    • -v, --version - specify version
    • -s, --single-file - pack to single file
    • -o, --output - specify output VPK path
  • Again, more to come...

General Changes

  • When creating a VPK from a directory, skip files with non-ASCII names (VPKs don't support those)
  • Don't keep the contents of unbaked entries in memory if added though a file path
    • If the file is moved/deleted before the VPK is baked, it will be empty in the VPK
    • This saves a massive amount of RAM when creating VPKs from folders
  • Fix trying to write to a wonky path when saving an archive to the same folder as the VPK

For Developers

[!NOTE]
All changes to libvpkedit will be listed in the full release, since it is evolving quickly right now. In the meantime, here's an overview:

  • Add ability to control VPK chunk size
  • Remove VPKEntry::filenamePair member variable
  • Remove some redundant and not well documented VPK methods
  • Rename all usages of FileName to Filename
  • Move version header from GUI to libvpkedit
  • Split up project CMake for readability
  • Stop uploading artifacts produced by clang in GitHub Actions
VPKEdit - v3.7.0

Published by craftablescience 10 months ago

GUI Changes

  • Added a navbar!
    • Back/Forward buttons (Alt + Left / Alt + Right, or Mouse4 / Mouse5): go back/forward in the navigation history
    • Up button (Alt + Up, Backspace): go up a folder or stop previewing a file
    • Home button (Home): go to the root folder of the VPK
    • Current path: shows the current path, can be edited to instantly jump somewhere else in the VPK
  • Added "Rename/Move" option to the right-click menu on files and folders
    • Allows files and folders to be renamed or moved to a different location
    • Allows the user to change the archive location or preload bytes amount of a file when "Advanced File Properties" is enabled
    • Rename "Advanced Mode" to "Advanced File Properties" in the options
  • Add option to start with entry tree collapsed
  • Add shortcut keys to change MDL preview mode (1, 2, 3, 4 per shading mode respectively)
  • Fix soft crash caused by trying to preview an unsaved file when more than one file had been added to the VPK without saving
  • Show "No available preview" message when attempting to preview an unpreviewable file, instead of the VPKEdit logo and version
  • Made info previews (image and text, usually an error message) vertically aligned instead of horizontally aligned
VPKEdit - v3.6.2

Published by craftablescience 10 months ago

GUI Changes

  • Resolved bug introduced in v3.6.0 where Windows 10 users only saw a white screen launching the application
  • Changed some wording of the update dialog
  • Updated Qt from v6.5.2 to v6.6.1

General Changes

  • Wrote an install guide, which you can find here
VPKEdit - v3.6.1

Published by craftablescience 11 months ago

GUI Changes

  • Add VPK file association on Linux (thanks @HurricanePootis!)
  • "Create from Empty" and "Create from Folder" now have different keybinds
    • "Create From Folder" is now Ctrl+Shift+N
  • Model preview now defaults to "Shaded Textured" if a model has textures instead of "Unshaded Textured"

General Changes

  • Fix some bad MD5 "other" section parsing logic
    • If the section is not 48 bytes long it will bail, but still report a successful parse
  • Rewrite readme
VPKEdit - v3.6.0

Published by craftablescience 11 months ago

GUI Changes

  • Added a model preview! Special thanks to @jean-knapp (xblah) for helping me deserialize the model data
    img
    • There are 4 view modes, similar to Blender:
      • Wireframe
      • Shaded Untextured
      • Unshaded Textured
      • Shaded Textured
    • Backface culling is also toggleable
    • Controls:
      • LMB or MMB+Drag to rotate X/Y
      • RMB+Drag to rotate Z
      • Shift+LMB or MMB+Drag to move
      • Scroll wheel to zoom in/out
    • It should work with pretty much any modern model (HL2 and up), but it probably won't, so please make an issue on this repository if you find it can't load a model!
    • Note that replicating Source engine shaders is out of scope and not a goal for this project, this preview is only an approximation of what the model would look like in-game (it's usually a pretty decent approximation though imho). Additionally, textures and materials will only be found if they are inside the loaded VPK
  • Folders in the entry tree are now sorted above files
  • VPKs opened from the command line with a relative path will no longer crash the application when they are saved
  • On Linux, more Qt platform plugins are bundled for greater compatibility with various distros and window managers
VPKEdit - v3.5.0

Published by craftablescience 11 months ago

GUI Changes

  • Add drag-and-drop of files and folders when the folder preview is open
  • Always load Advanced Mode option from the config file in standalone mode
  • Don't show the New File/Folder popup if adding a file or folder through a context menu and Advanced Mode is disabled
  • Handle adding new folders properly to the folder preview when adding a file or folder that is a grandchild or lower of the displayed folder
  • Improve VPK save confirmation dialog wording
  • Add keyboard shortcuts for "Check for Updates" and "About Qt"

For Developers

  • Removed last remnants of code that cared about CS2 beta VPKs (again)
    • VPK::createEmpty and VPK::createFromDirectory no longer have a cs2 boolean parameter