Friday, 2 January 2026

GenAI і розумна докачка.


Всім привіт.

От чого не вистачає в багатьох безкоштовних інструментах GenAI ? 

Розумної докачки великих файлів, особливо моделей.

Розробники вважають що інтернет завжди стабільний, а файл моделі іноді не докачується, потім на диску лежить недокачаний файл, а сам GenAI-інструмент не знає як з цим бути.

Це класична помилка "Happy Path" (шляху щасливчика) у розробці - коли програміст пише код, розраховуючи, що мережа ідеальна, диск не переповниться, а світло не вимкнуть. Звісно коли ми користуємся безкоштовним ПЗ то всі претензії зайві, хоча побажання завжди можно залишити на github.

Для великих файлів (LLM моделі, ваги нейромереж .gguf, .bin, які важать гігабайти) простої докачки замало. Є ще одна величезна проблема - "биті" файли.

Файл може скачатися повністю (розмір зійдеться байт-у-байт), але всередині буде "сміття" через помилку мережі. Інструмент спробує завантажити таку модель і впаде з незрозумілою помилкою.

Ось "золотий стандарт" для завантажувача моделей, який вирішує проблему "недокачаного або битого файлу". Тому додаємо перевірку SHA256 хешу.

Цей код робить три речі (для Python 3.10+):

  • Перевіряє, чи файл вже є. Якщо він є і розмір збігається — перевіряє його цілісність (хеш).
  • Докачує, якщо файл неповний.
  • Видаляє файл, якщо після скачування хеш не зійшовся (щоб ви не зберігали сміття).

Python

import urllib.request

import urllib.error

import sys

import os

import hashlib

Sunday, 28 December 2025

Як описати шрифт в GenAI.

Привіт усім.

От цікаве питання виникло з новорічними листівками - як написати промпт щоб GenAI створив зображення з текстом визначеного шрифту?

Щоб отримати найкращий результат від Google Imagen, потрібно дотримуватися певної структури промпту.

Ось покрокова інструкція, як змусити Imagen створити текст із потрібним шрифтом:

1. Основне правило: лапки та ключові слова

Завжди беріть текст, який потрібно згенерувати, у подвійні лапки. Використовуйте фрази на кшталт text says, written text, the word "...".

2. Як описати шрифт

Оскільки ШІ не завжди розпізнає назви конкретних шрифтів (наприклад, "Roboto" або "Helvetica"), краще описувати їхній візуальний стиль.

Замість назви використовуйте категорії та прикметники:

  • За типом:

    • Serif font (із засічками, як Times New Roman - класичний, офіційний).

    • Sans-serif font (без засічок, як Arial - сучасний, мінімалістичний).

    • Cursive / Script / Handwritten (рукописний, каліграфія).

    • Monospace (як на друкарській машинці або в коді).

  • За стилем/настроєм:

    • Bold, Thick (жирний, товстий).

    • Elegant, Calligraphic (елегантний, весільний).

    • Graffiti (вуличний стиль).

    • Gothic (готичний, старовинний).

    • Cyberpunk, Futuristic, Digital (футуристичний, глітч-ефект).

    • Vintage, Retro 70s (старомодний, бульбашковий шрифт).

    • Neon (світиться).

3. Структура ідеального промпту

