Я решил сделать уникальную колоду карт Таро. Заказывать их у фриланс-художников дорого: каждая карта стоит от 5 USD, так что для полной колоды из 78 карт это выходит 390 USD. Перебрав разные генераторы изображений, я остановился на модели GPT-Image-1 от OpenAI, поскольку она выдаёт максимальное качество и минимальный процент ошибок. В среднем генерация одной карты занимает около минуты. Создание одной колоды обошлось мне в 25 USD. В итоге я сгенерировал три колоды с уникальными стилями и потратил на это в общей сложности 75 USD.

Результат можно посмотреть здесь.

Опишу процесс создания Python скрипта для генерации карт Таро. Сначала я описал все карты таро вот в таком массиве:

CARDS = [
  {
    "number": 0,
    "name": "The Fool",
    "description": "A youth with a knapsack on a staff stepping at the edge of a cliff, with a small dog beside him",
    "meaning": "The beginning of a journey, spontaneity, freedom"
  },
  {
    "number": 1,
    "name": "The Magician",
    "description": "A figure stands behind a table with symbols of the four elements, staff raised upwards",
    "meaning": "Willpower, skill, manifestation of power"
  },
  {
    "number": 2,
    "name": "The High Priestess",
    "description": "A woman sits between two pillars with a book on her lap, a crescent at her feet",
    "meaning": "Intuition, hidden knowledge, sacred wisdom"
  },
  ...
]

Далее написал функцию, которая вызывает OpenAI API для генерации изображения и сохраняет картинку на диск:

def generate_and_save(prompt: str, filepath: str):
  if os.path.exists(filepath):
    print(f"File already exists: {filepath}")
    return
  img = client.images.generate(
    model=model,
    prompt=prompt,
    n=1,
    size="1024x1536",
    quality=quality
  )
  image_bytes = base64.b64decode(img.data[0].b64_json)
  with open(filepath, "wb") as f:
    f.write(image_bytes)
    print(f"Created: {filepath}")

Для генерации картинки я использовал prompt в виде строки который передавал в OpenAI API, гдеstyle — описание стиля карты:

    "number": {card["number"]},
    "name": "{card["name"]}",
    "description": "{card["description"]}",
    "meaning": "{card["meaning"]}"

    Background: Light
    Write the card name: bottom center.
    Write the card number: top center only for major arcana

    Draw this tarot card in style: {style}  

Вот примеры style:

  • Anime realistic style

  • Anime futuristic style

  • Digital painting in modern realistic style, modernity 2025, white skin, luxury, professional makeup. Natural lighting, with soft painterly textures, office places

Потом написал цикл который перебирает карты в массиве CARDS и для каждой карты генерирует картинку и сохраняет на диск. В цикле я проверяю не существует ли картинка на диске и если да то пропускаю ее, иначе генерирую картинку и сохраняю на диск.

i = 0
for card in CARDS:
    filepath = os.path.join(output_dir, f"{i}.png")

    if os.path.exists(filepath):
        print(f"File already exists: {filepath}")
        i += 1
        continue

    number = f"""
    "number": {card["number"]},
    """
    number_desc = "Write the card number: top center only for major arcana"
    if i>21:
        number = ""
        number_desc = ""
    prompt = f"""
    {number}
    "name": "{card["name"]}",
    "description": "{card["description"]}",
    "meaning": "{card["meaning"]}"

    Background: Light
    Write the card name: bottom center.
    {number_desc}

    Draw this tarot card in style: {style}   
    """

    print(prompt)
    generate_and_save(prompt, filepath)
    i += 1

Итоговый скрипт, которым можно генерировать карты, выложен в репозитории: https://github.com/evgenyigumnov/ai-tarot

Если кто-то захочет добавить свои карты в репозитории, то можно сделать pull request: https://github.com/evgenyigumnov/ai-tarot/pulls

Ваша колода будет опубликована на сайте https://evgenyigumnov.github.io/ai-tarot

PS

У скрипта генерации есть недостаток: нет единого стиля карт. Это можно исправить, добавив в запрос изображение «пустой» карты помимо описания её внешнего вида. Тогда надписи, цифры и окантовки будут выполнены в одном стиле. Но это увеличит стоимость генерации каждой карты. В общем, если кому интересно — либо добавляйте сами, либо пишите мне в личку.

Вот для примера шаблон пустой для карты:

Вот сгенерированных 2 карты:

Почти в стиль попал :)

