Skip to content

Releases: LN-Development/EasyOptimizer-V

EasyOptimizer-V-1.2.2

Choose a tag to compare

@LN-Development LN-Development released this 06 Jul 20:18

EasyOptimizer-V-1.2.1

Choose a tag to compare

@LN-Development LN-Development released this 10 Jun 16:40

Full Changelog: 1.2.0...1.2.1

Language switching fix

EasyOptimizer-V-1.2.0

Choose a tag to compare

@LN-Development LN-Development released this 08 Jun 19:31

Refactor GUI: menu, toolbar, layout & search
Introduce a new menu bar, status/totals bars and toolbar area; register new window classes and add menu handling (File/Actions/View) with contextual dropdowns and sort/grid/encoder options. Move and restyle the search box into the sidebar/toolbar, add live search filtering across archives and textures, and implement data-driven grid row enumeration and column helpers (GridRow/GridColumn + get_visible_rows and format_size_commas). Update dialog templates to use Segoe UI and larger sizes, adjust control positions/sizes, enable double-clicks for content class, switch several backgrounds to themed brushes, and consistently call layout_children when the dataset changes. Add confirmation prompts for destructive recompress operations, tweak archive card hit-testing/geometry, hide vertical scrollbar on content, and refresh totals/status rendering. Also update some sidebar button labels and include a refreshed application icon (res/app.ico).

Add 'Export All' DDS export for YTD archives
Add a new "Export all textures as DDS" feature for YTD archives. Introduces a new command id (IDM_CTX_EXPORT_DDS_ALL), a context-menu entry, and a DDS button on archive cards and RPF entry rows. Implements do_archive_export_all_dds which prompts the user for an output folder, creates a subfolder named after the archive, sanitizes texture names, avoids overwriting by adding numeric suffixes, converts each texture to DDS (via dds_build) and writes files, and reports success/failure in the GUI and logs. Also wires up click handlers to trigger the export from both the card UI and content clicks.

Add RPF write-back and GUI save integration
Implement rewriting of RPF7 archives and integrate it into the save workflow. Adds a new rpf_rewrite_file API and RpfReplacement type (rpf_scan.h) and implements rewrite_archive (rpf_scan.cpp) which parses the TOC, applies per-entry replacements, preserves nested .rpf blobs, reserializes the table of contents (handling AES-encrypted TOC) and writes a new archive image; NG-encrypted archives are rejected. A crypto.encrypt_aes helper was added to re-encrypt AES TOCs. GUI changes (src/gui.c) introduce helpers to serialize archives to temp files, read whole files, create versioned .bak backups, detect nested RPF entries, and save_into_original_rpfs which batches replacements per source RPF and invokes the rewrite routine. The save dialog text and status reporting were updated to mention repacking non-nested RPFs, keeping .bak copies, and exporting nested-RPF entries as .ytd sidecars. Errors from rewrite are surfaced via an error string and failed/skipped counts are accounted for.

Support YDR model write-back and RSC7 recomposition
Retain original RSC7 payload when loading YDR/YFT/YDD so edited textures can be written back and the model recomposed on save. Changes: gui.c now routes saves of ARCHIVE_MODEL_READONLY with retained payload to ydr_save and keeps .ydr/.yft/.ydd extensions unless no payload is available; types.h adds ArchiveFile.model_meta to track retained model metadata. ydr.c: major additions — ModelMeta struct, parse_texdict now returns texture/data offsets, allocation of retained payload and offset arrays in ydr_load, and new functions ydr_save and ydr_free_model_meta to recompute/patch the RSC7 segments, compress them, and write the header; includes helpers for RSC7 compression and DX9 format mapping. ydr.h: exposed prototypes for save/free. ytd.c: improved rsc7_flags_from_size to prefer page sizes that avoid overflowing the fixed chunk array and added cleanup call to free retained model meta in ytd_free. Behavior notes: if payload retention fails the file remains read-only; ydr_save validates texture count and fails with an error if write-back is not possible.

Full Changelog: 1.1.0...1.2.0

EasyOptimizer-V-1.1.0

Choose a tag to compare

@LN-Development LN-Development released this 04 Jun 06:27
  • Bug fixes
  • New features

Full Changelog: 1.0.0...1.1.0

EasyOptimizer-V-1.0.1

Choose a tag to compare

@LN-Development LN-Development released this 02 Jun 14:31
77a38d0

Small bug fix

Full Changelog: pre-release-0.1.0...1.0.1

EasyOptimizer-V - 1.0.0

Choose a tag to compare

@LN-Development LN-Development released this 02 Jun 14:11
77a38d0

EasyOptimizer-V

A high-performance GTA V texture optimizer and manager written in native C/C++ for Windows.
Edit YTD files without extracting, find duplicates, resize, generate mips, and more.


Features

File Support

