{"id":46239812,"url":"https://github.com/ln-development/easyoptimizer-v","last_synced_at":"2026-06-04T08:00:40.795Z","repository":{"id":341881410,"uuid":"1170963807","full_name":"LN-Development/EasyOptimizer-V","owner":"LN-Development","description":"A high-performance GTA V texture optimizer written in C","archived":false,"fork":false,"pushed_at":"2026-06-01T22:01:11.000Z","size":159667,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T00:05:23.294Z","etag":null,"topics":["gta","gta-v-modding","gta5-optimizer","gtaiv","rage"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LN-Development.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-02T18:12:19.000Z","updated_at":"2026-06-01T22:02:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"84b574e0-3854-457d-81ee-547e423977ee","html_url":"https://github.com/LN-Development/EasyOptimizer-V","commit_stats":null,"previous_names":["ln-development/easyoptimizer-v"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/LN-Development/EasyOptimizer-V","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LN-Development%2FEasyOptimizer-V","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LN-Development%2FEasyOptimizer-V/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LN-Development%2FEasyOptimizer-V/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LN-Development%2FEasyOptimizer-V/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LN-Development","download_url":"https://codeload.github.com/LN-Development/EasyOptimizer-V/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LN-Development%2FEasyOptimizer-V/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33895175,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-04T02:00:06.755Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gta","gta-v-modding","gta5-optimizer","gtaiv","rage"],"created_at":"2026-03-03T20:08:16.361Z","updated_at":"2026-06-04T08:00:40.786Z","avatar_url":"https://github.com/LN-Development.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EasyOptimizer-V\n\nA high-performance GTA V texture optimizer and manager written in native C/C++ for Windows.  \nEdit YTD files without extracting, find duplicates, resize, generate mips, and more.\n\n---\n\n## Features\n\n### File Support\n| Format | Read | Write | Notes |\n|--------|------|-------|-------|\n| `.ytd` | ✅ | ✅ | GTA V texture dictionary (RSC7, Legacy \u0026 Gen9) |\n| `.wtd` | ✅ | ✅ | GTA IV streaming texture dictionary (RSC5) |\n| `.ydr` | ✅ | — | GTA V drawable (embedded textures extracted) |\n| `.yft` | ✅ | — | GTA V fragment (embedded textures extracted) |\n| `.ydd` | ✅ | — | GTA V drawable dictionary (embedded textures extracted) |\n| `.rpf` | ✅ | — | RPF7 archives — AES, NG and CFXP (OpenIV/FiveM mods) decryption supported |\n\n### Texture Operations\n- **Smart Optimize** — Batch resize and recompress with configurable max resolution, format, and mipmap settings\n- **Fast Recompress** — One-click recompression with optional format downgrade (e.g. BC3 → BC1 when alpha is unused) to maximise space savings\n- **Recompress Same Format** — Re-encode without changing format, resolution, or mip count\n- **Per-Texture Editing** — Right-click any texture card to resize, convert format, export as DDS, unload changes (revert to original), or remove\n- **Mipmap Generation** — Auto-generate a full mip chain using stb_image_resize2 (Mitchell filter)\n- **DDS Export** — Export individual textures as DDS files\n\n### Duplicate Management\n- **Detect Duplicates** — Find duplicate textures across all loaded files by name, data hash (SHA-256), or both simultaneously\n- **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\n\n### Encoding\n- **CPU Encoder** — bc7enc_rdo with ISPC acceleration (BC1, BC2, BC3, BC4, BC5, BC7)\n- **GPU Encoder** — NVIDIA Texture Tools 3 (NVTT 3.2.5+) for BC1/BC3/BC7 via CUDA\n- Toggle between CPU and GPU with the sidebar button; the log always reports which encoder is active\n\n### Loading \u0026 Organisation\n- **Folder Scanner** — Recursively scan directories for all supported file types; bulk loads start collapsed for a clean overview\n- **RPF Archives** — Load `.rpf` files directly; entries are listed under the RPF group and can be expanded individually\n- **Drag \u0026 Drop** — Drop files or folders directly into the window\n- **Import Filter** — Choose which file types to import (YTD / WTD / YFT / YDD / YDR / RPF) per session\n- **Grid Sizes** — Cycle texture cards between Small (160×200), Medium (220×260), and Native (300×340)\n- **Sorting** — Sort loaded archives by name, type, total size, texture count, or modified state\n- **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\n\n### UI \u0026 Languages\n- Dark theme with colour-coded size indicators (green ≤ 12 MiB → red \u003e 64 MiB for whole archives)\n- Supports **15 languages**: English, Portuguese, Spanish, Russian, Turkish, Mandarin Chinese, Hindi, Japanese, Arabic, Bengali, French, German, Indonesian, Korean, Italian\n\n---\n\n## Saving\n\n`Save All` creates a versioned project cache under  \n`projects\\project-YYYYMMDD-HHMMSS-mmm\\` next to the executable before writing any files, then offers:\n\n- **Replace originals** — overwrite the source YTD/WTD files\n- **Save to folder** — copy to a chosen directory\n- **Cache only** — keep a snapshot without touching originals\n\nYDR/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.  \nRPF entries loaded from archives are also read-only — the source RPF is never modified.\n\n---\n\n## Building\n\n### Requirements\n\n- **Windows 10 or later**\n- **Visual Studio 2019+** with the C++ desktop workload (`cl.exe`, `link.exe`)\n- No additional downloads needed — all libraries are vendored\n\n### Steps\n\n1. Open a **Developer Command Prompt for Visual Studio** (or run `vcvars64.bat` manually)\n2. Navigate to this directory\n3. Run:\n\n```bat\nbuild.bat\n```\n\nThe compiled executable is placed at `build\\EasyOptimizer-V.exe`.\n\n### GPU Encoding (optional)\n\nPlace `nvtt30205.dll` (NVIDIA Texture Tools 3.2.5+) and `vcomp140.dll` beside the executable to enable GPU-accelerated BC1/BC3/BC7 compression via CUDA.  \nThe app probes for the DLL at startup and reports its status in the log. Falls back to CPU encoding automatically if unavailable.\n\n### NG-encrypted RPF Support (optional)\n\nReading **NG-encrypted** RPF archives (vanilla GTA V game files) needs `ng.dat` and `lut.dat`. You can generate them yourself from your own game copy — **no key material is distributed**:\n\n1. Click **Get GTA Keys** in the sidebar (or accept the prompt that appears when you open an NG-encrypted RPF without keys).\n2. Select your `GTA5.exe`.\n3. The app scans the executable for the key windows (matched against the SHA-1 fingerprints in the bundled `gtav_key_hashes.dat`) and writes `ng.dat` + `lut.dat` next to itself.\n\nThis mirrors CodeWalker's approach: only SHA-1 hashes are shipped, never the keys themselves — the keys are derived from your own installation. **AES-encrypted** and **CFXP** (OpenIV/FiveM mod) RPFs work without any key files.\n\n---\n\n## Project Structure\n\n```\nsrc/\n  gui.c               — Main window, sidebar, all dialogs and UI logic\n  gui_cards.c         — Texture card and archive card rendering\n  ytd.c               — GTA V YTD (RSC7) loader/saver\n  wtd.c               — GTA IV WTD (RSC5) loader/saver\n  ydr.c               — YDR/YFT/YDD embedded texture extractor\n  rpf_scan.cpp        — RPF7 archive scanner (AES / NG / CFXP decryption)\n  optimizer.c         — Smart resize, duplicate finder, migration engine\n  texture.c           — Mipmap generation, format conversion, snapshot/revert\n  bc7enc_wrapper.cpp  — bc7enc_rdo ISPC integration\n  nvtt_c_wrapper.c    — NVTT 3 GPU encoder wrapper\n  theme.c             — Dark theme colours and fonts\n  hash.c              — Jenkins one-at-a-time hash\n  dds.c               — DDS file export\n  main.c              — Entry point, crash handler\nvendor/               — Third-party libraries (bc7enc_rdo, stb, miniz)\nres/                  — Windows resources (manifest, version info)\nbuild.bat             — Build script\n```\n\n---\n\n## Credits \u0026 Licenses\n\nThis project was built with knowledge and inspiration from the following works:\n\n| Project | Author | License |\n|---------|--------|---------|\n| [FiveFury](https://github.com/Hancapo/fivefury) | Hancapo | MIT |\n| [CodeWalker](https://github.com/dexyfex/CodeWalker) | dexyfex | Educational |\n| [bc7enc_rdo](https://github.com/richgel999/bc7enc_rdo) | Rich Geldreich | MIT |\n| [stb](https://github.com/nothings/stb) | Sean Barrett | Public Domain |\n| [miniz](https://github.com/richgel999/miniz) | Rich Geldreich | MIT |\n\nSpecial thanks to **ook3d** for WTD support.\n\n---\n\n## License\n\nThis 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.\n\nThis 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](./LICENSE) for more details.\n\nYou should have received a copy of the GNU General Public License along with this program. If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fln-development%2Feasyoptimizer-v","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fln-development%2Feasyoptimizer-v","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fln-development%2Feasyoptimizer-v/lists"}