Как стать автором
Обновить

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

Время на прочтение23 мин
Количество просмотров17K

Разработчики выпустили приложение Screenshot to Code, позволяющее трансформировать скриншоты веб-сайтов в код. Для генерации кода и заполняющих изображений используется модель машинного обучения GPT-4 с функцией Vision и DALL-E 3. Информационная служба Хабра проверила, как приложение справляется с вёрсткой современных веб-сайтов.

Как подключить

Разработчики развернули онлайн-версию своего приложения. Для доступа необходимо использовать личный API-ключ Open AI с доступом к функции Vision. С её помощью нейросеть может распознавать изображения.

Для получения ключа необходимо перейти в личный кабинет Open AI и в настройках открыть раздел Billing. После этого остаётся добавить способ оплаты и пополнить кошелёк. Минимальная сумма пополнения составляет 5 долларов. За одну транзакцию можно перевести не более 95 долларов. Важно отметить, что российские банковские карты не принимаются.

Если счёт пополнен, то можно переходить в раздел API Keys. В нём надо создать новый ключ, задать ему имя и скопировать сам ключ. Имя можно выбрать любое, оно нужно только для удобного отображения в списке в личном кабинете.

Скопированный ключ необходимо вставить в поле OpenAI API key на сайте Screenshot to Code. После этого можно полноценно пользоваться приложением.

Вёрстка Хабра по скриншотам

Для вёрстки в приложение надо просто перетащить скриншот. Screenshot to Code использует стек HTML/Tailwind/JS. На генерацию уходит 10-20 секунд, но иногда приложение может остановиться на половине, сверстав, к примеру, только хедер. Заполняющие изображения будут генерироваться с помощью DALL-E. Кроме того, предусмотрено поле для описания изменений, которые требуется внести в вёрстку.

Сперва попробуем сверстать главную Хабра. Для этого сделаем скриншот всей страницы и перетащим его в окно приложения. Не будем упрощать задачу, масштабируя изображение и убирая сложные элементы — просто Хабр как он есть. В итоговом варианте видно, что сайт похож, но не очень близко к оригиналу: выравнивание, размер изображений и цвета случайные. В мобильной версии даже не стоит говорить про адаптивность.

Скриншот

Результат

Мобильная версия