Комментарии (22)


  1. ri1wing
    27.05.2025 10:08

    Какое же оно кривое...

    Открыл анимешную колоду

    Какие-то карты с рамками, какие-то без рамок. Названия старших арканов у Дьявола и Повешенного не те. У Звезды нет римской цифры сверху. На Колесе Фортуны должно быть написано TARO, а не RARO

    Но самый треш это младшие арканы. Написано тройка посохов, нарисовано два. Написано четвёрка посохов, нарисовано шесть. И так почти везде. Ну ладно нейросетка считать не умеет, но неужели нельзя было это как-то проконтролировать?

    Про мелочи, типа растущей из головы руки на тройке кубков, я уже молчу


    1. igumnov Автор
      27.05.2025 10:08

      Вы всегда можете удалить не понравившуюся Вам карту и запустить скрипт и он перегенерит только ее )


      1. igumnov Автор
        27.05.2025 10:08

        Названия у Дьявола и Повешенного пришлось заменить. Иначе фильтры OpenAI не пропускали...


        1. ri1wing
          27.05.2025 10:08

          А во второй колоде не пришлось? Почему?


          1. igumnov Автор
            27.05.2025 10:08

            Чем более реалистичный стиль колод. Чаще срабатывает фильтр от OpenAI. На Anime стилях обычно не срабатывает.


            1. ri1wing
              27.05.2025 10:08

              del


              1. igumnov Автор
                27.05.2025 10:08

                Я сначала делал вот такую колоду Tarot Deck - Anime futuristic style С ней проблем не было. А вот для колод:
                Tarot Deck - Anime realistic style
                Tarot Deck - Digital painting in modern realistic style, modernity 2025, white skin, luxury, professional makeup. Natural lighting, with soft painterly textures, office places
                Пришлось менять для карты Дьявола и Повешенного и название и описание что бы пролазило через фильтры безопасности OpenAI. Я предполагаю что чем ближе изображения от мультяшного к фотореалистичному тем они у них лучше срабатывают.


      1. ri1wing
        27.05.2025 10:08

        Да я как-нибудь обойдусь, спасибо. Предпочитаю колоды, нарисованные людьми.


        1. igumnov Автор
          27.05.2025 10:08

          Это свободный мир. Со свободой выбора. Вопрос цены и качества и тд. Мне было вот по фану такую штуку сделать...


          1. n0isy
            27.05.2025 10:08

            Вы потратили 75 долл и получили мусор. Какая цена, такой и результат.


    1. BadNickname
      27.05.2025 10:08

      Самая неприятная неприятность это неконсистентность стиля.


      1. igumnov Автор
        27.05.2025 10:08

        Это можно исправить. В запрос к ИИ помимо описания что изображено на карте добавлять картинку с пустым формуляром карты. Он этот формуляр будет заполнять. Цифры там ставить и текст что бы было в одном стиле… Мне уже лень было это добавлять. Меня карты даже такого качества устраивают )


        1. igumnov Автор
          27.05.2025 10:08

          Еще это увеличит цену на генерацию каждой карты. Я и так уже 75 баксов на эти игрульки истратил. Пока в планах нету еще тратить деньги ) Может только не свои, то можно ))) пишите в личку…


  1. alexxisr
    27.05.2025 10:08

    А кто-нибудь пробовал печатать карты? Сколько обойдется печать колоды карт в 60 с нормальным качеством?


    1. igumnov Автор
      27.05.2025 10:08

      Да вы киньте по вотсапу в любую полиграфию ссылку на одну из колод, они вам быстро посчитают бюджет. Заодно поделитесь )


  1. BobovorTheCommentBeast
    27.05.2025 10:08

    Стоп, вот та штука с первого пика стоит 75уе? Ладно, видимо ии даже художников не заменяет...


    1. igumnov Автор
      27.05.2025 10:08

      Три колоды в каждой по 78 карт, вышло 75$


  1. Missis_Pam
    27.05.2025 10:08

    Судя по моей личной нейропрактике да рисункам карт в колодах в ассортименте маркетплейсов (и вполне себе единообразию картинок на картах в тех колодах) это всё обычно генерится куда проще. Можно легко обойтись без кода и сложных скриптов, даже бесплатными нейросетками, а рамочки с надписями и в банальном графредакторе имеет смысл засобачить, хоть бы и из интернетов скачамши шаблон и текст на клаве натыцав. )

    Та же Dream вомбовская, уже "немолодая" нейра, имеет энное количество предустановленных стилей, например; стили, которые в списке повыше, даже анатомию вывозят адекватно вполне. Бесплатного количества стилей с головой хватает, да и свой задать можно при желании. Там довольно небольшое поле для промта, но и указаний много сильно не требуется, если прям супердетальных пожеланий нету.

    Если что, это ни разу не реклама, просто эта нейра первой вспомнилась из тех, что я для своих развлекух на тему Таро юзала. Так-то я руками их рисую, аж на бумаге, в традишке... Но, было дело, и с нейронками прикалывалась чисто для себя ещё этак с год назад, копейки не потратив. Уже тогда в двух третях попыток пикчи получались вполне ок (а я довольно придирчива, когда дело касается деталей, с которыми ИИ порой может косячить). )

    Попробуйте при желании с обычным словесным промтом погенерить пикчи без рамочек-буковок, может, так на той гэпэте прикольнее получится. Это просто предположение, ибо платные картиночные сетки я не щупала (может, у них промтовая специфика там какая есть своя, хотя это было бы и не очень логично). )

    А вообще можно и начинающих, но уже годных рисовальщиков поискать, которые портфолио нарабатывают и будут рады кейсу с колодой. Они подешевле берут. ) Хотя нынче тарошная тема так популярна, что тут, возможно, будет не сильно банально кого недорогого и пряморукого найти... Но хотя бы несколько картинок для референса стиля, чтобы их нейронке скормить, можно и у художника заказать, имхо (своих услуг не предлагаю, просто вкидываю идею). )


    1. igumnov Автор
      27.05.2025 10:08

      Или как вариант то что нагенерил ИИ отдать дизайнеру человеку, что бы он мелочи подправил )


      1. Missis_Pam
        27.05.2025 10:08

        Или так, но это может быть подороже. Да и заметно муторнее может оказаться, чем пилить с нуля, — случалось в моей практике и такое: свои косяки поправляешь сразу или не делаешь их просто, а с нейронками поди все мелочи найди, особенно когда глаз уже устанет. )


  1. Morgenn
    27.05.2025 10:08

    Увидел обнаженную карту The World и возник вопрос - а как?
    У меня на практике с моделями openAI как только она начинает генерировать что то похожее на грудь с соском - генерация отменяется, мол нарушаются правила. К примеру отдавал референс - видел там сосок - сразу стопился. Закрасил соски, начало генерировать, дошло до груди - остановилось тк видимо обнаружило сосок на результирующем изображении.


    1. igumnov Автор
      27.05.2025 10:08

      Не знаю, мне «повезло» )