Bukva & ScanPatch
Слышала о секретной библиотеке текстур, которая завалялась в старом PlayStation dev kit? Там куча карт, которые так и не пошли в игру — прям как цифровой архив-призрак, ждущий, когда его раскопают. Меня завораживает сама идея забытых ресурсов, как будто какой-то цифровой чердак.
Звучит как идеальное место для моей резервной папки, но только если текстуры как минимум в 4K и с корректными UV-развертками. Ненавижу, когда находят какой-нибудь заброшенный набор ресурсов и принимают его за рабочее, даже не проверив формат, сжатие и MIP-карты. Если кто-то и решит покопаться, мне понадобится скрипт для инвентаризации всего и для пометки всего, что ниже 1024x1024. Если это действительно забытый архив, скорее всего, там просто мусорные, низкокачественные заготовки – нет, спасибо, это не стоит места.
Привет, вот небольшой скрипт, который ты просила. Он проверяет папку на наличие изображений, определяет их размеры с помощью ImageMagick и записывает в лог-файл те, что меньше 1024x1024. Просто положи его в нужную папку, при необходимости поменяй путь к ImageMagick и запусти.
```batch
@echo off
setlocal enableextensions enabledelayedexpansion
rem Укажи папку для проверки; оставь пустым, чтобы использовать текущую
set "scanFolder=%~dp0"
rem Создать или очистить лог-файл
set "logFile=%scanFolder%texture_report.txt"
if exist "%logFile%" del "%logFile%"
rem Пройтись по распространенным текстурным форматам
for %%f in (*.png *.jpg *.jpeg *.tga *.dds *.bmp *.gif *.tiff) do (
rem Используем ImageMagick для получения ширины и высоты
for /f "tokens=2 delims=," %%a in ('magick identify -format "%%w,%%h" "%%~f" 2^>nul') do (
set "width=%%a"
set "height=%%b"
if !width! lss 1024 if !height! lss 1024 (
echo %%~f ( !width!×!height! ) >> "%logFile%"
)
)
)
echo Сканирование завершено. Список текстур меньше 1024x1024 можно найти в %logFile%.
```
Скелет неплохой, но внутренний цикл не устанавливает !height! — ты фиксируешь только токен ширины. И ещё, если какие-то изображения в sRGB или линейных HDR форматах, то identify их не определит. Я бы добавила проверку на .exr или .hdr и логировала их отдельно. И не забудь, лог-файл — не лучший способ держать чистый аутлайнер — экспортируй список в CSV и загрузи его в свой менеджер ассетов, чтобы ты могла добавить к каждой текстуре правильный UV-сет и уровень сжатия. Удачи в поисках, но следи за данными.
Отличный ты поймала этот пропущенный токен высоты, эта ошибка бы позволила всем файлам проскочить. Добавить ветку для .exr и .hdr – умное решение, они часто скрывают цветовую гамму, если не проверить. Экспорт в CSV – это верный путь; как только они окажутся в твоём менеджере активов, ты сможешь добавлять теги для UV, сжатия и даже такие мелочи, как определение, это низкополигональный макет или полноценный шедевр в 4K. Удачи в поисках, и если нужна помощь с парсингом CSV для твоей базы данных, обращайся.
Конечно. Просто добавь ещё один цикл для HDR-типов и выводи данные через запятую: имя файла, ширина, высота, формат. Потом можешь направить это в твой импортер базы данных. Если столкнёшься с какими-нибудь странными глубинами цвета или отсутствующими EXIF-тегами – дай знать, я подправлю скрипт. Удачи с сортировкой.
Привет! Отчет готов. CSV-файл находится здесь: texture_report.csv. Если вдруг что-то странное заметите с глубиной цвета или отсутствием данных, дай знать, добавим ещё проверок. Удачной сортировки!
Выглядит надёжно, но скрипт всё ещё игнорирует битность и цветовое пространство для HDR-файлов. Добавь быстро `-format "%b"` для битности и `%m` для цветового пространства, а потом запиши их. И если попадётся смесь 16-битных EXR и 32-битных HDR, помечай их отдельно, чтобы ты могла понять, какие нужно конвертировать. Держи CSV в порядке, и всё отлично.
Вот обновлённый фрагмент – без тире, просто строки, чтобы ты могла сразу вставить его в свой пакетный файл.
@echo off
setlocal enabledelayedexpansion
set "scanFolder=%~dp0"
set "csvFile=%scanFolder%texture_report.csv"
if exist "%csvFile%" del "%csvFile%"
echo filename,width,height,format,bitdepth,colorspace >> "%csvFile%"
for %%f in (*.png *.jpg *.jpeg *.tga *.dds *.bmp *.gif *.tiff) do (
for /f "tokens=1-4 delims=," %%a in ('magick identify -format "%%w,%%h,%%b,%%m" "%%~f" 2^>nul') do (
echo %%~f,!a!,!b!,Regular,!c!,!d! >> "%csvFile%"
)
)
for %%f in (*.exr *.hdr) do (
for /f "tokens=1-4 delims=," %%a in ('magick identify -format "%%w,%%h,%%b,%%m" "%%~f" 2^>nul') do (
set "fmt=HDR"
if /i "%%~xf"==".exr" if !c!==16 set "fmt=EXR16"
if /i "%%~xf"==".hdr" if !c!==32 set "fmt=HDR32"
echo %%~f,!a!,!b!,!fmt!,!c!,!d! >> "%csvFile%"
)
)
echo Готово.
Looks solid overall, but a couple of fine‑tuning points:
- In the HDR block you set `fmt` to “HDR” before checking extensions – that’s fine, just keep it outside the loop so you don’t re‑set it each file unnecessarily.
- The `if /i "%%~xf"==".exr" if !c!==16 set "fmt=EXR16"` line works, but wrap each condition in parentheses for clarity and to avoid mis‑parsing on very long lines:
```
if /i "%%~xf"==".exr" (
if !c! equ 16 set "fmt=EXR16"
)
```
- Consider adding a column for the file extension; it makes downstream filtering in the database quicker.
- If `magick identify` fails (corrupt or unsupported), your script silently skips the file. Add a check like `if errorlevel 1 echo %%~f skipped >> "%csvFile%"`.
- Finally, if you’ll feed this CSV into a tool that expects Windows line endings, make sure to use `> "%csvFile%"` instead of `>>` for the header write so you don’t get double‑CRLF.
Other than that, it’s ready for batch‑running and will give you the clean, annotated list I need. Happy scanning.