Код
<html lang="ru">
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
  <title>
   Хабр
  </title>
  <script src="https://cdn.tailwindcss.com">
  </script>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" rel="stylesheet"/>
  <style>
   @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap');
        body {
            font-family: 'Roboto', sans-serif;
        }
  </style>
 </head>
 <body class="bg-gray-100">
  <div class="container mx-auto mt-4 p-4 bg-white shadow-lg">
   <header class="flex justify-between items-center border-b pb-2">
    <div class="flex items-center space-x-4">
     <div class="text-gray-800 font-bold text-lg">
      Хабр
     </div>
     <div class="text-gray-500 text-sm">
      Моя лента
     </div>
     <div class="text-gray-500 text-sm">
      Все потоки
     </div>
     <div class="text-gray-500 text-sm">
      Разработка
     </div>
     <div class="text-gray-500 text-sm">
      Администрирование
     </div>
     <div class="text-gray-500 text-sm">
      Дизайн
     </div>
     <div class="text-gray-500 text-sm">
      Менеджмент
     </div>
     <div class="text-gray-500 text-sm">
      Маркетинг
     </div>
     <div class="text-gray-500 text-sm">
      Наука
     </div>
    </div>
    <div class="flex items-center space-x-2">
     <div class="text-gray-500 text-sm">
      Как стать автором
     </div>
     <div class="text-gray-500 text-sm">
      Оплаты Битвы — через неделю
     </div>
     <div class="text-gray-500 text-sm">
      Какие события ждут нас в будущем? Ответ в IT-Календаре
     </div>
    </div>
   </header>
   <main class="flex mt-4">
    <section class="w-3/4 pr-4">
     <div class="flex justify-between items-center mb-4">
      <div class="text-gray-800 font-bold text-xl">
       Все потоки
      </div>
      <div class="flex items-center space-x-1">
       <div class="text-blue-600 font-bold text-sm">
        СТАТЬИ
        <span class="text-gray-600">
         67
        </span>
       </div>
       <div class="text-gray-600 text-sm">
        ПОСТЫ
        <span class="text-gray-600">
         14
        </span>
       </div>
       <div class="text-gray-600 text-sm">
        НОВОСТИ
        <span class="text-gray-600">
         42
        </span>
       </div>
       <div class="text-gray-600 text-sm">
        ХАБЫ
       </div>
       <div class="text-gray-600 text-sm">
        АВТОРЫ
       </div>
       <div class="text-gray-600 text-sm">
        КОМПАНИИ
       </div>
      </div>
     </div>
     <div class="bg-blue-100 p-4 mb-4">
      <div class="flex items-center justify-between mb-2">
       <div class="text-sm text-gray-600">
        daniilshat 1 минуту назад
       </div>
       <div class="text-sm text-gray-600">
        +3
       </div>
      </div>
      <div class="text-gray-800 font-bold text-lg mb-2">
       Автономный роботизированный экскаватор HEAP смог самостоятельно построить стену из валунов поблизости
      </div>
      <div class="flex items-center text-gray-600 text-sm">
       <div class="mr-2">
        1 мин
       </div>
       <div class="mr-2">
        <i class="far fa-comment">
        </i>
        0
       </div>
       <div class="mr-2">
        <i class="far fa-heart">
        </i>
        0
       </div>
       <div class="mr-2">
        <i class="far fa-bookmark">
        </i>
        0
       </div>
      </div>
     </div>
     <div class="grid grid-cols-3 gap-4">
      <div class="bg-white p-4 shadow-lg">
       <img alt="Placeholder image of a comic-style illustration with two characters" class="mb-2" height="200" src="https://oaidalleapiprodscus.blob.core.windows.net/private/org-8PQL1DGPJ2rqkFKWEZrh9XOD/user-HkIDSSQdvySaBTNM473ssJ9s/img-nzkzaThIO95ND6F7D599dcbR.png?st=2023-11-23T11%3A58%3A37Z&amp;se=2023-11-23T13%3A58%3A37Z&amp;sp=r&amp;sv=2021-08-06&amp;sr=b&amp;rscd=inline&amp;rsct=image/png&amp;skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&amp;sktid=a48cca56-e6da-484e-a814-9c849652bcb3&amp;skt=2023-11-23T01%3A14%3A51Z&amp;ske=2023-11-24T01%3A14%3A51Z&amp;sks=b&amp;skv=2021-08-06&amp;sig=69Udpcfhuy85CpZqg3uEcmhY4aHMzp%2B5eYZGwOOC6aM%3D" width="300"/>
       <div class="text-gray-800 font-bold text-sm mb-1">
        Идём на «Минулс Ти» по дороге из жёлтого кирпича
       </div>
       <div class="text-gray-600 text-xs">
        Editor1 5 минут назад
       </div>
      </div>
      <div class="bg-white p-4 shadow-lg">
       <img alt="Placeholder image of a comic-style illustration with a character wearing a red suit" class="mb-2" height="200" src="https://oaidalleapiprodscus.blob.core.windows.net/private/org-8PQL1DGPJ2rqkFKWEZrh9XOD/user-HkIDSSQdvySaBTNM473ssJ9s/img-5El4H32UkglEc0rfrSk9sECF.png?st=2023-11-23T11%3A58%3A39Z&amp;se=2023-11-23T13%3A58%3A39Z&amp;sp=r&amp;sv=2021-08-06&amp;sr=b&amp;rscd=inline&amp;rsct=image/png&amp;skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&amp;sktid=a48cca56-e6da-484e-a814-9c849652bcb3&amp;skt=2023-11-22T13%3A33%3A27Z&amp;ske=2023-11-23T13%3A33%3A27Z&amp;sks=b&amp;skv=2021-08-06&amp;sig=/EC9YDSoXt88%2BWlynVMIt7pLqyh2aBIM0tbkNVqF8Gc%3D" width="300"/>
       <div class="text-gray-800 font-bold text-sm mb-1">
        Как стать супергероем
       </div>
       <div class="text-gray-600 text-xs">
        Editor2 10 минут назад
       </div>
      </div>
      <div class="bg-white p-4 shadow-lg">
       <img alt="Placeholder image of a classic painting" class="mb-2" height="200" src="https://oaidalleapiprodscus.blob.core.windows.net/private/org-8PQL1DGPJ2rqkFKWEZrh9XOD/user-HkIDSSQdvySaBTNM473ssJ9s/img-fiNEuxJ7WLCFJLcjKE6TxMB2.png?st=2023-11-23T11%3A58%3A38Z&amp;se=2023-11-23T13%3A58%3A38Z&amp;sp=r&amp;sv=2021-08-06&amp;sr=b&amp;rscd=inline&amp;rsct=image/png&amp;skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&amp;sktid=a48cca56-e6da-484e-a814-9c849652bcb3&amp;skt=2023-11-22T13%3A19%3A00Z&amp;ske=2023-11-23T13%3A19%3A00Z&amp;sks=b&amp;skv=2021-08-06&amp;sig=zPwXmvbOp/TBhvl6IAuGUp8/1oRerE5xAagOSC1HsMc%3D" width="300"/>
       <div class="text-gray-800 font-bold text-sm mb-1">
        Рейтинг IT-Брендов работодателей 2023
       </div>
       <div class="text-gray-600 text-xs">
        Editor3 15 минут назад
       </div>
      </div>
     </div>
    </section>
    <aside class="w-1/4">
     <div class="bg-white p-4 mb-4 shadow-lg">
      <div class="text-gray-800 font-bold text-lg mb-4">
       ЛУЧШИЕ БЛОГИ
      </div>
      <ul class="text-sm">
       <li class="flex justify-between mb-2">
        <div class="text-gray-800">
         RU VDS.com
        </div>
        <div class="text-gray-600">
         2918.62
        </div>
       </li>
       <li class="flex justify-between mb-2">
        <div class="text-gray-800">
         Timeweb Cloud
        </div>
        <div class="text-gray-600">
         1516.57
        </div>
       </li>
       <li class="flex justify-between mb-2">
        <div class="text-gray-800">
         Selectel
        </div>
        <div class="text-gray-600">
         1463.29
        </div>
       </li>
       <li class="flex justify-between mb-2">
        <div class="text-gray-800">
         MTC
        </div>
        <div class="text-gray-600">
         990.24
        </div>
       </li>
       <li class="flex justify-between mb-2">
        <div class="text-gray-800">
         OTUS
        </div>
        <div class="text-gray-600">
         712.7
        </div>
       </li>
       <li class="flex justify-between mb-2">
        <div class="text-gray-800">
         ПК Планит
        </div>
        <div class="text-gray-600">
         596.84
        </div>
       </li>
       <li class="flex justify-between mb-2">
        <div class="text-gray-800">
         Альфа-Банк
        </div>
        <div class="text-gray-600">
         558.92
        </div>
       </li>
       <li class="flex justify-between mb-2">
        <div class="text-gray-800">
         FirstVDS
        </div>
        <div class="text-gray-600">
         505.01
        </div>
       </li>
       <li class="flex justify-between">
        <div class="text-gray-800">
         ОМК – ИТ
        </div>
        <div class="text-gray-600">
         490.87
        </div>
       </li>
      </ul>
     </div>
     <div class="bg-white p-4 shadow-lg">
      <div class="text-gray-800 font-bold text-lg mb-4">
       ЦИТАТ СЕЙЧАС
      </div>
      <div class="text-sm text-gray-600 mb-2">
       «Финикорф-банк» собирает согласие на обработку биометрики клиентов при вводе пин-кода в новом приложении
      </div>
      <div class="text-sm text-gray-600 mb-2">
       «Банк-клиент» для бизнеса от «Альфа-Банка»
      </div>
      <div class="text-sm text-gray-600">
       «Сбер» запускает сервис для бизнеса по подбору персонала
      </div>
     </div>
    </aside>
   </main>
  </div>
 </body>
