Skip to content

shikimori/preview-generator

Repository files navigation

Генератор превью для Shikimori

Демо

Демо

pypi Tests

Описание

anime-pgen представляет собой cli-утилиту для генерации превью-изображений по данным Шикимори (скачивание данных включено в функциональность). В качестве фреймворка для организации cli интерфейса используется Typer

Требования и установка

  • Python ^3.9
  • pip, или, poetry или любой другой пакетный менеджер для Python
  • Приложение на Shikimori (для работы необходимо иметь APPLICATION_NAME)

Установка:

$> pip install anime-pgen

[Опционально] Подсказки для терминала:

$> pgen --install-completion

Использование

  1. Понадобится создать папку для конфигов и контента
$> mkdir previews && cd previews
  1. Далее нужно добавить конфиг-файл. Его можно взять в репозитории. Имя файла: config.yaml
$> cp config.example.yaml config.yaml
$> l
total 16
drwxr-xr-x   4 user  staff   128B Jun 28 19:48 .
drwxr-xr-x  23 user  staff   736B Jun 28 19:43 ..
-rw-r--r--   1 user  staff   1.1K Jun 28 19:48 config.yaml
  1. Для удобства создадим папку content - в ней разместим шрифты и иконки
$> mkdir content
$> l
total 16
drwxr-xr-x   5 user  staff   160B Jun 28 19:52 .
drwxr-xr-x  23 user  staff   736B Jun 28 19:49 ..
-rw-r--r--   1 user  staff   1.1K Jun 28 19:48 config.yaml
drwxr-xr-x   2 user  staff    64B Jun 28 19:52 content
  1. В новосозданную папку content можно сразу перенести из репозитория двусоставное лого Шикимори, иконку рейтинга и заполнение заднего фона (или можно использовать свои)
$> cp shikimori-glyph.png content/shikimori-glyph.png
$> cp shikimori-logo.png content/shikimori-logo.png
$> cp star.png content/star.png
$> cp tile.png content/tile.png
$> tree -a
.
└── previews
    ├── config.yaml
    └── content
        ├── shikimori-glyph.png
        ├── shikimori-logo.png
        ├── star.png
        └── tile.png
  1. В content так же нужно положить шрифты. Для Шикимори используются:
    • 🔗 OpenSans для заголовка и описания
    • 🔗 Tahoma для рейтинга
    • 🔗 NotoSerif_JP для Японских иероглифов

Финально папка previews выглядит примерно так:

$> tree -a -L 4
.
└── previews
    ├── config.yaml
    └── content
        ├── Noto_Serif_JP
        │   ├── NotoSerifJP-Black.otf
        │   ├── NotoSerifJP-Bold.otf
        │   ├── NotoSerifJP-ExtraLight.otf
        │   ├── NotoSerifJP-Light.otf
        │   ├── NotoSerifJP-Medium.otf
        │   ├── NotoSerifJP-Regular.otf
        │   ├── NotoSerifJP-SemiBold.otf
        │   └── OFL.txt
        ├── Open_Sans
        │   ├── LICENSE.txt
        │   ├── OpenSans-Italic-VariableFont_wdth,wght.ttf
        │   ├── OpenSans-VariableFont_wdth,wght.ttf
        │   ├── README.txt
        │   └── static
        ├── Tahoma
        │   ├── COPYRIGHT.txt
        │   └── tahoma.ttf
        ├── shikimori-glyph.png
        ├── shikimori-logo.png
        ├── star.png
        └── tile.png

config.yaml

Рассмотрим конфигурационный файл. По дефолту он выглядит так:

size: 'big'

colors:
  background: '#ffffff'
  text: '#343434'
  year: '#555555' 

  rating:
    active: '#4c86c8'
    regular: '#cccccc'

content:
  images: 
    background_tile: content/tile.png 
    star: content/star.png 
    logo: 
      glyph: content/shikimori-glyph.png
      text: content/shikimori-logo.png
  fonts: 
    text: content/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf
    bold_text: content/Open_Sans/static/OpenSans/OpenSans-Bold.ttf
    numbers: content/Tahoma/tahoma.ttf
    japanese: content/Noto_Serif_JP/NotoSerifJP-Bold.otf 

size: 'big'

Возможные значения:

  • big = 1200 x 630 (значение по умолчанию)
  • small = 600 x 315

Это размер финального изображения. Цифры являются рекоммендацией к формату превью от Facebook/Twitter/Вконтакте.