Format Read Write Notes
.ytd ✅ ✅ GTA V texture dictionary (RSC7, Legacy & Gen9)
.wtd ✅ ✅ GTA IV streaming texture dictionary (RSC5)
.ydr ✅ — GTA V drawable (embedded textures extracted)
.yft ✅ — GTA V fragment (embedded textures extracted)
.ydd ✅ — GTA V drawable dictionary (embedded textures extracted)
.rpf ✅ — RPF7 archives — AES, NG and CFXP (OpenIV/FiveM mods) decryption supported

Texture Operations

  • Smart Optimize — Batch resize and recompress with configurable max resolution, format, and mipmap settings
  • Fast Recompress — One-click recompression with optional format downgrade (e.g. BC3 → BC1 when alpha is unused) to maximise space savings
  • Recompress Same Format — Re-encode without changing format, resolution, or mip count
  • Per-Texture Editing — Right-click any texture card to resize, convert format, export as DDS, unload changes (revert to original), or remove
  • Mipmap Generation — Auto-generate a full mip chain using stb_image_resize2 (Mitchell filter)
  • DDS Export — Export individual textures as DDS files

Duplicate Management

  • Detect Duplicates — Find duplicate textures across all loaded files by name, data hash (SHA-256), or both simultaneously
  • Migrate Dups — Preview the migration before applying: consolidated YTDs are shown in the UI with an amber border marked PREVIEW; choose "Maintain" per consolidated file to keep originals, then click Migrate to commit

Encoding

  • CPU Encoder — bc7enc_rdo with ISPC acceleration (BC1, BC2, BC3, BC4, BC5, BC7)
  • GPU Encoder — NVIDIA Texture Tools 3 (NVTT 3.2.5+) for BC1/BC3/BC7 via CUDA
  • Toggle between CPU and GPU with the sidebar button; the log always reports which encoder is active

Loading & Organisation

  • Folder Scanner — Recursively scan directories for all supported file types; bulk loads start collapsed for a clean overview
  • RPF Archives — Load .rpf files directly; entries are listed under the RPF group and can be expanded individually
  • Drag & Drop — Drop files or folders directly into the window
  • Import Filter — Choose which file types to import (YTD / WTD / YFT / YDD / YDR / RPF) per session
  • Grid Sizes — Cycle texture cards between Small (160×200), Medium (220×260), and Native (300×340)
  • Sorting — Sort loaded archives by name, type, total size, texture count, or modified state
  • Unload / Remove — Right-click any archive or texture to remove it from the workspace (disk untouched) or revert edits back to the on-disk original

UI & Languages

  • Dark theme with colour-coded size indicators (green ≤ 12 MiB → red > 64 MiB for whole archives)
  • Supports 15 languages: English, Portuguese, Spanish, Russian, Turkish, Mandarin Chinese, Hindi, Japanese, Arabic, Bengali, French, German, Indonesian, Korean, Italian

Saving

Save All creates a versioned project cache under
projects\project-YYYYMMDD-HHMMSS-mmm\ next to the executable before writing any files, then offers:

  • Replace originals — overwrite the source YTD/WTD files
  • Save to folder — copy to a chosen directory
  • Cache only — keep a snapshot without touching originals

YDR/YFT/YDD model inputs are read-only: their extracted textures can be saved as standalone YTD copies, but the original model files are never overwritten.
RPF entries loaded from archives are also read-only — the source RPF is never modified.


Building

Requirements

  • Windows 10 or later
  • Visual Studio 2019+ with the C++ desktop workload (cl.exe, link.exe)
  • No additional downloads needed — all libraries are vendored

Steps

  1. Open a Developer Command Prompt for Visual Studio (or run vcvars64.bat manually)
  2. Navigate to this directory
  3. Run:
build.bat

The compiled executable is placed at build\EasyOptimizer-V.exe.

GPU Encoding (optional)

Place nvtt30205.dll (NVIDIA Texture Tools 3.2.5+) and vcomp140.dll beside the executable to enable GPU-accelerated BC1/BC3/BC7 compression via CUDA.
The app probes for the DLL at startup and reports its status in the log. Falls back to CPU encoding automatically if unavailable.

NG-encrypted RPF Support (optional)

Place ng.dat and lut.dat (key tables extracted from the GTA V executable) beside the executable to enable reading of NG-encrypted RPF archives (vanilla GTA V game files). Without these files, only AES-encrypted and plain-TOC RPFs are supported.


Project Structure

src/
  gui.c               — Main window, sidebar, all dialogs and UI logic
  gui_cards.c         — Texture card and archive card rendering
  ytd.c               — GTA V YTD (RSC7) loader/saver
  wtd.c               — GTA IV WTD (RSC5) loader/saver
  ydr.c               — YDR/YFT/YDD embedded texture extractor
  rpf_scan.cpp        — RPF7 archive scanner (AES / NG / CFXP decryption)
  optimizer.c         — Smart resize, duplicate finder, migration engine
  texture.c           — Mipmap generation, format conversion, snapshot/revert
  bc7enc_wrapper.cpp  — bc7enc_rdo ISPC integration
  nvtt_c_wrapper.c    — NVTT 3 GPU encoder wrapper
  theme.c             — Dark theme colours and fonts
  hash.c              — Jenkins one-at-a-time hash
  dds.c               — DDS file export
  main.c              — Entry point, crash handler