</html>

Попробуем ещё раз, но теперь уберём лишнее из скриншота, избавившись от полей. Но даже в этом случае нейросеть отошла от задания. Приложение проигнорировало цвета, выравнивание и разделение на блоки. В мобильной версии по-прежнему нет никакой адаптивности.

Скриншот

Результат

Мобильная версия

Код
<html lang="ru">
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
  <title>
   Хабр
  </title>
  <script src="https://cdn.tailwindcss.com">
  </script>
  <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&amp;display=swap" rel="stylesheet"/>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" rel="stylesheet"/>
  <style>
   body {
            font-family: 'Roboto', sans-serif;
        }
  </style>
 </head>
 <body class="bg-gray-100">
  <div class="container mx-auto mt-4 p-4 bg-white shadow-lg">
   <div class="flex justify-between items-center mb-4">
    <div class="flex space-x-4">
     <div class="text-red-500 font-bold">
      Все потоки
     </div>
     <div class="text-gray-500">
      Статьи +65
     </div>
     <div class="text-gray-500">
      Посты +14
     </div>
     <div class="text-gray-500">
      Новости +45
     </div>
     <div class="text-gray-500">
      Хабы
     </div>
     <div class="text-gray-500">
      Авторы
     </div>
     <div class="text-gray-500">
      Компании
     </div>
    </div>
    <div class="flex items-center">
     <div class="text-gray-500 mr-2">
      Рейтинг IT-работодателей как он есть
     </div>
     <div class="text-red-500 font-bold text-lg">
      99+
     </div>
    </div>
   </div>
   <div class="border-t border-gray-300 pt-4">
    <div class="flex items-center justify-between mb-2">
     <div class="flex items-center">
      <img alt="User avatar" class="rounded-full mr-2" height="32" src="https://oaidalleapiprodscus.blob.core.windows.net/private/org-8PQL1DGPJ2rqkFKWEZrh9XOD/user-HkIDSSQdvySaBTNM473ssJ9s/img-5NrPaq1RBxT6otglC6HVJoLE.png?st=2023-11-23T12%3A44%3A12Z&amp;se=2023-11-23T14%3A44%3A12Z&amp;sp=r&amp;sv=2021-08-06&amp;sr=b&amp;rscd=inline&amp;rsct=image/png&amp;skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&amp;sktid=a48cca56-e6da-484e-a814-9c849652bcb3&amp;skt=2023-11-22T22%3A40%3A12Z&amp;ske=2023-11-23T22%3A40%3A12Z&amp;sks=b&amp;skv=2021-08-06&amp;sig=xTD/aVw04SEizCrbTx7Hge4ezmVScePEVyc1dHQdOOA%3D" width="32"/>
      <div class="text-gray-700 text-sm">
       <div class="font-bold">
        appp_master
       </div>
       <div>
        12 минут назад
       </div>
      </div>
     </div>
     <div class="text-gray-500 text-sm">
      9 мин
     </div>
    </div>
    <div class="font-bold text-lg mb-1">
     Как использовать Spring в качестве фреймворка для Flink-приложений
    </div>
    <div class="flex text-gray-500 text-sm mb-4">
     <div class="mr-4">
      <i class="far fa-eye">
      </i>
      47
     </div>
     <div class="mr-4">
      <i class="far fa-comment">
      </i>
      0
     </div>
     <div class="mr-4">
      <i class="far fa-bookmark">
      </i>
      0
     </div>
    </div>
    <div class="flex space-x-2 text-sm font-medium text-gray-700 mb-4">
     <div class="bg-gray-200 rounded-full px-3 py-1">
      новости
     </div>
     <div class="bg-gray-200 rounded-full px-3 py-1">
      все подряд
     </div>
     <div class="bg-gray-200 rounded-full px-3 py-1">
      лучшие
     </div>
    </div>
    <div class="space-y-2">
     <div class="flex justify-between items-center">
      <div class="text-sm text-gray-700">
       Презентацию российского смартфона «Ф-Фон» перенесли на 18 декабря
      </div>
      <div class="text-sm text-gray-500">
       16:28
      </div>
     </div>
     <div class="flex justify-between items-center">
      <div class="text-sm text-gray-700">
       Стратегическое партнёрство — билайн приобрёл сервис Callibri
      </div>
      <div class="text-sm text-gray-500">
       16:16
      </div>
     </div>
     <div class="flex justify-between items-center">
      <div class="text-sm text-gray-700">
       Как создавать и использовать ботов в Telegram? Собрали в бесплатный курс 9 инструкций разной сложности
      </div>
      <div class="text-sm text-gray-500">
       16:12
      </div>
     </div>
     <div class="flex justify-between items-center">
      <div class="text-sm text-gray-700">
       Исследование: 83% мобильных игр закрываются в течение трёх лет после релиза
      </div>
      <div class="text-sm text-gray-500">
       16:08
      </div>
     </div>
     <div class="flex justify-between items-center">
      <div class="text-sm text-gray-700">
       В AgroCode Hack и AgroCode Data Science Cup приняли участие 29 команд из 30 городов РФ
      </div>
      <div class="text-sm text-gray-500">
       15:58
      </div>
     </div>
    </div>
   </div>
  </div>
 </body>