rating:
    active: '#4c86c8'
    regular: '#cccccc'

Цвета звёздочек рейтинга - активных и плейсхолдеров. В конфиге представлены их дефолтные значения.


colors:
  background: '#ffffff'
  text: '#343434'
  year: '#555555' 

Цвета:

  • Подложки (background)
  • Всего текса (text)
  • Года выпуска (year)

В конфиге представлены их дефолтные значения.


Важно!

colors и size - опциональны. В случае, если они не указаны в файле - будут использовать дефолтные значения (которые совпадают с дефолтным конфигом)

content - обязательные поля

Важно2! Для картинок нельзя использовать .svg, только .jpeg|.jpg|.png (ограничение библиотеки)


content:
  images: 
    background_tile: content/tile.png 

Путь до файла с тайлом для заднего фона. Например, дефолтный для Шикимори:

Tile

Рекоммендации:

  • Квадратный (иначе сплющится)
  • Бесшовный
  • .png с альфа-каналом, если хочется красивого наложения на белый фон

content:
  images: 
    star: content/star.png 

Путь до файла со звездой рейтинга.

Требования:

  • Прозрачный фон
  • Фигура чёрного цвета
  • Квадрат

При накладывании на превью чёрный цвет перекрашивается в rating.active или rating.regular


logo: 
      glyph: content/shikimori-glyph.png
      text: content/shikimori-logo.png

Двусоставное лого Шикимори - Иероглиф + "SHIKIMORI"

Требования:

  • Одинаковая высота
  • .png с альфа-каналом

fonts: 
    text: content/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf
    bold_text: content/Open_Sans/static/OpenSans/OpenSans-Bold.ttf
    numbers: content/Tahoma/tahoma.ttf
    japanese: content/Noto_Serif_JP/NotoSerifJP-Bold.otf 

Путь до шрифтов:

  • text - описание и подписи
  • bold_text - название
  • number - рейтинг и год
  • japanese - для Иероглифов, Хираганы и Катаканы

Требования:

  • TrueType шрифты

Использование

  • Подробная документация по cli-интерфейсу: DOCS.md
  • Пример использования: Makefile

Использование состоит из двух частей:

  1. Скачиваем данные из API-Шикимори по id аниме или манги
  2. Генерируем превью по данным

Скачаем информацию об аниме "Ковбой Бибоп":

$> pgen fetch 1 --app-name <APPLICATION_NAME_из_Шикимори>
Successfully saved to .pgen.json

$> l
total 40
drwxr-xr-x  6 vladimirlevin  staff   192B Jun 28 20:36 .
drwxr-xr-x  3 vladimirlevin  staff    96B Jun 28 19:56 ..
-rw-r--r--  1 vladimirlevin  staff   9.2K Jun 28 20:36 .pgen.json
-rw-r--r--  1 vladimirlevin  staff   1.1K Jun 28 19:48 config.yaml
drwxr-xr-x  9 vladimirlevin  staff   288B Jun 28 20:03 content

По умолчанию данные сохраняются в .pgen.json, путь можно изменить, передав флаг --save-path 'my_file.json'

$> pgen fetch 1 --app-name <APPLICATION_NAME_из_Шикимори> --save-path "my_file.json"
Successfully saved to my_file.json

Переходим к генерации:

$>pgen make-preview .pgen.json \
	--output-folder "." \
    --config "config.yaml" \
    --app-name <APPLICATION_NAME_из_Шикимори>

Successfully create previews:
         - 1.jpg

Готово! 🥳

FAQ

Q: Как разметить много за раз?
A: С флагом -M можно за раз скачать и разметить много Аниме/Манги:

$> pgen fetch -M "1,5,8" --app-name <APPLICATION_NAME_из_Шикимори>
Successfully saved to .pgen.json

$> pgen make-preview .pgen.json --output-folder "." --config "config.yaml" --app-name <APPLICATION_NAME_из_Шикимори>
Successfully create previews:
         - 1.jpg
         - 5.jpg
         - 8.jpg

Q: Как разметить мангу?
A: С помощью флага -m можно скачать Мангу. Создание превью опирается на данные, поэтому во второй команде ничего не потребуется менять

$> pgen fetch -mM "1,8" --app-name <APPLICATION_NAME_из_Шикимори>
Successfully saved to .pgen.json

$> pgen make-preview .pgen.json --output-folder "." --config "config.yaml" --app-name <APPLICATION_NAME_из_Шикимори>
Successfully create previews:
         - 1.jpg
         - 8.jpg