PHPackages                             microwin7/texture-provider - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. microwin7/texture-provider

ActiveProject

microwin7/texture-provider
==========================

Предосталяет реализацию GravitLauncher TextureProvider и TextureLoader JSON

v5.6.10.1(1y ago)8672GPL-3.0-or-laterPHPPHP ^8.3CI passing

Since Oct 25Pushed 4mo ago2 watchersCompare

[ Source](https://github.com/microwin7/GravitLauncher-TextureProvider)[ Packagist](https://packagist.org/packages/microwin7/texture-provider)[ RSS](/packages/microwin7-texture-provider/feed)WikiDiscussions new Synced 1mo ago

READMEChangelog (10)Dependencies (9)Versions (23)Used By (0)

GravitLauncher-TextureProvider (JSON)
=====================================

[](#gravitlauncher-textureprovider-json)

[![PHP 8.3+](https://camo.githubusercontent.com/edd3dc0d6750f3779354a38e7c68c0a66041d8fceec52639d1080235cf40f73e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e332b2d626c7565)](https://camo.githubusercontent.com/edd3dc0d6750f3779354a38e7c68c0a66041d8fceec52639d1080235cf40f73e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e332b2d626c7565)[![Gravit Launcher](https://camo.githubusercontent.com/e0d23e92b01b24c3f2932c843534ac8581038990f073d82eacc4b9a91bdd3e9f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4772617669742532304c61756e636865722d76352e322e392b2d627269676874677265656e)](https://camo.githubusercontent.com/e0d23e92b01b24c3f2932c843534ac8581038990f073d82eacc4b9a91bdd3e9f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4772617669742532304c61756e636865722d76352e322e392b2d627269676874677265656e)

✔ Выдача по USERNAME, UUID, (id пользователя, хеша sha1 и sha256) из БД.

✔ Поддеркжа выдачи из файловой системы, либо по USERNAME с Mojang

✔ Возможность выдавать рандомный скин пользователям, которые ещё не установили его сами

✔ Выдача скина и плаща по умолчанию, если не обнаружен в файловой системе, Mojang и выключено получение скина из рандомной коллекции скинов

✔ Работает с любыми общепринятыми размерами скинов и плащей

✔ Автоматическое обнаружение SLIM типов скинов (тонкие руки)

✔ Встроенный TextureLoader

 [![demo](https://camo.githubusercontent.com/a9189956866c8f1d356e6cf409c16a29e67e42552cd8e6f519ffaf2518c26f0f/68747470733a2f2f692e696d6775722e636f6d2f71306e6b4b4e6a2e706e67)](https://camo.githubusercontent.com/a9189956866c8f1d356e6cf409c16a29e67e42552cd8e6f519ffaf2518c26f0f/68747470733a2f2f692e696d6775722e636f6d2f71306e6b4b4e6a2e706e67)

Поддерживаемые методы
=====================

[](#поддерживаемые-методы)

- **`normal`** Отдаёт только из файловой системы, рандомной коллекции скинов (если оное включено), скинов и плащей по умолчанию.
- **`mojang`** Отдаёт текстуры с Mojang
    - Использование в вызове скрипта: **`&method=mojang`**
- **`hybrid`** = **`normal`** + **`mojang`**
    - Использование в вызове скрипта: **`&method=hybrid`**
- **ОБЩЕЕ**
    - Отдача скинов из рандомной коллекции, при отсутствии установленных пользователями. Если включено
    - Отдача скинов и плащей по умолчанию. Если включено

Требования
==========

[](#требования)

- GravitLauncher 5.2.9+
- Консольный доступ SSH к хостингу. Для развёртывания библиотек
- Поддержка Docker (поддерживается всем современным железом, включая примерно архитектуры с 2007-2008 года)

Установка
=========

[](#установка)

Установка в Docker контейнер:
-----------------------------

[](#установка-в-docker-контейнер)

[![Docker](https://camo.githubusercontent.com/3bfe784ac50e57d22aaea428819104a495bc4e262414d4e2af627b3b4bba1e9d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f636b65722d3234393645443f7374796c653d666f722d7468652d6261646765266c6f676f3d646f636b6572266c6f676f436f6c6f723d323439364544266c6162656c3d254431253833254431253831254431253832254430254230254430254244254430254245254430254232254430254241254430254230253230254430254238253230254430254244254430254230254431253831254431253832254431253830254430254245254430254239254430254241254430254230253230254431253831253230254430254246254430254245254430254243254430254245254431253839254431253843254431253845266c6162656c436f6c6f723d7768697465)](https://camo.githubusercontent.com/3bfe784ac50e57d22aaea428819104a495bc4e262414d4e2af627b3b4bba1e9d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f636b65722d3234393645443f7374796c653d666f722d7468652d6261646765266c6f676f3d646f636b6572266c6f676f436f6c6f723d323439364544266c6162656c3d254431253833254431253831254431253832254430254230254430254244254430254245254430254232254430254241254430254230253230254430254238253230254430254244254430254230254431253831254431253832254431253830254430254245254430254239254430254241254430254230253230254431253831253230254430254246254430254245254430254243254430254245254431253839254431253843254431253845266c6162656c436f6c6f723d7768697465)

- Является более оптимальным вариантом установки, так как все модули и сам php будет установлен в изолированных контейнерах

### Предварительная настройка | Установка Docker

[](#предварительная-настройка--установка-docker)

[![Docker](https://camo.githubusercontent.com/96918c11b0a3702a65f2536a792c2d97acfa87f5de22b928a12c3910e9598136/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f636b65722d3234393645443f7374796c653d666f722d7468652d6261646765266c6f676f3d646f636b6572266c6f676f436f6c6f723d323439364544266c6162656c3d254431253833254431253831254431253832254430254230254430254244254430254245254430254232254430254241254430254230266c6162656c436f6c6f723d7768697465)](https://camo.githubusercontent.com/96918c11b0a3702a65f2536a792c2d97acfa87f5de22b928a12c3910e9598136/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f636b65722d3234393645443f7374796c653d666f722d7468652d6261646765266c6f676f3d646f636b6572266c6f676f436f6c6f723d323439364544266c6162656c3d254431253833254431253831254431253832254430254230254430254244254430254245254430254232254430254241254430254230266c6162656c436f6c6f723d7768697465)

- Выполнение команд от sudo (Перейти в root, если является пользователем не по умолчанию):

```
sudo -s
```

- Установка Docker'a
    - Если у вас есть ошибки apt update с репозиториями - то скрипт работать не будет

```
curl -sSL https://get.docker.com/ | CHANNEL=stable bash
```

[![Git](https://camo.githubusercontent.com/69445fb200fde8c7496e750f11d578ec1aec31e502dc0e9c17aafbe85ac225ab/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6769742d4630353033323f7374796c653d666f722d7468652d6261646765266c6f676f3d676974687562266c6f676f436f6c6f723d313831373137266c6162656c3d254430253941254430254242254430254245254430254244254430254238254431253830254430254245254430254232254430254230254430254244254430254238254430254235253230254431253830254430254235254430254246254430254245254430254237254430254238254431253832254430254245254431253830254430254238254431253846266c6162656c436f6c6f723d7768697465)](https://camo.githubusercontent.com/69445fb200fde8c7496e750f11d578ec1aec31e502dc0e9c17aafbe85ac225ab/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6769742d4630353033323f7374796c653d666f722d7468652d6261646765266c6f676f3d676974687562266c6f676f436f6c6f723d313831373137266c6162656c3d254430253941254430254242254430254245254430254244254430254238254431253830254430254245254430254232254430254230254430254244254430254238254430254235253230254431253830254430254235254430254246254430254245254430254237254430254238254431253832254430254245254431253830254430254238254431253846266c6162656c436f6c6f723d7768697465)

### Выбираем где будет располагаться скрипт, лучше всего вне сайта. И устанавливаем texture-provider

[](#выбираем-где-будет-располагаться-скрипт-лучше-всего-вне-сайта-и-устанавливаем-texture-provider)

```
git clone --branch new https://github.com/microwin7/GravitLauncher-TextureProvider.git texture-provider
```

```
cd texture-provider
```

[![Docker](https://camo.githubusercontent.com/f9d75ecfa6be70d11fe23ca4ca000b3d30b7ec3b77a1989ddf5a4a12fb3a5801/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f636b65722d3234393645443f7374796c653d666f722d7468652d6261646765266c6f676f3d646f636b6572266c6f676f436f6c6f723d323439364544266c6162656c3d254430253938254430254244254430254238254431253836254430254238254430254230254430254242254430254238254430254237254430254230254431253836254430254238254431253846253230254430254241254430254245254430254244254431253832254430254235254430254239254430254244254430254235254431253830254430254245254430254232266c6162656c436f6c6f723d7768697465)](https://camo.githubusercontent.com/f9d75ecfa6be70d11fe23ca4ca000b3d30b7ec3b77a1989ddf5a4a12fb3a5801/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f636b65722d3234393645443f7374796c653d666f722d7468652d6261646765266c6f676f3d646f636b6572266c6f676f436f6c6f723d323439364544266c6162656c3d254430253938254430254244254430254238254431253836254430254238254430254230254430254242254430254238254430254237254430254230254431253836254430254238254431253846253230254430254241254430254245254430254244254431253832254430254235254430254239254430254244254430254235254431253830254430254245254430254232266c6162656c436f6c6f723d7768697465)

### Скачивание слоёв, компиляция и запуск контейнеров php-fpm и nginx:

[](#скачивание-слоёв-компиляция-и-запуск-контейнеров-php-fpm-и-nginx)

```
docker compose up -d --build
```

### Остановка контейнеров:

[](#остановка-контейнеров)

```
docker compose stop
```

### Запуск контейнеров / Перезапуск (если изменился файл docker-compose.yml):

[](#запуск-контейнеров--перезапуск-если-изменился-файл-docker-composeyml)

```
docker compose up -d
```

### [![NGINX](https://camo.githubusercontent.com/3c1f0634533bfdff886f375a728f782df60862cfdf8c95e19c67d67a2c025d7a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e47494e582d3030393633393f7374796c653d666f722d7468652d6261646765266c6f676f3d6e67696e78266c6f676f436f6c6f723d303039363339266c6162656c3d254430253944254430253930254430254131254430254132254430254130254430253945254430253939254430253941254430253930253230254430254232266c6162656c436f6c6f723d7768697465)](https://camo.githubusercontent.com/3c1f0634533bfdff886f375a728f782df60862cfdf8c95e19c67d67a2c025d7a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e47494e582d3030393633393f7374796c653d666f722d7468652d6261646765266c6f676f3d6e67696e78266c6f676f436f6c6f723d303039363339266c6162656c3d254430253944254430253930254430254131254430254132254430254130254430253945254430253939254430253941254430253930253230254430254232266c6162656c436f6c6f723d7768697465)

[](#)

#### Для установки на сайт:

[](#для-установки-на-сайт)

- Над разделом server {...}

```
upstream dockerTextureProvider {
    server 127.0.0.1:29300;
}
```

- А в разделе server {...}

```
    location /texture-provider/ {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Env-Vendor null;
        proxy_pass http://dockerTextureProvider/;
    }
```

- Изменить **APP\_URL** в `.env` - ссылка на домен

#### Для установки на под-домен:

[](#для-установки-на-под-домен)

- Пример **`/etc/nginx/conf.d/textures.conf`**:

```
upstream dockerTextureProvider {
    server 127.0.0.1:29300;
}
server {
    listen 80;
    server_name textures.ВАШ_ДОМЕН;
    charset utf-8;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Env-Vendor null;
        proxy_pass http://dockerTextureProvider/;
    }
}
```

- Изменить **ВАШ\_ДОМЕН**
- Изменить в `.env` домен и протокол `APP_URL=http://127.0.0.1/`
- Изменить в `.env` путь от корня `APP_URL` в `SCRIPT_PATH`

##### Настройка публичного ключа доступа для загрузки скинов и плащей из лаунчера:

[](#настройка-публичного-ключа-доступа-для-загрузки-скинов-и-плащей-из-лаунчера)

- Перейдите в папку лаунчсервера, далее в папку `.keys`. Она может быть скрыта
- Скопируйте себе на ПК файл `ecdsa_id.pub`
- Через сайт [**\[ base64.guru \]**](https://base64.guru/converter/encode/file) преобразуйте файл в строку Base64
- Изменить в `.env` `LAUNCH_SERVER_ECDSA256_PUBLIC_KEY_BASE64` строку

##### Настройка использования API загрузки, установите токен в условии обращения к /api

[](#настройка-использования-api-загрузки-установите-токен-в-условии-обращения-к-api)

- Изменить в `.env` `BEARER_TOKEN` и в конфиге лаунчсервера в разделе текстур провидера
- Пример использования API:
    - API загрузки скина: /api/upload/SKIN
    - API загрузки плаща: /api/upload/CAPE

```
curl -X POST http://127.0.0.1:29300/api/upload/SKIN \
-H "Authorization: Bearer BEARER_TOKEN" \
-F "username=microwin7" \
-F "uuid=36fdaf1d-c064-4d12-b1c6-ff0fd83636dd" \
-F "hd_allow=false" \
-F "file=@/tmp/phpJVBzIM"

```

- `BEARER_TOKEN` - заменить на указанный в `.env`
- Параметр `hd_allow` не обязательный, по умолчанию **true**, можно переобределить в `.env` установив `HD_TEXTURES_ALLOW=false`

##### Смена скина/плаща по умолчанию через API

[](#смена-скинаплаща-по-умолчанию-через-api)

- Выполнить запрос

```
curl -X POST http://127.0.0.1:29300/api/upload/SKIN \
-H "Authorization: Bearer BEARER_TOKEN" \
-F "username=DEFAULT" \
-F "uuid=00000000-0000-0000-0000-000000000000" \
-F "hd_allow=false" \
-F "file=@/путь/к/скину"

```

Пример заполненного запроса с моего компьютера на хост:

```
curl -X POST https://gravit-support.ru/texture-provider-dev/api/upload/SKIN \
-H "Authorization: Bearer ТОКЕН" \
-F "username=DEFAULT" \
-F "uuid=00000000-0000-0000-0000-000000000000" \
-F "hd_allow=false" \
-F "file=@microwin7.png"

```

- Из полученного ответа скопируйте содержимое digest подписи. Установите новые значения в **.env**

    - Пример значений по умолчанию:

    ```
    SKIN_DEFAULT_SHA256=98805f6ab41575b7ff4af11b70c074773c5bcc210f2429f6b5513150d746e4cd
    CAPE_DEFAULT_SHA256=f2072fdfff5302b7c13672e54fdc8895dc75b3f675be3a43245de6894f971e38

    ```

    - Перезагрузите контейнера. Выполнить в папке `texture-provider`:

    ```
    docker compose restart

    ```
- Подпись домена вы можете выполнить через [**\[ CertBot \]**](https://certbot.eff.org/)

#### Перезагрузить NGINX

[](#перезагрузить-nginx)

```
service nginx restart
```

НАСТРОЙКА СКРИПТА
=================

[](#настройка-скрипта)

Описание TextureStorageType's
-----------------------------

[](#описание-texturestoragetypes)

1. **STORAGE**

- Локальное файловое хранилище скинов и плащей
- Имеет 5 типов для определения имени хранимого файла, они же **StorageType**'s:
    - **USERNAME** - \[username.png\] DEPRECATED
        - Поиск происходит вне зависимости от регистра, если файл не будет найден
    - **UUID** - \[uuid.png\] DEPRECATED
    - **DB\_USER\_ID** - \[user\_id.png\] DEPRECATED
    - **DB\_SHA1** - \[sha1.png\] DEPRECATED
    - **DB\_SHA256** - \[sha256.png\] ПО УМОЛЧАНИЮ
- Текущий API работает с базой данных и хешами скинов и плащей, но на получение самих скинов и плащей для сайта, можно использовать в запросе ник или uuid
    - Пример:

    ```
    https://gravit-support.ru/texture-provider-dev/SKIN/microwin7

    ```

    ```
    https://gravit-support.ru/texture-provider-dev/SKIN/36fdaf1d-c064-4d12-b1c6-ff0fd83636dd

    ```

    ```
    https://gravit-support.ru/texture-provider-dev/CAPE/microwin7

    ```

    ```
    https://gravit-support.ru/texture-provider-dev/CAPE/36fdaf1d-c064-4d12-b1c6-ff0fd83636dd

    ```

    - При этом правильной ссылкой остаётся обращение всё же по установленной хеш-сумме к файлу и нагрузка на API меньше

2. **MOJANG**

- Поиск текстур в Mojang по **USERNAME**
- Для использования только этого типа хранения
    - В конце запроса добавьте **`&method=mojang`**
- Для использования этого типа хранения, вместе со всеми другими
    - В конце запроса добавьте **`&method=hybrid`**
    - Cперва будет поиск по локальному файловому хранилищу, потом Mojang

3. **COLLECTION**

- Выдава скина из коллекции рандомных скинов, созданную администратором.
- Последние 12 символов от UUID переводяться в DEC и деляться на количество скинов в коллекции
- после чего остаток и будет являться номером из коллекции.
- Включение хранилища в `.env`: **GIVE\_FROM\_COLLECTION=true**

4. **DEFAULT**

- Выдача скинов и плащей по умолчанию, если не найдены ни в локальном хранилище, ни в Mojang, ни в коллекции скинов.
- Включение в `.env`: **GIVE\_DEFAULT\_SKIN=true** и **GIVE\_DEFAULT\_CAPE=true**. По умолчанию скины отдаются всегда

Ссылка на скрипт
----------------

[](#ссылка-на-скрипт)

- Протокол и `ДОМЕН`/`IP` `.env` константа: **APP\_URL**
- Путь от корня домена `.env` константа: **SCRIPT\_PATH**. Сделайть пустой **SCRIPT\_PATH=** если используете под-домен

Хранилище текстур
-----------------

[](#хранилище-текстур)

- Хранилище от корня сайта в конфиге `.env`: **STORAGE\_DIR**. По умолчанию: storage

### Если у вас своя папка storage

[](#если-у-вас-своя-папка-storage)

- Удалите текущую папку storage

```
rm -rf storage
```

- Создайте ссылку на папку storage. ПРИМЕР для Azuriom:

```
ln -s /var/www/html/Azuriom_SITE/storage/app/public storage
```

- Пути от корня хранилища в конфиге `.env`: **TEXTURE\_{ТИП\_ТЕКСТУРЫ}\_PATH**. Примеры есть в `.env.example`

### Для включения поддержки версий 5.2.9-5.4.x

[](#для-включения-поддержки-версий-529-54x)

- Включите изменение хеша для старых версий в `.env`: **LEGACY\_DIGEST**

Настройка LaunchServer'a
------------------------

[](#настройка-launchservera)

### При использовании в сайте:

[](#при-использовании-в-сайте)

```
      "textureProvider": {
        "url": "https://example.com/texture-provider/%username%/%uuid%",
        "bearerToken": null,
        "type": "json"
      },
      "mixes": {
        "textureLoader": {
          "urls": {
            "SKIN": "https://example.com/texture-provider/upload/SKIN",
            "CAPE": "https://example.com/texture-provider/upload/CAPE"
          },
          "slimSupportConf": "SERVER",
          "type": "uploadAsset"
        }
      },
```

### При использовании на под-домене:

[](#при-использовании-на-под-домене)

```
      "textureProvider": {
        "url": "https://textures.example.com/%username%/%uuid%",
        "bearerToken": null,
        "type": "json"
      },
      "mixes": {
        "textureLoader": {
          "urls": {
            "SKIN": "https://textures.example.com/upload/SKIN",
            "CAPE": "https://textures.example.com/upload/CAPE"
          },
          "slimSupportConf": "SERVER",
          "type": "uploadAsset"
        }
      },
```

Настройка публичного ключа доступа для загрузки скинов и плащей из лаунчера:
----------------------------------------------------------------------------

[](#настройка-публичного-ключа-доступа-для-загрузки-скинов-и-плащей-из-лаунчера-1)

- Перейдите в папку лаунчсервера, далее в папку `.keys`. Она может быть скрыта
- Скопируйте себе на ПК файл `ecdsa_id.pub`
- Через сайт [**\[ base64.guru \]**](https://base64.guru/converter/encode/file) преобразуйте файл в строку Base64
- В файле `.env` в корне текстур провидера, выставите переменную, по примеру:

```
LAUNCH_SERVER_ECDSA256_PUBLIC_KEY_BASE64=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJDi51DKs5f6ERSrDDjns00BkI963L9OS9wLA2Ak/nACZCgQma+FsTsbYtZQm4nk+rtabM8b9JgzSi3sPINb8fg==
```

Описание глобальных переменных для настройки скрипта
====================================================

[](#описание-глобальных-переменных-для-настройки-скрипта)

- Все доступные параметры находятся в `.env.example` - файл пример, с значениями по умолчанию в текстур провидере и библиотеке. За исключением:
    - `config/php-utils/^1.8.0/MainConfig.php` в котором осталась:
        - Настройка таблиц с именами столбцов (Не требуется изменять для текстур провидера в **Docker**)
        - Настройка списка серверов (Не требуется изменять для текстур провидера)
        - Настройка параметров подключения к бд (Не требуется изменять для текстур провидера)
    - P.S. При использовании Docker, после изменений конфигов, помимо `.env` выполните `up -d --build` снова

```
## Global Settings
APP_URL=https://gravit-support.ru/ - Ссылка на сайт
ROOT_FOLDER=/var/www/html - Указания корня сайта/корня текстур провидера
SCRIPT_PATH=texture-provider - Указание URL location для ссылок при генерации JSON для лаунчсервера(лаунчера)
## DataBase Settings
DB_HOST=localhost - Хост базы данных (БД)
DB_NAME=test - Имя базы данных
DB_USER=test - Имя пользователя для подключения к БД
DB_PASS=test - Имя пользователя для подключения к БД
# 0-65535 - допустимые порты
DB_PORT=3306 - Порт для подключения к БД
# mysql/pgsql
DB_SUD_DB=mysql - Тип драйвера для работы с БД
DB_PREFIX_SERVERS=server_ - Префикс для баз данных серверов (Не используется для текстур провидера)
DB_DEBUG=true - Включение записи логов запросов и ошибок, которые вызываются в скрипте и поступают в БД
# Logs SQL and Errors
DB_LOG_FOLDER=/var/www/db_logs - Путь для хранения логов

## DataBase Modules DB_NAME_MODULE && DB_TABLE_PREFIX_MODULE (Настройка имени базы данных для подключения модулей и их префиксов)
DB_NAME_MODULE_TEXTURE_PROVIDER=texture-provider
DB_NAME_MODULE_ITEM_SHOP=ItemShop
DB_NAME_MODULE_VOTE_REWARDS=VoteRewards
DB_NAME_MODULE_LUCK_PERMS=LuckPerms
DB_TABLE_PREFIX_MODULE_LUCK_PERMS=luckperms_
DB_NAME_MODULE_LITE_BANS=LiteBans
DB_TABLE_PREFIX_MODULE_LITE_BANS=litebans_

BEARER_TOKEN=null - Токен доступа для ограничения запросов (Выключено)
PRIVATE_API_KEY= - Похожее что и выше (Не используется для текстур провидера)

## SENTRY Settings
SENTRY_ENABLE=true
SENTRY_DSN=https://dce66e1d574a0066589421bda5c36b2f@o484368.ingest.us.sentry.io/4506491534573568

LAUNCH_SERVER_ECDSA256_PUBLIC_KEY_BASE64=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJDi51DKs5f6ERSrDDjns00BkI963L9OS9wLA2Ak/nACZCgQma+FsTsbYtZQm4nk+rtabM8b9JgzSi3sPINb8fg==

## ItemShop - Для модуля на сайт DLE (Не используется для текстур провидера)
SITE_TEMPLATES_FOLDER=templates/имя_шаблона
ITEM_SHOP_PATH_IN_TEMPLATES=images/item_shop

## Storage Textures - Настройка Хранилища для текстур провидера
STORAGE_DIR=storage
# SKIN|CAPE|AVATAR|FRONT|FRONT_CAPE|FRONT_WITH_CAPE|BACK|
# BACK_CAPE|BACK_WITH_CAPE|CAPE_RESIZE|MOJANG|COLLECTION
TEXTURE_SKIN_PATH=skins
TEXTURE_CAPE_PATH=capes
TEXTURE_AVATAR_PATH=avatars
TEXTURE_FRONT_PATH=fronts
TEXTURE_FRONT_CAPE_PATH=front_capes
TEXTURE_FRONT_WITH_CAPE_PATH=front_with_capes
TEXTURE_BACK_PATH=backs
TEXTURE_BACK_CAPE_PATH=back_capes
TEXTURE_BACK_WITH_CAPE_PATH=back_with_capes
TEXTURE_CAPE_RESIZE_PATH=cape_resizes
TEXTURE_MOJANG_PATH=mojang
TEXTURE_COLLECTION_PATH=collection
# .png
TEXTURE_EXTENSTION=png - Расширения для хранимых файлов

LEGACY_DIGEST=false - Подпись хеш-сумма файлов, старого образца с версии 5.2.9 до 5.4.x
MAX_SIZE_BYTES=2M - Максимальный размер загружаемого файла, так же изменить в nginx и php-fpm контейнере, если используете Docker. В папке config/
SKIN_SIZE=64,64|64,32 - доступные размеры для загрузки обычный скинов. Настройка размеров скинов и плащей (4 строки). Ширина на высоту, через запятую и | для перечисления
CAPE_SIZE=64,32 - доступные размеры для загрузки обычный плащей
SKIN_SIZE_HD=128,64|128,128|256,128|256,256|512,256|512,512|1024,512|1024,1024 - доступные размеры для загрузки HD скинов
CAPE_SIZE_HD=128,64|256,128|512,256|1024,512 - доступные размеры для загрузки HD плащей
SKIN_DEFAULT_SHA256=98805f6ab41575b7ff4af11b70c074773c5bcc210f2429f6b5513150d746e4cd - SHA256 хеш-сумма скина
CAPE_DEFAULT_SHA256=f2072fdfff5302b7c13672e54fdc8895dc75b3f675be3a43245de6894f971e38 - SHA256 хеш-сумма плаща

## Texture-Provider - Настройки провидера (Описание можно найти в файле src/Config.php)
ROUTERING=true
MINIMIZE_ENUM_REQUEST=false
# null|80-512 Default: 128px
AVATAR_CANVAS=null
# USERNAME - [username.png]
# UUID - [uuid.png]
# DB_USER_ID - [user_id.png] работает только с связью с БД
# DB_SHA1 - [sha1.png] работает только с связью с БД
# DB_SHA256 - [sha256.png] работает только с связью с БД
USER_STORAGE_TYPE=UUID
GIVE_FROM_COLLECTION=false
TRY_REGENERATE_CACHE=true
GIVE_DEFAULT_SKIN=true
GIVE_DEFAULT_CAPE=false
SKIN_RESIZE=true
### Texture-Provider Loader
HD_TEXTURES_ALLOW=true
LUCKPERMS_USE_PERMISSION_HD_SKIN=false
# Min 0
LUCKPERMS_MIN_WEIGHT=10
### Texture-Provider Returner
BLOCK_CANVAS=128
CAPE_CANVAS=16
BOUND_WIDTH_CANVAS=512
# Min 10 sec
IMAGE_CACHE_TIME=null
```

ПРОЧЕЕ...
=========

[](#прочее)

### Удаление чересстрочной развёртки. И сжатие

[](#удаление-чересстрочной-развёртки-и-сжатие)

Предупреждения:

- (Эти предупреждения связаны с библиотекой libpng, которая используется для работы с изображениями в формате PNG)

1. `libpng warning: Interlace handling should be turned on when using png_read_image` - Это предупреждение говорит о том, что вам следует включить межстрочное сканирование (interlace) при использовании функции `png_read_image`. Межстрочное сканирование позволяет пошагово загружать изображение, что может быть полезным для оптимизации процесса отображения.

Способ починить:

```
apt install optipng
```

- Команды приведены от самой долгой по обратоке к самой быстрой
- Вызывать в папке с скинами или плащами

```
find . -type f -iname '*.png' -exec optipng -i0 -o7 -zm1-9 {} \;
find . -type f -iname '*.png' -exec optipng -i0 -o1 -zm1-9 {} \;
find . -type f -iname '*.png' -exec optipng -i0 -o1 {} \;
```

### Починка профиля изображения

[](#починка-профиля-изображения)

Предупреждения:

- (Эти предупреждения связаны с библиотекой libpng, которая используется для работы с изображениями в формате PNG)

1. `libpng warning: iCCP: known incorrect sRGB profile` - Это предупреждение указывает на то, что профиль цвета sRGB в изображении не соответствует ожидаемому или считается некорректным. Возможно, изображение содержит нестандартный профиль цвета, и это может повлиять на отображение цветов.
2. `libpng warning: iCCP: cHRM chunk does not match sRGB` - Это предупреждение также связано с профилем цвета и указывает на то, что информация о цветовом пространстве (cHRM chunk) не соответствует ожидаемому для sRGB. Это может также привести к неправильному отображению цветов.

Способ починить:

```
apt install pngcrush
```

- Вызывать в папке с скинами или плащами

```
find . -type f -iname '*.png' -exec pngcrush -ow -rem allb -reduce {} \;
```

Инструкции по использованию API
===============================

[](#инструкции-по-использованию-api)

Laravel Framework. Example: \[ Azuriom | DreamCMS \]
----------------------------------------------------

[](#laravel-framework-example--azuriom--dreamcms-)

- Добавление роута в `routes/api.php`
- Файл передаётся через ключ `file`
- Тип загружаемой текстуры передаётся через ключ `type` и должен содержать либо **`SKIN`** либо **`CAPE`**
- Для управления загрузкой **HD** скинов и плащей, используйте ключ `hd_allow` в формате: **`false|true|1|0`**
    - В **`.env`** выключите **HD\_TEXTURES\_ALLOW**

### Справка:

[](#справка)

- Используется `Content-Type` - `multipart/form-data`
- CMS обрабатывает пользователя, а отправлять на API нужно `username` и `uuid` уже с проверенных данных из entity User
    - Laravel использует `interface \Illuminate\Contracts\Auth\Authenticatable`
    - Ваша модель пользователя должна соджержать `username` и `uuid`
    - В случае с Azuriom - `uuid` заменяется `$user->uuid` на `$user->game_id`

### Пример кода:

[](#пример-кода)

```
Route::prefix('skins')->middleware('auth')->group(function () {
    // Маршрут для upload с перенаправлением на API TextureProvider'a
    Route::post('upload', function () {
        $user = Auth::user();
        $link = env('TEXTURE_PROVIDER_URL') . '/api/upload/' . strtoupper(request()->get('type'));
        // Перенаправляем запрос на API TextureProvider'a, передавая все данные и добавляя Bearer токен в заголовки
        $response = Http::withToken(env('TEXTURE_PROVIDER_BEARER_TOKEN'))
            ->attach('file', file_get_contents(request()
                ->file('file')), 'texture.png')
            ->asMultipart()
            ->post(
                $link,
                [
                    'username' => $user->login,
                    'uuid' => $user->uuid
                ]
            );
        // Возвращаем ответ от стороннего API
        return Response::json($response->successful() ? array_merge(
            $response->json(),
            [
                'success' => true,
                'message' => 'Загрузка успешна'
            ]
        ) : [
            'success' => false,
            'message' => $response->json()['error']
        ], $response->status());
    });
});
```

### Настройка файла `.env` в CMS

[](#настройка-файла-env-в-cms)

```
TEXTURE_PROVIDER_URL=http://127.0.0.1/
TEXTURE_PROVIDER_BEARER_TOKEN=ТОКЕН (texture-provider/.env BEARER_TOKEN=ТОКЕН)

```

...БУДЕТ ДОПОЛНЕНО...
---------------------

[](#будет-дополнено)

- Предположительно команда для использования на PRODUCTION, будет проверяться
    - Оптимизирует импорты и кеширует классы автозагрузчика, если включен OpCache composer install -n -v -o -a --no-dev

###  Health Score

42

—

FairBetter than 90% of packages

Maintenance61

Regular maintenance activity

Popularity16

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity67

Established project with proven stability

 Bus Factor1

Top contributor holds 98.4% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~24 days

Recently: every ~64 days

Total

22

Last Release

416d ago

PHP version history (2 changes)v5.5.0.0PHP ^8.2

v5.5.3.0PHP ^8.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/05d04a9a323501bc4f6108b841679428d1ea31cba352f4ffc234158bc4dac3b1?d=identicon)[microwin7](/maintainers/microwin7)

---

Top Contributors

[![microwin7](https://avatars.githubusercontent.com/u/12544425?v=4)](https://github.com/microwin7 "microwin7 (120 commits)")[![AlexCatze](https://avatars.githubusercontent.com/u/28355814?v=4)](https://github.com/AlexCatze "AlexCatze (1 commits)")[![radioegor146](https://avatars.githubusercontent.com/u/16443338?v=4)](https://github.com/radioegor146 "radioegor146 (1 commits)")

---

Tags

minecraftphp

###  Code Quality

Static AnalysisPsalm

Type Coverage Yes

### Embed Badge

![Health badge](/badges/microwin7-texture-provider/health.svg)

```
[![Health](https://phpackages.com/badges/microwin7-texture-provider/health.svg)](https://phpackages.com/packages/microwin7-texture-provider)
```

###  Alternatives

[laravel/framework

The Laravel Framework.

34.6k509.9M17.0k](/packages/laravel-framework)[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M650](/packages/sylius-sylius)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[drupal/core

Drupal is an open source content management platform powering millions of websites and applications.

19462.3M1.3k](/packages/drupal-core)[laravel/nightwatch

The official Laravel Nightwatch package.

3486.1M13](/packages/laravel-nightwatch)[drupal/core-recommended

Locked core dependencies; require this project INSTEAD OF drupal/core.

6939.5M343](/packages/drupal-core-recommended)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