</html>

Теперь пришло время проверить возможности Screenshot to Code на Хабр Карьере. В этом случае нейросеть полностью проигнорировала существование хедера и блока фильтров, но сверстала карточки вакансий. Мобильная версия стала выглядеть лучше. Теперь не надо скроллить страницу по горизонтали.

Скриншот

Результат

Мобильная версия

Код
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Работа и вакансии</title>
    <script src="https://cdn.tailwindcss.com"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">
    <style>
        body {
            font-family: 'Arial', sans-serif;
        }
    </style>
</head>
<body class="bg-gray-100">
    <div class="container mx-auto mt-4 p-4 bg-white shadow-lg">
        <div class="flex justify-between items-center mb-4">
            <h1 class="text-xl font-bold">Работа и вакансии</h1>
            <div>
                <button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
                    Получать вакансии на почту
                </button>
                <button class="ml-2 bg-transparent hover:bg-blue-500 text-blue-700 font-semibold hover:text-white py-2 px-4 border border-blue-500 hover:border-transparent rounded">
                    RSS
                </button>
            </div>
        </div>

        <div class="flex mb-4">
            <div class="w-3/4 pr-4">
                <input type="text" placeholder="Поиск" class="w-full p-2 border rounded">
            </div>
            <div class="w-1/4">
                <select class="w-full p-2 border rounded">
                    <option>По соответствию</option>
                </select>
            </div>
        </div>

        <p class="text-sm mb-4">Найдено 3347 вакансий</p>

        <div class="mb-4">
            <div class="p-4 bg-red-100 border-l-4 border-red-500">
                <div class="flex justify-between items-center">
                    <div>
                        <h2 class="font-bold text-red-600">Яндекс <span class="text-sm">4.26</span></h2>
                        <p class="text-sm">Разработчики на Java в Телемост</p>
                        <p class="text-xs text-gray-600">Москва, Санкт-Петербург, Казань • Полный рабочий день</p>
                        <p class="text-xs text-gray-600">Бэкенд разработчик • Java • Kotlin • Java Spring Framework • PostgreSQL</p>
                    </div>
                    <div>
                        <i class="fas fa-bookmark text-gray-500"></i>
                    </div>
                </div>
            </div>
        </div>

        <div class="mb-4">
            <div class="p-4 bg-yellow-100 border-l-4 border-yellow-500">
                <div class="flex justify-between items-center">
                    <div>
                        <h2 class="font-bold text-yellow-600">Bright Mobile Apps</h2>
                        <p class="text-sm">Senior / Middle+ Product Manager (mobile apps)</p>
                        <p class="text-xs text-gray-600">Полный рабочий день • Можно удаленно</p>
                        <p class="text-xs text-gray-600">от 1500 $</p>
                        <p class="text-xs text-gray-600">Менеджер продукта, Старший (Senior) • Управление продуктами • Продуктовая аналитика • Разработка продуктовой стратегии</p>
                    </div>
                    <div>
                        <i class="fas fa-bookmark text-gray-500"></i>
                    </div>
                </div>
            </div>
        </div>

        <div class="mb-4">
            <div class="p-4 bg-green-100 border-l-4 border-green-500">
                <div class="flex justify-between items-center">
                    <div>
                        <h2 class="font-bold text-green-600">NEW</h2>
                        <p class="text-sm">Быстрый отклик</p>
                        <p class="text-xs text-gray-600">Это подборка подходящих вакансий. Один клик — и отклик отправится в компанию вместе с процентом соответствия вашего профиля требованиям позиции.</p>
                    </div>
                    <div>
                        <i class="fas fa-bookmark text-gray-500"></i>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

