{"id":27255881,"url":"https://github.com/rakadeja/godot-texture-array-tools","last_synced_at":"2025-04-11T02:48:35.733Z","repository":{"id":287138382,"uuid":"963718476","full_name":"Rakadeja/godot-texture-array-tools","owner":"Rakadeja","description":"Texture2DArray generator and an Image Resizer tool for Godot 4.4+! First ever addon, needs testing!","archived":false,"fork":false,"pushed_at":"2025-04-10T05:59:29.000Z","size":2450,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-10T06:39:06.317Z","etag":null,"topics":["addon","addons","editor-plugin","feedback","game-development","game-engine","gamedev","gdscript","godot","godot-engine","godot4","image-processing","plugin","plugins","testing","texture-arrays","tools","wip"],"latest_commit_sha":null,"homepage":"","language":"GDScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Rakadeja.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2025-04-10T05:33:34.000Z","updated_at":"2025-04-10T06:31:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"920e6c36-e4c4-4e24-b5b7-c5ed81e13e0e","html_url":"https://github.com/Rakadeja/godot-texture-array-tools","commit_stats":null,"previous_names":["rakadeja/texture-array-tools"],"tags_count":null,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rakadeja%2Fgodot-texture-array-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rakadeja%2Fgodot-texture-array-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rakadeja%2Fgodot-texture-array-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rakadeja%2Fgodot-texture-array-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rakadeja","download_url":"https://codeload.github.com/Rakadeja/godot-texture-array-tools/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248332497,"owners_count":21086081,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["addon","addons","editor-plugin","feedback","game-development","game-engine","gamedev","gdscript","godot","godot-engine","godot4","image-processing","plugin","plugins","testing","texture-arrays","tools","wip"],"created_at":"2025-04-11T02:48:31.904Z","updated_at":"2025-04-11T02:48:35.723Z","avatar_url":"https://github.com/Rakadeja.png","language":"GDScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Texture Array Tools Addon\n\n\u003cp align=\"left\"\u003e\n\u003c!-- Badges cringelord area --\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Godot-4.4%2B-478CBF?logo=godotengine\" alt=\"Godot Version\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Status-Beta-orange\" alt=\"Status: Beta\"/\u003e\n \u003cimg src=\"https://img.shields.io/badge/Made%20in-VS%20Code-007ACC?logo=visualstudiocode\" alt=\"Made in VS Code\"/\u003e\n  \u003ca href=\"LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/License-MIT-blue\" alt=\"License: MIT\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"left\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/cdd64a19-899d-4a67-be65-f65cc6138267\" alt=\"GIF of the T2DA Tools in Godot 4.4.1\" width=\"400\"\u003e\n\u003c/p\u003e\n\nYour one-stop(?) shop for wrangling Texture2DArrays and batch-resizing images directly within the Godot editor.\n\nLess alt-tabbing, more game dev... I hope. (or more time debugging this addon, who knows?)\n\n---\n\n## ⚠️ WARNING ⚠️\n\n**!! PLEASE NOTE:** This addon is in **BETA**. Things might break, your PC might catch fire (unlikely, but hey), memory leaks probably.\n\n* **DON'T:** Use this in production without extensive testing. Don't expect flawless stability.\n* **DO:** Backup your project! Use version control (like Git)! Test on a separate branch first! You have been warned.\n\nIf cheesy, corny, unprofessional language triggers something primal deep within - then [INSTRUCTIONS.md](INSTRUCTIONS.md) is made for you. (Plus, it has more detailed information)\n\n---\n\n## Description\n\nEver wanted to make Texture Arrays without leaving the comfy confines of the Godot editor? Without writing scripts to generate them? Me too. This addon provides an in-editor UI for:\n\n1. **Texture2DArray Generation:** Feed it a bunch of compatible images, and it'll spit out a `.tres` file ready to use. Basic file format enforcement.\n2. **Image Resizing:** Need to resize a batch of images? Choose dimensions, pick your aspect ratio handling (Stretch, Pad, Crop), select interpolation filters, manage output naming (prefix/suffix/batch rename), choose output formats (PNG/JPG/WebP/Detect), control quality, add padding color, generate mipmaps (maybe!), create subfolders, and clear whitespace!\n3. **File Transfer Buttons:** Easily YEET image lists between the Generator and Resizer sections.\n\n---\n\n## Features\n\nSpent way too long on flooding it with possible features.\n\n* **T2DA Generator:**\n  * Select multiple input images.\n  * Specify output path and filename.\n  * **Ensure Format:** Force all input images to a chosen format (RGBA8, RGB8, etc.) before building. Bye-bye, format errors! (I will never need this in my life! Please, someone test these!)\n  * **Subfolder Generation:** Automatically create a subfolder based on the array name.\n  * **Overwrite Protection:** Choose to overwrite existing files or automatically append `*_1`, `*_2`, etc.\n\n* **Image Resizer:**\nFor when you need to resize a batch of images, without having to manually resize them, leave the editor or use ImageMagick.\n  * Select multiple input images.\n  * Specify output path.\n  * Choose target dimensions (use largest found or specify custom WxH).\n  * **Aspect Ratio Modes:** Stretch, Keep Aspect (Pad), Keep Aspect (Crop).\n  * **Interpolation Filters:** Nearest, Bilinear, Cubic, Lanczos.\n  * **Padding Color:** Choose the color used when padding (only for Pad mode).\n  * **Output Naming:** Add optional Prefix and/or Suffix to filenames.\n  * **Output Format:** Save as PNG, JPG, WebP, or auto-detect from input.\n  * **Quality Control:** Slider (0-100%) for JPG/WebP output quality.\n  * **Use Mipmaps:** Option to generate mipmaps for resized images (defaults based on first input's `.import` setting, but you can override it).\n  * **Subfolder Generation:** Automatically create a timestamped subfolder for resize batches.\n  * **Whitespace Removal:** Option to strip spaces from original filenames (ignored if batch renaming).\n  * **Batch Rename:** Option to rename all output files sequentially using a custom pattern (e.g., `myImage_suffix_001.png`).\n* **Transfer Buttons:** Buttons to quickly move input file lists between the Generator and Resizer.\n\n### Other Stuff\n\n* **Editor Theming:** Uses a separate resource (`PluginSystemThemeUIApplier`) to (mostly) match your current editor theme. (AN ABSOLUTELY CONVOLUTED WIP)\n* **Tooltips:** Hover over UI elements for hopefully helpful explanations!\n\n---\n\n## Installation (The Ritual)\n\n1. **Get the Goods:** Clone this repository or download the latest release ZIP.\n2. **Unzip (if needed):** If you downloaded a ZIP, extract it. You should find an `addons` folder inside.\n3. **Copy/Paste:** Copy the `texture_array_tools` folder (the one *inside* the `addons` folder you downloaded/cloned) into your *project's* `addons` folder. Create an `addons` folder in your project root if it doesn't exist. (Your project structure should look like `res://addons/texture_array_tools/...`)\n4. **Enable in Godot:**\n    * Open your Godot project.\n    * Go to `Project -\u003e Project Settings`.\n    * Navigate to the `Plugins` tab.\n    * Find \"Texture Array Tools\" in the list.\n    * Check the **Enable** box on the right.\n5. **Witness the Magic (or Errors):** A new dock panel titled \"Texture Array Tools\" should appear, likely docked in the **upper left** area by default (alongside Scene, Import etc.). You can drag this tab to other dock areas if you prefer! If you see errors in the Output panel instead... well, good luck.\n\n---\n\n## How to Use (sparknotes version)\n\nAfter enabling the plugin, find the \"Texture Array Tools\" dock panel.\n\nBoth the T2DA Generator and Image Resizer are all crammed into the same dockable tab, for better or for worse.\n\n\u003cp align=\"left\"\u003e\n  \u003ctable\u003e\n      \u003ctr\u003e\n        \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/3acc626b-aebc-4f52-bf42-461454715935\" alt=\"T2DA Generator UI\" width=\"400\"\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/fd7be7ad-5c10-436c-8bbc-78aa8f31b5b6\" alt=\"Image Resizer UI\" width=\"400\"\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/table\u003e\n\u003c/p\u003e\n\n### 📜 Texture2DArray Generator\n\n1. **Input Images:** Click `Browse...` (Load icon) to select two or more images.\n    * **IMPORTANT:** By default, all selected images *must* have the same dimensions and pixel format (e.g., all RGBA8, all RGB8).\n    * **TIP:** Use the **`Ensure Format?`** checkbox and dropdown below to force all images into a compatible format (like RGBA8) *before* building. This is highly recommended if something is amiss!\n2. **Output File:** Click `Browse...` (Folder icon) or type the path to the output folder (`res://...`).\n3. **Array Name:** Click `Browse...` (Save icon) or type the desired base filename for your `.tres` file.\n4. **Options:**\n    * `Ensure Format?`: Check this and select a target format (e.g., RGBA8) to avoid format mismatch errors.\n    * `Generate Subfolder?`: Creates `res://YourOutputPath/YourArrayName/YourArrayName.tres`.\n    * `Overwrite Existing?`: If unchecked, prevents overwriting by adding `_1`, `_2`, etc. to the filename if it already exists.\n5. **Build:** Check the status label. If it looks good (green \"OK\" message), hit `Generate Array` (Array icon)!\n\n### ✂️ Image Resizer 😮‍💨\n\n1. **Input Images:** Click `Browse...` (Load icon) to select images you want to resize.\n2. **Output Path:** Click `Browse...` (Folder icon) or type the path where resized images will be saved.\n3. **Target Size:**\n    * Check `Use Largest Size` to automatically resize all images to the largest dimensions found in the input set.\n    * Uncheck it and enter your desired `Width` and `Height` manually.\n4. **Resize Mode:** Choose how to handle aspect ratios:\n    * `Stretch`: Ignores aspect ratio, fits exactly to target dimensions.\n    * `Keep Aspect (Pad)`: Fits image within target dimensions, keeps aspect ratio, fills empty space with the **Padding Color**. (Color picker enabled only in this mode).\n    * `Keep Aspect (Crop)`: Scales image to *cover* target dimensions, keeps aspect ratio, crops off edges that extend beyond the target.\n5. **Resize Filter:** Select the image scaling quality (Nearest = pixelated, Lanczos = sharpest).\n6. **Output Naming:**\n    * `Prefix`/`Suffix`: Add optional text before/after the base filename.\n    * `Remove Whitespace?`: If NOT batch renaming, removes spaces from original filenames.\n    * `Batch Rename?`: Check this and provide a `Batch Pattern` (e.g., `terrain`) to rename all outputs like `Prefix_Pattern_Suffix_001.ext`. Ignores original filenames and whitespace removal if checked. (over-stretching it by calling it a 'batch pattern' lmao.)\n7. **Output Format:** Choose `PNG`, `JPG`, `WebP`, or `Detect from Input`.\n    * If JPG or WebP (or Detect finds one), the **Quality** slider (and percentage label) will appear. 0=Awful, 100=Best.\n8. **Use Mipmaps?:** Check to generate mipmaps for the resized images. The initial state is guessed from the first input image's `.import` file, but you can override it.\n9. **Create Subfolder?:** Check to save this batch into a unique timestamped subfolder inside the main Resizer output path.\n10. **Resize:** Check the status label. When ready, hit `Resize Images` (ImageTexture icon)!\n\n### 🔄 Transfer Area\n\n* **Gen -\u003e Resizer:** Sends the paths currently loaded in the T2DA Generator *to* the Image Resizer's input list. Useful if T2DA validation fails due to size/format.\n* **Resizer Input -\u003e Gen:** Sends the paths currently loaded in the Image Resizer's input list *to* the T2DA Generator.\n* **Resizer Output -\u003e Gen:** Transfers the list of image paths that were successfully created during the last resize operation to the T2DA Generator. (Uses the stored list, doesn't re-scan the directory).\n* **Auto Transfer:** If checked, automatically performs the 'Resizer Output -\u003e Gen' transfer (transferring the paths from the last successful resize) after the resize operation completes!\n\n### ✨ Tooltips \u0026 Further Information\n\nHover over *most* buttons, checkboxes, and input fields for a quick explanation!\n\nI've kept them as annoying as humanly possible.\n\nPlease see [INSTRUCTIONS.md](INSTRUCTIONS.md) for more detailed instructions and usage examples, as well as any bugs or unusual behaviors that have been reported thus far.\n\n---\n\n## Feedback / Contributing\n\nFound a bug? Got a suggestion? Did it actually *not* crash?\n\n* Please open an issue on the GitHub repository for bugs or feature requests.\n* Pull requests are welcome if you want to fix something or add features (but maybe open an issue first to discuss).\n\n---\n\n## Credits\n\nThis addon draws heavy inspiration from these Unity scripts:\n\n* [XJINEUnity_Texture2DArrayGenerator](https://github.com/XJINE/Unity_Texture2DArrayGenerator)\n* [vr-voyage/TextureArrayGenerator.cs](https://gist.github.com/vr-voyage/faf7d655285655020dd8343ad7847c25)\n* [MephestoKhaan/TextureArrayCreator.cs](https://gist.github.com/MephestoKhaan/8953d2f38195c9c15ced7ff4e9c632ef)\n\n---\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frakadeja%2Fgodot-texture-array-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frakadeja%2Fgodot-texture-array-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frakadeja%2Fgodot-texture-array-tools/lists"}