vendor/               — Third-party libraries (bc7enc_rdo, stb, miniz)
res/                  — Windows resources (manifest, version info)
build.bat             — Build script

Credits & Licenses

This project was built with knowledge and inspiration from the following works:

Project Author License
FiveFury Hancapo MIT
CodeWalker dexyfex Educational
bc7enc_rdo Rich Geldreich MIT
stb Sean Barrett Public Domain
miniz Rich Geldreich MIT

Special thanks to ook3d for WTD support.


License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License v3 as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Full Changelog: pre-release-0.1.0...1.0.0

EasyOptimizer-V (C Rework/Pre-relase)

Pre-release

Choose a tag to compare

@LN-Development LN-Development released this 01 Jun 19:44

EasyOptimizer-V

A high-performance GTA V texture optimizer written in pure C with Win32 GUI.

Features

  • YTD/WTD/YDR/YFT/YDD support — Load texture dictionaries and extract embedded textures from drawables, fragments, and drawable dictionaries

  • Smart Optimize — Batch resize and recompress textures with configurable max resolution, format, and mipmap settings

  • Fast Recompress — One-click recompression of all loaded textures using the active encoder

  • CPU & GPU Encoding — Toggle between bc7enc (CPU) and NVTT (GPU via nvtt.dll) for BC1/BC3/BC5/BC7 compression

  • Per-Texture Editing — Resize, change format, and set mipmaps for individual textures

  • Duplicate Finder — Find duplicate textures by name or data hash across all loaded files

  • Folder Scanner — Recursively scan directories for all supported file types

  • Drag & Drop — Drop files directly into the window to load them

  • Sorting - Sort loaded archives by name, type, total size, texture count, or modified state

  • Languages - Switch the main interface between 15 languages: English, Portuguese, Spanish, Russian, Turkish, Mandarin Chinese, Hindi, Japanese, Arabic, Bengali, French, German, Indonesian, Korean, and Italian

Saving

Save All creates a versioned project cache under
projects\project-YYYYMMDD-HHMMSS-mmm\ next to the executable before writing
files. It then offers:

  • Yes - replace original YTD/WTD files
  • No - save copies to another folder
  • Cancel - keep files unchanged

The same popup also offers a cache-only snapshot without replacing files.
YDR/YFT/YDD inputs are read-only models: their extracted textures can be saved
as YTD copies, but the original model files are never overwritten.

Building

Requirements

  • Windows 10+
  • Visual Studio 2019+ (MSVC toolchain with cl.exe)
  • No external dependencies needed — all libraries are vendored

Steps

  1. Open a Developer Command Prompt for Visual Studio (or run vcvars64.bat)
  2. Navigate to this directory
  3. Run:
build.bat

The compiled executable will be at build\EasyOptimizer-V.exe.

Optional: GPU Encoding

Place nvtt.dll (from NVIDIA Texture Tools) next to the executable to enable GPU-accelerated texture compression.

Project Structure

src/            — Source code
  gui.c         — Main window, sidebar, dialogs
  gui_cards.c   — Texture card rendering
  ytd.c         — GTA V YTD (RSC7) loader/saver
  wtd.c         — GTA IV WTD (RSC5) loader/saver
  ydr.c         — YDR/YFT/YDD embedded texture extractor
  optimizer.c   — Smart resize & duplicate finder
  texture.c     — Mipmap generation & format conversion
  bc7enc_wrapper.cpp — bc7enc_rdo integration
  nvtt_c_wrapper.c   — NVTT GPU encoder (optional)
  theme.c       — Dark theme colors & fonts
  hash.c        — Jenkins one-at-a-time hash
  dds.c         — DDS file export
  main.c        — Entry point
vendor/         — Third-party libraries (bc7enc_rdo, stb)
res/            — Windows resource files (manifest, icon)
build.bat       — Build script

Credits, Acknowledgments & Licenses

This project was built with knowledge and inspiration and use code from the following projects:

  • FiveFury by Hancapo — MIT License
  • CodeWalker by dexyfex — Educational Purposes Only
  • bc7enc_rdo — MIT License
  • stb (stb_image, stb_image_resize2) — Public Domain
  • miniz — MIT License
  • Thanks to ook3d for .wtd support

License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of - Big objects auto divider and converter with non embedd collision

  • Auto Ambient Occlusion
    be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Full Changelog: pre-release-0.0.1...pre-release-0.1.0

EasyOptimizer-V (pre-release)

Pre-release

Choose a tag to compare

@LN-Development LN-Development released this 03 Mar 18:16
044919b

EasyOptimizer-V

To-do

HOW TO USE

To-do

Discord

Discord

Dependencies

Codewalker

Installation

To-do

TO-DO

To-do

Credits

CodeWalker

Thanks to ook3d for .wtd support