Вёрстка других популярных сайтов

Если с относительно простым дизайном Screenshot to Code не справляется, то надо пробовать что-то очень минималистичное. Первая же мысль пришла проверить главную Google. На странице только поле ввода, пара кнопка и логотип. Получилось похоже в общих чертах, но уже не главная Google, а что-то самобытное.

Скриншот

Результат

Мобильная версия

Код
<html lang="en">
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
  <title>
   Google
  </title>
  <script src="https://cdn.tailwindcss.com">
  </script>
  <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500&amp;display=swap" rel="stylesheet"/>
  <style>
   body {
            font-family: 'Roboto', sans-serif;
        }
        .search-bar:focus-within {
            box-shadow: 0 1px 6px 0 rgba(32,33,36,0.28);
        }
        .search-bar:focus-within .search-input {
            border-color: rgba(223,225,229,0);
        }
        .search-bar:focus-within button {
            display: block;
        }
  </style>
 </head>
 <body class="bg-gray-900 text-white h-screen flex flex-col justify-center items-center">
  <div class="flex flex-col items-center">
   <img alt="Google logo" class="mb-8" height="92" src="https://oaidalleapiprodscus.blob.core.windows.net/private/org-8PQL1DGPJ2rqkFKWEZrh9XOD/user-HkIDSSQdvySaBTNM473ssJ9s/img-mqXF2rV9AacLD7wcnfEQwZbP.png?st=2023-11-23T12%3A54%3A04Z&amp;se=2023-11-23T14%3A54%3A04Z&amp;sp=r&amp;sv=2021-08-06&amp;sr=b&amp;rscd=inline&amp;rsct=image/png&amp;skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&amp;sktid=a48cca56-e6da-484e-a814-9c849652bcb3&amp;skt=2023-11-22T22%3A41%3A12Z&amp;ske=2023-11-23T22%3A41%3A12Z&amp;sks=b&amp;skv=2021-08-06&amp;sig=Y//KVv0QPAheBAi2wz7xNGTZUCWWoJDxn4ooDjP0vfI%3D" width="272"/>
   <div class="search-bar relative mb-4">
    <input class="search-input w-96 h-10 pl-4 pr-10 rounded-full border border-gray-700 bg-gray-800 text-sm focus:outline-none" placeholder=" " type="text"/>
    <button class="absolute right-3 top-0 mt-2.5 mr-0.5">
     <img alt="Google microphone" class="inline-block" height="24" src="https://oaidalleapiprodscus.blob.core.windows.net/private/org-8PQL1DGPJ2rqkFKWEZrh9XOD/user-HkIDSSQdvySaBTNM473ssJ9s/img-sksBQikHjGy4eDjgGjLh9tEu.png?st=2023-11-23T12%3A54%3A03Z&amp;se=2023-11-23T14%3A54%3A03Z&amp;sp=r&amp;sv=2021-08-06&amp;sr=b&amp;rscd=inline&amp;rsct=image/png&amp;skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&amp;sktid=a48cca56-e6da-484e-a814-9c849652bcb3&amp;skt=2023-11-23T01%3A06%3A39Z&amp;ske=2023-11-24T01%3A06%3A39Z&amp;sks=b&amp;skv=2021-08-06&amp;sig=OWExfXZJe%2BrAVZIC3kJgeqppaH/c82HBha8Jup8ydxY%3D" width="24"/>
    </button>
   </div>
   <div class="flex justify-center space-x-4">
    <button class="text-sm text-gray-500 bg-transparent hover:text-gray-300 px-4 py-2 rounded">
     Поиск в Google
    </button>
    <button class="text-sm text-gray-500 bg-transparent hover:text-gray-300 px-4 py-2 rounded">
     Мне повезёт!
    </button>
   </div>
  </div>
 </body>
</html>

Ещё несколько примеров:

Страница трансляции на YouTube

Скриншот

Результат

Мобильная версия