[Об'єкт/Сцена] + [Текст у лапках] + [Опис шрифту] + [Матеріал/Колір тексту] + [Розміщення]

4. Приклади промптів (англійською та українською)

Imagen краще розуміє англійську для тонких налаштувань типографіки, але українську теж сприймає.

Варіант 1: Неонова вивіска (Футуристичний стиль)

Prompt: A realistic photo of a rainy street at night. A bright pink neon sign on a brick wall explicitly says "OPEN BAR". The font is bold, sans-serif, and glowing. Cyberpunk aesthetics.

Варіант 2: Кав'ярня (Рукописний стиль)

Prompt: A cozy coffee shop interior. On a black chalkboard, the text "Morning Coffee" is written in white chalk. The font is elegant cursive calligraphy, artistic and flowing.


Варіант 3: Журнальна обкладинка (висока мода)

Prompt: A fashion magazine cover style. A model posing in a red dress. The title text "VOGUE" is at the top in large, bold, serif typeface, luxury gold texture.

Варіант 4: Ігровий логотип (3D стиль)

Prompt: A 3D render of the word "GAME OVER". The font is blocky, heavy, cartoon style. Made of cracked stone with lava glowing inside. Dark background.

Thursday, 25 December 2025

Ще раз про Code Assistant.

Привіт.

Місяць роботи з Code Assistant в Google AI Studio,  далі Асистент, і я вирішив переглянути свої погляди на рботу з ним. То ж пробіжу сьогодні по тому що писав раніше для порівняння. Курсивом те що було місяць тому. Погнали.

Варто кожного разу слідкувати щоб Асистент не почав перероблювати те що ви його не просили, він буває занадто активним щоб вам допомогти. 

Це майже неможливо, і ще буде добре коли Асистент засвідчить це вам в лівій панелі чату з ним. Інколи він свої "поліпшення" робить тайно(, тому раджу весь функціонал проекту перевіряти час від часу.

Взагалі можно скористатися варіантами бекапів коду як то на github або просто архівом zip собі на ПК. Але майте на увазі, шо відновлювати проект у разі краху будете руцями, майже копіпастом((, Асистент не має автоматичного відкату, або його можно попросити це зробити типу "fix it", але вирогідність щоб все буде Ок не 100%.

Сама розповсюджена помилка це "Failed to load app". Можу запевнити вас що Асистент до цього немає жодного відношення, і просити його це виправити це марна справа. Нажаль Асистент не бачить консолі браузера і повідомлення про мережеві помилки звідти не читає. В крайньому випадку можете скопіювати помилку з консолі йому в чат. Але, з мого досвіду, краще просто перечекати.

Ще іноді корисно просто просити його коротко -"онови код". В цьому випадку Асистент просто ще раз пробіжиться по всіх файлах проекту, і раптом виправить свій же баг.)

Тут так само треба пильнувати якщо ваш проект або впав або добряче перероблений не в бік ваших бажань, то варто просто зробити вихід з Асистента БЕЗ збереження змін. Ваш Асистент буде багато раз вибачатися, але не виправить те що накоїв...)

Тепре це неможливо, Google поміняв логіку користування Асистентом і код проекту збергіається після кожної зміни. Тому перед кожним НОВИМ ВЕЛИКИМ функціоналом раджу робити копію проекту. Потім після  відпрацювання (вдалого або ні) вирішуєте з якою копією проекту ви залишаєтесь далі.

Вихід з Асистента тепер навпаки, НЕ рекомендую, бо зараз є опція зробити відкат коду на контрольні точки, іноді це допомагає в поточній сесії. Логічно що після виходу тчк зникають назавжди.

Іноді варто вести з Асистентом мультимодальний діалог - коли він не розуміє що ви від нього хочете словами, то закинтьте йому ще скріншот "як треба", він чудово вміє аналізувати зображення.

На рахунок цього в  Асистенті є власна класна фішка - Annotation Mode!

Асистент любить накидувати пропозиції (suggestions) по ходу роботи з покращення вашого застосунку, але тут також є глюк - більшіcть з них вже можуть бути в проекті, тому на ваш розсуд. Але іноді запитати про покращення його варто, з фразою в кінці "нічого не роби, тільки пропонуй!"

А тут нічого не змінилося.

Бонус - якщо вам треба поправити якусь назву то не мучайте Асистента такими дрібничками, просто зайдіть в файл constans.ts и поміняйте акуратно вручну. Зазвичай всі константи там. Зміни в коді активуються миттєво.

Ставимо драйвера пакетом #2.

Привіт привіт.

Вчора мав нагоду ще раз скористатися пакетним інсталером драйверів. Але мені, чесно, не вистачило комфорту, а саме таймера виконання. Тому сьогодні буде друга розширена версія.

І зробимо це акуратно, перепишемо скрипт повністю але вже з урахуванням стандартного повзунка (Write-Progress).

Перед самим кодом коротке пояснення логіки - ми спочатку збираємо всі INF, щоб знати загальну кількість, далі йдемо по них циклом і після кожного кроку перемальовуємо прогрес. Інакше відсоток порахувати неможливо - це фундаментальне обмеження pnputil.

І щоб було зрозуміло, що саме ми вважаємо “інстальовано”, pnputil у нормальному режимі повертає текстовий результат, з якого можна визначити:

  • драйвер додано та встановлено;
  • драйвер вже був у Driver Store;
  • або сталася помилка.

Ми не будемо парсити все до символа (це ненадійно між версіями Windows), а використаємо практичний і стабільний підхід:

  • якщо pnputil повернув ExitCode = 0 → вважаємо драйвер успішно обробленим;
  • зберігаємо шлях до INF у список;
  • наприкінці показуємо зведення.

Маємо інженерно прийнятний компроміс між точністю і стабільністю.

Tuesday, 23 December 2025

Фішки wildcards.

Привіт привіт.

Мені здається що підтримка wildcards в Forge та Fooocus то найкраща фіча яка вже ніколи не з'явиться в інших GenAI інструментах. Я можу таку функціональність реалізувати в Pixel AI Studio, але вона швидко використає ваші кошти на АРІ-запити.((

То ж в мене всі карти знаходяться на сервері в окремій теці на які зроблені посилання:

  • /wildcards/ for Foooocus (config.txt)
  • /wildcards/ by symlink for Forge (Dynamic Prompts extension)

Згадав я про мегапак від в'єтнамських шанувальників wildcards, де промпт з wildcard посилається на інший wildcard і так далі. Як то виглядає?

Можливо так:

masterpiece,ultra realistic,32k,extremely detailed CG unity 8k wallpaper, best quality,({summer day | autumn day | winter day | spring day }),lady ,necklace ,eardrop, __*/city__, ( __*/colors__ __*/mixwear__ ) , __*/haircolor__ hair __*/hairstyle__ ,

або навіть так:


Уявіть, і це працює!))

Версия на печать

Популярное