Код
<html lang="en">
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
  <title>
   Lofi Hip Hop Radio - Beats to Relax/Study to
  </title>
  <script src="https://cdn.tailwindcss.com">
  </script>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" rel="stylesheet"/>
  <style>
   body {
            font-family: 'Arial', sans-serif;
        }
        .chat-message {
            background-color: #1e1e1e;
            color: #d4d4d4;
        }
        .chat-message span {
            color: #646464;
        }
        .chat-message p {
            color: #fff;
        }
        .chat-input {
            background-color: #121212;
            color: #fff;
        }
  </style>
 </head>
 <body class="bg-black text-white">
  <div class="flex h-screen">
   <!-- Video and Description Section -->
   <div class="flex-grow">
    <div class="relative">
     <img alt="Animated image of a girl with headphones studying with a cat sleeping next to her, a cityscape in the background, and a warm lamp illuminating the scene" class="w-full h-full object-cover" height="720" src="https://oaidalleapiprodscus.blob.core.windows.net/private/org-8PQL1DGPJ2rqkFKWEZrh9XOD/user-HkIDSSQdvySaBTNM473ssJ9s/img-wbBgqx2QzGRdREvf1fcQgAI6.png?st=2023-11-23T13%3A10%3A09Z&amp;se=2023-11-23T15%3A10%3A09Z&amp;sp=r&amp;sv=2021-08-06&amp;sr=b&amp;rscd=inline&amp;rsct=image/png&amp;skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&amp;sktid=a48cca56-e6da-484e-a814-9c849652bcb3&amp;skt=2023-11-23T01%3A01%3A01Z&amp;ske=2023-11-24T01%3A01%3A01Z&amp;sks=b&amp;skv=2021-08-06&amp;sig=ttxFzb753lpennBxuxBjInIJWeULAE%2BA0nNauiy63jg%3D" width="1280"/>
     <div class="absolute bottom-0 left-0 p-4 bg-black bg-opacity-50 w-full">
      <div class="flex items-center justify-between">
       <div class="flex items-center">
        <img alt="Lofi Girl logo" class="rounded-full" height="50" src="https://oaidalleapiprodscus.blob.core.windows.net/private/org-8PQL1DGPJ2rqkFKWEZrh9XOD/user-HkIDSSQdvySaBTNM473ssJ9s/img-yLl6HmV9iDpHMNoMHv04Inuc.png?st=2023-11-23T13%3A10%3A08Z&amp;se=2023-11-23T15%3A10%3A08Z&amp;sp=r&amp;sv=2021-08-06&amp;sr=b&amp;rscd=inline&amp;rsct=image/png&amp;skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&amp;sktid=a48cca56-e6da-484e-a814-9c849652bcb3&amp;skt=2023-11-23T00%3A34%3A11Z&amp;ske=2023-11-24T00%3A34%3A11Z&amp;sks=b&amp;skv=2021-08-06&amp;sig=pT/WoxXi74NXyrkSzV/uRBtnECu4xfuvLGcJ7CJNTnA%3D" width="50"/>
        <div class="ml-3">
         <p class="text-sm">
          lofi hip hop radio - beats to relax/study to
         </p>
         <p class="text-xs text-gray-400">
          Lofi Girl
         </p>
        </div>
       </div>
       <div class="flex items-center">
        <button class="text-gray-400 mr-2">
         <i class="fas fa-heart">
         </i>
        </button>
        <button class="text-gray-400 mr-2">
         <i class="fas fa-share">
         </i>
        </button>
        <button class="text-gray-400">
         <i class="fas fa-ellipsis-h">
         </i>
        </button>
       </div>
      </div>
     </div>
    </div>
   </div>
   <!-- Chat Section -->
   <div class="w-96 bg-gray-900">
    <div class="p-4">
     <div class="flex items-center justify-between mb-4">
      <h2 class="text-lg">
       Interesting messages
      </h2>
      <button class="text-gray-400">
       <i class="fas fa-times">
       </i>
      </button>
     </div>
     <div class="overflow-y-auto h-5/6">
      <!-- Chat messages -->
      <div class="chat-message p-2 mb-2 rounded">
       <span>
        Lofi Girl
       </span>
       <p>
        Lofi Girl's backstory - https://...
       </p>
      </div>
      <!-- Repeat for each chat message -->
      <!-- ... other chat messages ... -->
     </div>
     <div class="chat-input p-2 mt-4">
      <input class="w-full bg-transparent border-none focus:outline-none" placeholder="Write your message" type="text"/>
     </div>
    </div>
   </div>
  </div>
 </body>
</html>

Страница проекта Screenshot to Code на GitHub

Скриншот

Результат

Мобильная версия

Код
<html lang="en">
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
  <title>
   GitHub Repository
  </title>
  <script src="https://cdn.tailwindcss.com">
  </script>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" rel="stylesheet"/>
  <style>
   body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        }
  </style>
 </head>
 <body class="bg-gray-900 text-white">
  <div class="container mx-auto px-4 py-6">
   <div class="flex justify-between items-center border-b border-gray-700 pb-4">
    <h1 class="text-2xl font-semibold">
     screenshot-to-code
    </h1>
    <div class="flex items-center">
     <button class="text-gray-400 hover:text-white mr-2">
      <i class="far fa-eye">
      </i>
      Watch
      <span class="text-gray-500">
       109
      </span>
     </button>
     <button class="text-gray-400 hover:text-white mr-2">
      <i class="fas fa-star">
      </i>
      Star
      <span class="text-gray-500">
       17.2k
      </span>
     </button>
     <button class="text-gray-400 hover:text-white">
      <i class="fas fa-code-branch">
      </i>
      Fork
      <span class="text-gray-500">
       1.6k
      </span>
     </button>
    </div>
   </div>
   <div class="flex flex-col lg:flex-row justify-between py-4">
    <div class="flex flex-col w-full lg:w-2/3 pr-4 space-y-4">
     <div class="flex items-center space-x-2">
      <a class="text-blue-400 hover:text-blue-300" href="#">
       main
      </a>
      <i class="fas fa-caret-down text-gray-500">
      </i>
      <span class="text-gray-500">
       3 branches
      </span>
      <span class="text-gray-500">
       0 tags
      </span>
     </div>
     <div class="space-y-2">
      <div class="flex items-center justify-between">
       <div class="flex items-center">
        <i class="fas fa-folder text-gray-500 mr-2">
        </i>
        <span>
         backend
        </span>
       </div>
       <span class="text-gray-500 text-sm">
        rename method
       </span>
      </div>
      <div class="flex items-center justify-between">
       <div class="flex items-center">
        <i class="fas fa-folder text-gray-500 mr-2">
        </i>
        <span>
         frontend
        </span>
       </div>
       <span class="text-gray-500 text-sm">
        update variable name
       </span>
      </div>
      <div class="flex items-center justify-between">
       <div class="flex items-center">
        <i class="fas fa-file text-gray-500 mr-2">
        </i>
        <span>
         .gitattributes
        </span>
       </div>
       <span class="text-gray-500 text-sm">
        Initial commit
       </span>
      </div>
      <div class="flex items-center justify-between">
       <div class="flex items-center">
        <i class="fas fa-file text-gray-500 mr-2">
        </i>
        <span>
         .gitignore
        </span>
       </div>
       <span class="text-gray-500 text-sm">
        comment more
       </span>
      </div>
      <div class="flex items-center justify-between">
       <div class="flex items-center">
        <i class="fas fa-file text-gray-500 mr-2">
        </i>
        <span>
         LICENSE
        </span>
       </div>
       <span class="text-gray-500 text-sm">
        Initial commit
       </span>
      </div>
      <div class="flex items-center justify-between">
       <div class="flex items-center">
        <i class="fas fa-file text-gray-500 mr-2">
        </i>
        <span>
         README.md
        </span>
       </div>
       <span class="text-gray-500 text-sm">
        Update README.md
       </span>
      </div>
      <div class="flex items-center justify-between">
       <div class="flex items-center">
        <i class="fas fa-file text-gray-500 mr-2">
        </i>
        <span>
         docker-compose.yml
        </span>
       </div>
       <span class="text-gray-500 text-sm">
        update more values to 7001
       </span>
      </div>
     </div>
    </div>
    <div class="w-full lg:w-1/3 pt-4 lg:pt-0">
     <div class="border border-gray-700 p-4">
      <h2 class="text-lg font-semibold mb-2">
       About
      </h2>
      <p>
       Drop in a screenshot and convert it to clean HTML/Tailwind/JS code
      </p>
      <a class="text-blue-400 hover:text-blue-300 block mt-2" href="#">
       picocamps.xyz/free-tools/screenshot-to...
      </a>
      <div class="flex items-center justify-between mt-4">
       <div class="text-gray-500">
        <i class="fas fa-book-open mr-1">
        </i>
        Readme
       </div>
       <div class="text-gray-500">
        <i class="fas fa-balance-scale mr-1">
        </i>
        MIT license
       </div>
      </div>
      <div class="flex items-center justify-between mt-2">
       <div class="text-gray-500">
        <i class="fas fa-chart-bar mr-1">
        </i>
        Activity
       </div>
       <div class="text-gray-500">
        <i class="fas fa-users mr-1">
        </i>
        17.2k stars
       </div>
      </div>
      <div class="flex items-center justify-between mt-2">
       <div class="text-gray-500">
        <i class="fas fa-eye mr-1">
        </i>
        109 watching
       </div>
       <div class="text-gray-500">
        <i class="fas fa-code-branch mr-1">
        </i>
        1.6k forks
       </div>
      </div>
      <button class="bg-blue-500 hover:bg-blue-400 text-white px-4 py-2 mt-4 rounded">
       Report repository
      </button>
     </div>
     <div class="mt-4">
      <h2 class="text-lg font-semibold mb-2">
       Releases
      </h2>
      <p class="text-gray-500">
       No releases published
      </p>
     </div>
     <div class="mt-4">
      <h2 class="text-lg font-semibold mb-2">
       Packages
      </h2>
      <p class="text-gray-500">
       No packages published
      </p>
     </div>
     <div class="mt-4">
      <h2 class="text-lg font-semibold mb-2">
       Contributors
      </h2>
      <div class="flex -space-x-2">
       <!-- Placeholder images for contributors -->
       <img alt="Contributor 1" class="w-8 h-8 rounded-full border-2 border-gray-900" height="32" src="https://oaidalleapiprodscus.blob.core.windows.net/private/org-8PQL1DGPJ2rqkFKWEZrh9XOD/user-HkIDSSQdvySaBTNM473ssJ9s/img-yyanFtERMp0eL1ajV8VcQaKr.png?st=2023-11-23T13%3A12%3A23Z&amp;se=2023-11-23T15%3A12%3A23Z&amp;sp=r&amp;sv=2021-08-06&amp;sr=b&amp;rscd=inline&amp;rsct=image/png&amp;skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&amp;sktid=a48cca56-e6da-484e-a814-9c849652bcb3&amp;skt=2023-11-22T20%3A10%3A11Z&amp;ske=2023-11-23T20%3A10%3A11Z&amp;sks=b&amp;skv=2021-08-06&amp;sig=0PsKmTsq3WBr3Xy372e02l%2B8Q1dYg%2Bbo2ignKYafLyI%3D" width="32"/>
       <img alt="Contributor 2" class="w-8 h-8 rounded-full border-2 border-gray-900" height="32" src="https://oaidalleapiprodscus.blob.core.windows.net/private/org-8PQL1DGPJ2rqkFKWEZrh9XOD/user-HkIDSSQdvySaBTNM473ssJ9s/img-JIujWkUttkBsXYirw039pti6.png?st=2023-11-23T13%3A12%3A23Z&amp;se=2023-11-23T15%3A12%3A23Z&amp;sp=r&amp;sv=2021-08-06&amp;sr=b&amp;rscd=inline&amp;rsct=image/png&amp;skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&amp;sktid=a48cca56-e6da-484e-a814-9c849652bcb3&amp;skt=2023-11-23T01%3A02%3A09Z&amp;ske=2023-11-24T01%3A02%3A09Z&amp;sks=b&amp;skv=2021-08-06&amp;sig=YoCOrqaVFi0qRxj2SnwSW1QydvfcJDZVJGkBDjpYgqM%3D" width="32"/>
       <img alt="Contributor 3" class="w-8 h-8 rounded-full border-2 border-gray-900" height="32" src="https://oaidalleapiprodscus.blob.core.windows.net/private/org-8PQL1DGPJ2rqkFKWEZrh9XOD/user-HkIDSSQdvySaBTNM473ssJ9s/img-aIEFvWexcpoQXiZPJ7dE1msq.png?st=2023-11-23T13%3A12%3A26Z&amp;se=2023-11-23T15%3A12%3A26Z&amp;sp=r&amp;sv=2021-08-06&amp;sr=b&amp;rscd=inline&amp;rsct=image/png&amp;skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&amp;sktid=a48cca56-e6da-484e-a814-9c849652bcb3&amp;skt=2023-11-23T03%3A46%3A54Z&amp;ske=2023-11-24T03%3A46%3A54Z&amp;sks=b&amp;skv=2021-08-06&amp;sig=iIKAk%2BU0OQx0iQRQA/WH2mRUms5afAuitxWZXupNsfA%3D" width="32"/>
       <!-- ... more contributors ... -->
      </div>
     </div>
     <div class="mt-4">
      <h2 class="text-lg font-semibold mb-2">
       Languages
      </h2>
      <div class="text-gray-500">
       <p>
        TypeScript 59.3%
       </p>
       <p>
        Python 32.1%
       </p>
       <p>
        JavaScript 3.5%
       </p>
       <p>
        Dockerfile 1.2%
       </p>
       <p>
        Shell 0.3%
       </p>
      </div>
     </div>
    </div>
   </div>
  </div>
 </body>
</html>

Главная Screenshot to Code

Скриншот

Результат

Мобильная версия

Код
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Screenshot to Code</title>
    <script src="https://cdn.tailwindcss.com"></script>
    <style>
        body {
            font-family: 'Inter', sans-serif;
        }
    </style>
</head>
<body class="bg-gray-100">
    <div class="container mx-auto px-4 py-8">
        <div class="flex justify-between items-center">
            <h1 class="text-3xl font-semibold">Screenshot to Code</h1>
            <div class="space-x-2">
                <button class="bg-black text-white px-4 py-2 rounded">upgrade to business plan ($480/mo)</button>
                <span class="text-gray-600">no key required + unlimited generations + priority support</span>
            </div>
        </div>

        <div class="flex justify-center items-center h-screen">
            <div class="border-dashed border-4 border-gray-400 rounded-lg p-10 text-center text-gray-600">
                <p>Drag & drop a screenshot to get started.</p>
                <p>Drop a screenshot here, paste from clipboard, or click to select</p>
            </div>
        </div>

        <div class="flex justify-center items-center">
            <div class="flex flex-col items-center">
                <div class="text-gray-600 mb-4">Or screenshot a URL...</div>
                <input type="text" placeholder="Enter URL" class="border-2 border-gray-300 rounded px-4 py-2 mb-2">
                <button class="bg-gray-300 text-black px-6 py-2 rounded">Capture</button>
                <div class="text-gray-600 mt-4">To screenshot a URL, add a ScreenshotOne API key in the settings dialog.</div>
            </div>
        </div>

        <footer class="text-center text-gray-600 mt-8">
            an open source project by Pico
        </footer>
    </div>
</body>
</html>

Проект Screenshot to Code доступен онлайн, а код опубликован в открытом репозитории. В нём можно найти инструкции по развёртыванию приложения на собственном сервере. После десятка генераций из 5 долларов на счету осталось 4, поэтому средства расходуются достаточно экономно.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 37: ↑37 и ↓0+37
Комментарии7

Другие новости

Истории

Работа

Data Scientist
45 вакансий

Ближайшие события