{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Здоровий глузд: дописи з тегом chatgpt",
    "_rss_description": "Олександр Колодько. Інформаційний та навігаційний дизайнер. Співзасновник команди ARC, співзасновник та головний дизайнер в Агентах змін (А3). Пишу про дизайн і цікаве мені · alexkolodko.com · wayfinding.systems",
    "_rss_language": "uk",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/blog-archive.alexkolodko.com\/tags\/chatgpt\/",
    "feed_url": "https:\/\/blog-archive.alexkolodko.com\/tags\/chatgpt\/json\/",
    "icon": "https:\/\/blog-archive.alexkolodko.com\/pictures\/userpic\/userpic@2x.jpg?1768915547",
    "authors": [
        {
            "name": "Олександр Колодько",
            "url": "https:\/\/blog-archive.alexkolodko.com\/",
            "avatar": "https:\/\/blog-archive.alexkolodko.com\/pictures\/userpic\/userpic@2x.jpg?1768915547"
        }
    ],
    "items": [
        {
            "id": "124",
            "url": "https:\/\/blog-archive.alexkolodko.com\/all\/automation-pdf-split\/",
            "title": "Конвеєр: автоматизоване нарізання PDF на різні файли",
            "content_html": "<p>В роботі над дизайном багатьох макетів буває дуже зручно їх всі робити в одному файлі: можна простіше копіювати елементи та стилі, мати єдину базу символів, бачити загальну картинку одразу на всіх макетах тощо.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/ai-file.jpg\" width=\"2400\" height=\"1381\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Багато макетів різних розмірів у Adobe Illustrator<\/div>\n<\/div>\n<p>Але редактори погано пристосовані для збереження потім таких робочих файлів, що йтимуть на виробництво. Процес збереження купи файлів починає нагадувати нудну справу, в якій ви вибираєте що зберігати, якось розділяєте на окремі файли та при збереженні у різні формати правильно називаєте все. Така безглузда трата робочого часу і це нууудно 🥱. І в такій ручній роботі точно виникатимуть помилки, тож доведеться починати наново.<\/p>\n<p>У ІнДизайні є можливість зберігати PDF посторінково. Але можливості обмежені й потім все одно треба перейменовувати файли, як треба. У Ілюстраторі взагалі така опція є тільки для збереження окремих артбордів для екранів (у RGB), тож для друку це не підходить. І вирішувати це можна сторонніми скриптами, як-то скрипт для збереження файлу у різні формати, який ми робили для своєї роботи.<\/p>\n<p>Але це не вирішує задачу, коли у вас частина макетів двосторонні й ці різні сторони мають зберегтись, наприклад, в один PDF на кілька сторінок.<\/p>\n<p>А якщо вже після збереження потрібно буде внести якісь зміни, то весь цей нудний процес треба робити спочатку і добре якщо не для всіх файлів.<\/p>\n<h2>Конвеєр та алгоритм<\/h2>\n<p>Мені цікаво шукати і організовувати дизайн-конвеєр під такі задачі, оскільки вони точно повторюватимуться, тож автоматизація дає шалену економію часу, який можна витратити на цікавіші речі.<\/p>\n<p>Колись писав про <a href=\"https:\/\/blog.alexkolodko.com\/all\/mass-rename\/\">масове перейменування файлів<\/a>, які перед цим нарізав в Акробаті на окремі файли. Але це все одно довго, треба ще швидше.<\/p>\n<p>Спочатку потрібно подумати над наявними можливостями й алгоритмом. Кожен редактор може за раз зберігати всі або діапазон сторінок у суцільний PDF-файл. Тож якщо мати інструкцію, яка скаже які сторінки мають піти в який файл і як ці файли назвати. Така інструкція — своєрідна «маска», яку можна застосувати для файлу.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">1-2=filename01\n3=filename02\n4-5=filename03\n6-8 10=filename04\n…<\/code><\/pre><p>де:<\/p>\n<ul>\n<li>1-2 — сторінки документа (може містити одну цифру, діапазон через дефіс, перелік окремих сторінок через пробіл, також доступні параметри початку і кінця документа <tt>start-10<\/tt> чи <tt>57-end<\/tt> )<\/li>\n<li>= — технічний розділювач (у назвах файлах його не повинно бути)<\/li>\n<li>filename01 — назва вашого майбутнього PDF-файлу, в який в який увійдуть сторінки з діапазону (без розширення .pdf)<\/li>\n<\/ul>\n<h2>bash + PDFtk<\/h2>\n<p>Для цього bash (потрібна версія 4 і вище, перевіряється у терміналі через <tt>bash -v<\/tt>, встановлюється через <tt> brew install bash<\/tt>) та <a href=\"https:\/\/www.pdflabs.com\/tools\/pdftk-server\/\">PDF Toolkit (PDFtk<\/a>).<\/p>\n<p>За допомогою ChatGPT в кілька ітерацій зробив скрипт, що бере вказаний PDF-файл, окремо бере текстову «маску» у TXT, як масив назв, в яких<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\n\ninput_file=&quot;Tustan-Signs-All.pdf&quot;\ndata_file=&quot;range.txt&quot;\n\n# Read page ranges and custom names from the external file into a single array\nreadarray -t page_data &lt; &quot;$data_file&quot;\n\n# Loop through the array and split the PDF\nfor data in &quot;${page_data[@]}&quot;; do\n    IFS=&quot;=&quot; read -r range custom_name &lt;&lt;&lt; &quot;$data&quot;\n    output_file=&quot;${custom_name\/\/ \/_}.pdf&quot;  # Replace spaces with underscores in the custom name\n    pdftk &quot;$input_file&quot; cat $range output &quot;$output_file&quot;\n    echo &quot;$output_file — Done&quot;\ndone<\/code><\/pre><p>Для більшої універсальності я виніс вказання файлів, як аргументів у командному рядку. Тож тепер можна скопіювати скрипт у потрібну теку та запустити командою:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">bash splitter-pro.sh filename.pdf mask.txt<\/code><\/pre><p>де:<\/p>\n<ul>\n<li>filename.pdf — назва вашого PDF-файлу<\/li>\n<li>mask.txt — текстовий файл з «маскою»<\/li>\n<\/ul>\n<p>Сам скрипт виглядає так ($1 — перший аргумент, тобто PDF-файл; $2 — другий аргумент, тобто TXT-файл):<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\n\ninput_file=$1\ndata_file=$2\n\n# Read page ranges and custom names from the external file into a single array. Requaire bash 4.0\nreadarray -t page_data &lt; &quot;$data_file&quot;\n\n# Loop through the array and split the PDF\nfor data in &quot;${page_data[@]}&quot;; do\n    IFS=&quot;=&quot; read -r range custom_name &lt;&lt;&lt; &quot;$data&quot;\n    output_file=&quot;${custom_name\/\/ \/_}.pdf&quot;  # Replace spaces with underscores in the custom name\n    pdftk &quot;$input_file&quot; cat $range output &quot;$output_file&quot;\n    echo &quot;$output_file — Done&quot;\ndone<\/code><\/pre><p>Приклад «маски», де спочатку номери сторінок, символ =, а далі назва файла (Проект-Знак-Точка-Розмір):<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">1-2=Tustan-WF-Sign-Т1-400x600\n3=Tustan-WF-Sign-Т2.1-200x350\n4=Tustan-WF-Sign-Т2.2-200x350\n5=Tustan-WF-Sign-Т3.1-200x350\n6=Tustan-WF-Sign-Т3.2-200x350\n7-8=Tustan-WF-Sign-Т4.1-T4.2-200x600\n9-10=Tustan-WF-Sign-Т4.3-T4.4-200x600\n11=Tustan-WF-Sign-Т5.1-200x600\n12=Tustan-WF-Sign-Т5.2-200x600\n13=Tustan-WF-Sign-Т6.1-200x600\n14=Tustan-WF-Sign-Т6.2-200x600\n15=Tustan-WF-Sign-Т7.1-200x600\n16=Tustan-WF-Sign-Т7.2-200x600\n17=Tustan-WF-Sign-Т8.1-200x600\n18=Tustan-WF-Sign-Т8.2-200x600\n19=Tustan-WF-Sign-Т9.1-200x600\n20=Tustan-WF-Sign-Т9.2-200x600\n21=Tustan-WF-Sign-Т9.3-200x600\n22-23=Tustan-WF-Sign-Т10-200x600\n…<\/code><\/pre><p>Весь процес виглядає ось так:<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/tustan-wf-signs-automation-x2.mp4#t=0.001\" width=\"2560\" height=\"1507.1428571429\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Розділення PDF-файлу по «масці»<\/div>\n<\/div>\n<p>Також можна цей підхід використовувати для нарізання макетів по одному і одразу з правильним перейменуванням файлів. Колись робив скрипт для перейменування пачки файлів, але тепер можна цей крок пропустити й робити все швидше.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/metromap-tram-x2.mp4#t=0.001\" width=\"2560\" height=\"1477.9676158571\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Розділення на файли по одній сторінці<\/div>\n<\/div>\n<h2>Нюанси<\/h2>\n<p><b>№1. <\/b>Порядок артбордів\/сторінок у файлі має завжди зберігатись і співпадає з «маскою». Тож при зміні порядку, треба міняти й маску.<\/p>\n<p><b>№2. <\/b>При збереженні PDF з Ілюстратора рекомендую прибирати прапорець <i>Preserve Illustrator Editing Capabilities<\/i>. Так при розділенні PDF у файлі не буде нічого, що було поза потрібного артборду. Якщо ж цей прапорець увімкнутий, то навіть якщо ви бачитиме у прев’ю лише один артборд, все одно при відкритті файлу в Ілюстраторі в ньому будуть всі артборди й об’єкти, що були в оригінальному AI-файлі.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/ai-save-pdf-settings.png\" width=\"1436\" height=\"1182\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Налаштування при збереженні PDF<\/div>\n<\/div>\n<p><b>№3. <\/b>Як і з будь-якою автоматизацією її треба уважно перевірити, коли створюєте. Наприклад, можна помилково вказати не ті сторінки в «масці» і файл нарізатиметься неправильно.<\/p>\n<h2>Бонус №1: запуск скрипку одразу в теці<\/h2>\n<p>Щоб ще прискорити процес і навіть не запускати консоль, то можна зібрати виконавчий файл .command, який запускатиме все в наявній теці.\u2028<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\n\n# Change directory to be where the command is.\ncd &quot;$(cd &quot;$(dirname &quot;$0&quot;)&quot; &gt; \/dev\/null &amp;&amp; pwd)&quot;\n\u2028# Run script with arguments\nbash pdf-splitter.sh metromap_tram_v1.12.pdf Metromap-Tram-Range.txt<\/code><\/pre><p>Єдина маніпуляція, яку треба зробити — дати системі права на виконання скрипту в нашій теці:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">chmod u+x splitter.command<\/code><\/pre><p>Таким чином у теку копіюються сам bash-скрипт, маска .txt, вхідний .pdf та у command файлі замінюються значення. Тепер просто зберігаєте PDF, запускайте файл, п’єте каву ☕️, готово.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/command-file-x2.mov#t=0.001\" width=\"2560\" height=\"1469.3914014517\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Скрипт упакований у виконавчий файл<\/div>\n<\/div>\n<h2>Бонус №2: артборди в AI → «маска»<\/h2>\n<p>Якщо ви називали артборди в Ілюстраторі так, як би ви хотіли мати готові файли, то можна теж це використати і скриптом вже в самому AI зберегти всі назви артбордів, як «маску» у текстовому файлі. Знову ChatGPT запропонував доволі простий скрипт, що робить на робочому столі готовий txt-файл з маскою.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/ai-artboards-to-txt-x2.mp4#t=0.001\" width=\"2560\" height=\"1470.8207705193\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Робота скрипта<\/div>\n<\/div>\n<p>Трохи допиляв, що він робив одразу потрібний вигляд:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/\/ Function to export artboard names to a text file\nfunction exportArtboardNames() {\n    var doc = app.activeDocument;\n    var artboards = doc.artboards;\n    var file = new File(&quot;~\/Desktop\/artboard_names.txt&quot;);\n    file.open(&quot;w&quot;);\n\n    for (var i = 0; i &lt; artboards.length; i++) {\n        var artboard = artboards[i];\n        var artboardName = artboard.name;\n        file.writeln(&quot;&quot; + (i + 1) + &quot;=&quot; + artboardName);\n    }\n\n    file.close();\n    alert(&quot;Artboard names exported to ~\/Desktop\/artboard_names.txt&quot;);\n}\n\n\/\/ Run the exportArtboardNames function\nexportArtboardNames();<\/code><\/pre><p>Напевно було б можна написати скрипт саме для Ілюстратора, який би з «маскою» зберігав певні артборди, але всі подібні скрипти в Adobe Illustrator працюють доволі повільно. Тому найшвидше створювати конвеєр іншими інструментами.<\/p>\n<h2>Бонус №3: зробити зі скрипта окрему cli-програму (Mac OS)<\/h2>\n<p>Копіювати скрипт у кожну теку не зручно, тож можна піти далі і зробити з цього скрипта cli-програму, яку можна буде викликати просто у певній теці одразу з терміналу (описав як зробити це у Mac OS, але думаю у Windows це так само можливо; якщо хтось напише як це зробити, то додам у статтю).<\/p>\n<p>Для цього модифікуємо спочатку сам скрипт. У першому рядку міняємо шлях до bash:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/usr\/local\/bin\/bash\n\ninput_file=$1\ndata_file=$2\n\n# Read page ranges and custom names from the external file into a single array. Requaire bash 4.0\nreadarray -t page_data &lt; &quot;$data_file&quot;\n\n# Loop through the array and split the PDF\nfor data in &quot;${page_data[@]}&quot;; do\n    IFS=&quot;=&quot; read -r range custom_name &lt;&lt;&lt; &quot;$data&quot;\n    output_file=&quot;${custom_name\/\/ \/_}.pdf&quot;  # Replace spaces with underscores in the custom name\n    pdftk &quot;$input_file&quot; cat $range output &quot;$output_file&quot;\n    echo &quot;$output_file — Done&quot;\ndone<\/code><\/pre><p>Потім краще прибрати розширення і назвати файл так, як ви будете викликати команду. У моєму випадку — <i>pdfsplitter<\/i>.<\/p>\n<p>Далі скопіювати файл у директорію \/<i>usr\/local\/bin<\/i>, можна одразу в терміналі:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">sudo cp pdfsplitter \/usr\/local\/bin<\/code><\/pre><p>Тепер можна у терміналі викликати нашу команду. Якщо ж при цьому буде відображатись помилка доступу, на кшталт, «<i>zsh: permission denied: pdfsplitter<\/i>», то треба дати системі дозвіл використати нашу програму. Наприклад, командою:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">chmod 755 \/usr\/local\/bin\/pdfsplitter<\/code><\/pre><p>Відтепер ви самі додали програму у термінал і її можна запускати у будь-якій теці, не копіюючи туди скрипт.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/script-as-cli-program-x2.mp4#t=0.001\" width=\"2560\" height=\"1470.8207705193\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Скрипт, як cli-програма<\/div>\n<\/div>\n<p><hr><br \/>\nЗавантажити скрипти:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.dropbox.com\/scl\/fi\/zpdpqvcjau4ps7qaoqn9b\/pdf-splitter.sh?rlkey=nsgiia85dj5noveqgoab3o9hz&dl=0\">pdf-splitter.sh<\/a> — розділювач PDF<\/li>\n<li><a href=\"https:\/\/www.dropbox.com\/scl\/fi\/sequwpl5crthcnsyb8pfn\/artboard-names-to-file.jsx?rlkey=0eysee0w68fa99c8yg9vpu4p4&dl=0\">artboard-names-to-file.jsx<\/a> — назви артбордів AI у TXT файл<\/li>\n<li><a href=\"https:\/\/www.dropbox.com\/scl\/fi\/303ikqdr93bt0ypzwgzet\/splitter.command?rlkey=7uj309zmg2ijodxpqr42zx1qo&dl=0\">splitter.command<\/a> — приклад виконавчого файлу запуску скрипта; має розміщуватись в одній теці з маскою та pdf-splitter.sh.<\/li>\n<\/ul>\n<p><hr><\/p>\n<div><div style=\"float: left;\"><p><span style=\"font-weight:bold; font-size: 3em\"><b>₴<\/b><\/span><\/p>\n<\/div><div style=\"padding: 1em 0 0 4em\"><p>Якщо вам було цікаво та корисно, можете пригостити мене кавою ☕️: картка Монобанку: <tt>4441114450427339<\/tt> або <a href=\"https:\/\/send.monobank.ua\/5jVrTaRziu\">через сайт<\/a>.<\/p>\n<\/div><\/div>",
            "date_published": "2023-11-30T17:07:41+02:00",
            "date_modified": "2023-12-05T13:07:07+02:00",
            "tags": [
                "chatgpt",
                "інструменти",
                "автоматизація",
                "дизайн-конвеєр",
                "конвеєр"
            ],
            "image": "https:\/\/blog-archive.alexkolodko.com\/pictures\/ai-file.jpg",
            "_date_published_rfc2822": "Thu, 30 Nov 2023 17:07:41 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "124",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/ai-file.jpg",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/ai-save-pdf-settings.png"
                ]
            }
        },
        {
            "id": "94",
            "url": "https:\/\/blog-archive.alexkolodko.com\/all\/design-automation-with-chatgpt-part2\/",
            "title": "Автоматизація дизайну з ChatGPT. Частина 2: скрипти для InDesign, Figma, Google Docs, Automator",
            "content_html": "<p>Продовжую експерименти написання простих скриптів з допомогою ChatGPT. Тут <a href=\"https:\/\/blog.alexkolodko.com\/all\/adobe-scripting-with-chatgpt\/\">перша частина<\/a> зі скриптами для Adobe Illustrator.<\/p>\n<h2>1. Заміна шрифтів у InDesign<\/h2>\n<p>Перше, що захотілося зробити, це перенести скрипт з Ілюстратора в Індизайн (хоч скрипти й схожі, але у програм всередині різна специфіка).<\/p>\n<p>Тож спочатку я спробував подібними до попередніх запитами згенерувати скрипт. Але з 5-6 спроб робочого коду не вийшло. Тому далі я знайшов <a href=\"https:\/\/community.adobe.com\/t5\/indesign-discussions\/font-replacement-scripting-javascript\/td-p\/11021763\">у спільноті Адоб<\/a> шматок коду схожий на те, що мені треба.<\/p>\n<p>Але для його використання для різних накреслень і шрифтів не вистачало масиву значень на початку та циклу його виконання. Тому я скопіював код і попросив ChatGPT додати мені ці модулі. І за кілька уточнень вийшло робоче рішення.<\/p>\n<p>Далі зробив ще одну версію, попросивши додати виклик модального вікна, в яке можна ввести руками потрібні назви шрифтів. І він мені це теж зробив:<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/automation-1-1-2-indesign-x4-noaudio.mp4#t=0.001\" width=\"2560\" height=\"1600\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Створення скрипту заміни шрифту в InDesign<\/div>\n<\/div>\n<p>Завантажити скрипти:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.dropbox.com\/s\/lgcoaglq2yl7lkn\/Font%20Replacer%20INDD.jsx?dl=0\">Версія<\/a>, яка заміняє усі шрифти у всіх фреймах;<\/li>\n<li><a href=\"https:\/\/www.dropbox.com\/s\/sh4p04jj41wq4j9\/Font%20Replacer%20INDD%20Selected.jsx?dl=0\">Версія<\/a>, яка заміняє шрифт лише у виділеному тексті;<\/li>\n<li><a href=\"https:\/\/www.dropbox.com\/s\/zdouo1ppa8sq9ka\/Font%20Replacer%20INDD%20SelectedORNot.jsx?dl=0\">Версія<\/a>, заміняє шрифт або у виділених фреймах, або в усіх;<\/li>\n<li><a href=\"https:\/\/www.dropbox.com\/s\/6ifotvcavyeinit\/Font%20Replacer%20INDD%20with%20window.jsx?dl=0\">Версія<\/a> з двома вікнами введення назви старого і нового шрифтів;<\/li>\n<li><a href=\"https:\/\/www.dropbox.com\/s\/eiazxfnj92d09ze\/Font%20Replacer%20INDD%20ww2.jsx?dl=0\">Версія<\/a> з одним вікном, в якому можна ввести кілька шрифтів.<\/li>\n<\/ul>\n<h2>1.2. Заміна стилів у InDesign<\/h2>\n<p>Окрім зміни шрифтів, попросив придумати скрипт, для заміни одних стилів на інші та ще попросив додати вікно, в якому ці назви можна ввести. Отримав <a href=\"https:\/\/www.dropbox.com\/s\/l252xyt2flartv8\/Change%20style%20with%20one%20window.jsx?dl=0\">такий скрипт<\/a>.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/indesign-1-2-1-changestyles-x2.mp4#t=0.001\" width=\"2560\" height=\"1600\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Скрипт для InDesign, який заміняє один стиль на інший<\/div>\n<\/div>\n<p>А далі попросив замість полів для введення тексту зробити спадні списки зі всіма наявними стилями у документі. Але скрипт сходу не запрацював, але його можна об’єднати з попередніми.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/indesign-1-2-2-changestyles-dropdowns-x2.mp4#t=0.001\" width=\"2560\" height=\"1600\" controls alt=\"\" \/>\n\n<\/div>\n<h2>2. Збереження Google Docs у тій самій теці на Драйві<\/h2>\n<p>У мене є потреба періодично зберігати поруч з Гугл Документом також і PDF, який я потім можу відправити. При збереженні через меню документів сам документ у мене завантажується у Downloads, як і решта файлів. Але потім мені потрібно знову завантажувати PDF у ту саму теку на драйв. Не складно, але це витрата часу.<\/p>\n<p>Шукав приклади скриптів, які  б могли зберігати PDF у ту саму теку, але робочих не знайшов. І от попросив ChatGPT запропонувати мені такий скрипт. І з першого разу отримав робочий варіант:<\/p>\n<pre>\nfunction onOpen() {\n  var ui = DocumentApp.getUi();\n  ui.createAddonMenu()\n      .addItem(’Convert to PDF’, ’convertDocToPDF’)\n      .addToUi();\n}\n\nfunction convertDocToPDF() {\n  var docFile = DocumentApp.getActiveDocument().getId();\n  var doc = DriveApp.getFileById(docFile);\n  var pdfFile = DriveApp.createFile(doc.getAs(’application\/pdf’)).setName(doc.getName() + «.pdf»);\n  var parentFolder = doc.getParents().next();\n  pdfFile.makeCopy(parentFolder);\n  pdfFile.setTrashed(true);\n}\n\n<\/pre>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/google-script-with-chatgpt-x2.mp4#t=0.001\" width=\"2560\" height=\"1600\" controls alt=\"\" \/>\n\n<\/div>\n<p>Також ChatGPT описав інструкцію, як цей скрипт опублікувати, щоб він працював не тільки у конкретному документі, але це виявилось не так просто, як зробити скрипт 😅.<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"2400\" data-ratio=\"1.6\">\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-2-1.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-2-2.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<\/div>\n<\/div>\n<h2>3. Транслітерація тексту в Figma<\/h2>\n<p>Колись для транслітерації назв зробили разом з програмістами простий сайт з простим JS, якій заміняв літери на інші за певними правилами. Потім з цього створили скрипти для AI та ID. А потім я стикнувся з такою з задачею у Фігмі, але робочих рішень не знайшов. Щось покрутив, але кинув, бо моїх знань було недостатньо.<\/p>\n<p>І от спробував згодувати цю задачу ChatGPT. Взяв увесь наявний скрипт, як приклад, і попросив придумати, як з цього скрипту зробити скрипт для Фігми. Спочатку запропонований код транслітерував всі тексти на сторінці. Через уточнення він це робив для виділеного тексту, а якщо не виділений, то вже для всього.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/automation-3-figma-x2.mp4#t=0.001\" width=\"2560\" height=\"1600\" controls alt=\"\" \/>\n\n<\/div>\n<p>І у першому варіанті цей код навіть працює, транслітерує, лишилось тільки допиляти для виключень і різних випадків. Далі вже можна туди додати якийсь інтерфейс за потреби. Тест вважаю вдалим.<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"2400\" data-ratio=\"1.6\">\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-3-1.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-3-2.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-3-3.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-caption\">Код транслітерації для Фігми від ChatGPT<\/div>\n<\/div>\n<h2>4. Створення регулярних виразів для GREP \/ RegEx<\/h2>\n<p>Про грепи (або регулярні вирази, або regex) розповідав у лекції і все хотів написати детальну статтю зі всіма посиланнями, які назбирав, але все не знаходив час. GREP дуже потужна штука, але в неї був дуже високий поріг входу, щоб розуміти як будувати потрібні правильні вирази.<\/p>\n<p>І от тепер з ChatGPT цей поріг можна вважати зниженим, бо він дуже гарно конструює навіть складні вирази.<\/p>\n<p>Наприклад, давайте в Індизайні після всіх прийменників додамо нерозривні пробіли у всьому тексті через GREP-стилі. Для цього потрібно знайти у тексті всі прийменники. Тож створюємо стиль для символів без перенесень (no break) та питаємо у ChatGPT список всіх прийменників у вигляді регулярного виразу.<\/p>\n<p>Він розуміє українську і віддає згенерований вираз вже у потрібній формі. Єдине що цей regex не зовсім підійде у Індизайн, тому уточнюємо що це має бути саме GREP для Індизайну і отримуємо робочий запит.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/automation-4-1-indesign-grep-find-x4.mp4#t=0.001\" width=\"2560\" height=\"1600\" controls alt=\"\" \/>\n\n<\/div>\n<p>Так само можна конструювати грепи, які знаходять прізвища та ініціали, одиниці вимірювання, дати та місяці, номери телефонів у різних видах тощо. Далі потім знайдені дані (одразу всі, в усьому тексті) можна або переформатовувати або задавати їм потрібний стиль.<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"2400\" data-ratio=\"1.6\">\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-1.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-2.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-3.png\" width=\"1694\" height=\"950\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-4.png\" width=\"1650\" height=\"1936\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-5.png\" width=\"1614\" height=\"1074\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-6.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-7.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-8.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-9.png\" width=\"1604\" height=\"1176\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-caption\">Приклади різних регулярних виразів<\/div>\n<\/div>\n<p>Регулярні вирази — дуже технічно-орієнтований інструмент. Тому тепер до цього інструменту є людино-орієнтований інтерфейс, який трансформує ваш запит у зрозумілу машині форму.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/automation-4-2-indesign-grep-replace-x4.mp4#t=0.001\" width=\"2560\" height=\"1600\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">GREP заміни кириличних лапок латинськими<\/div>\n<\/div>\n<h2>5.1 Зібрати відео зі скріншотів (з використанням ffmpeg)<\/h2>\n<p>Також в лекції згадував, що також у автоматизації дуже допомагають різні консольні команди (cli, command line interface), які заточені на певні дії. З ними така сама ситуація — щоб ними користуватись, потрібно розбиратись в прикладах та документації, що теж техно-орієнтованість.<\/p>\n<p>Тому тут можна теж ChatGPT використовувати, як посередника для пошуку потрібної команди з потрібними параметрами. Наприклад, маємо купу скріншотів зроблених автоматично з різницею у 4-5 секунд, з яких хочемо зробити скрінкаст.<\/p>\n<p>Для роботи з відео є потужна програма <a href=\"https:\/\/ffmpeg.org\/download.html\">ffmpeg<\/a>, яка працює з командного рядка. Тож попросив ChatGPT запропонувати команду для ffmpeg, яка б об’єднала картинки у відео. З першого разу отримуємо варіант, який на 100% працює та робить відео з заданою кількістю кадрів, які можна скоригувати.<\/p>\n<pre>\nffmpeg -framerate 30 -pattern_type glob -i ’\/path\/to\/folder\/*.jpg’ -c:v libx264 -pix_fmt yuv420p \/path\/to\/output.mp4\n<\/pre>\n<p>Таким чином не потрібні ніякі додаткові програми, для створення відео з картинок: за допомогою Автоматора робимо скріншоти, а через ffmpeg отримуємо відео.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/automation-5-1-x4.mp4#t=0.001\" width=\"2560\" height=\"1600\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Збір відео з окремих картинок<\/div>\n<\/div>\n<h2>5.2 Компресія відео (з використанням ffmpeg)<\/h2>\n<p>Так само можна пошукати запити і на інші задачі з відео, наприклад, перезберегти з певною компресією чи зміною розміру, або прискоренням.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/automation-5-2-compress-video-x4-noaudio.mp4#t=0.001\" width=\"2560\" height=\"1600\" controls alt=\"\" \/>\n\n<\/div>\n<p>Раніше я шукав налаштування команд на Stackoverflow, а зараз швидше спитати у ChatGPT. Приклади запитів.<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"2400\" data-ratio=\"1.6\">\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-5-2-1-compress-video.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-5-2-2-compress-video.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<\/div>\n<\/div>\n<p>Компресія відео з ffmpeg<\/p>\n<h2>6. Зміна в наявному скрипті для Автоматора (Apple Script)<\/h2>\n<p>До попереднього пункту: для створення скрінкасту у мене був скрипт, який робив скріншот екрану і клав у потрібну теку в Дропбоксі, а потім зі скріншотів збиралося відео.<\/p>\n<p>Зараз Дропбокс змінив і виходить старий скрипт некоректно працює. Йти шукати у документації до AppleScript як змінити шлях було б довго. Тому скопіював наявний скрипт і попросив замінити шлях збереження скріншотів у теку \/<i>Desktop<\/i>.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/automation-6-applescript-x4.mp4#t=0.001\" width=\"2560\" height=\"1600\" controls alt=\"\" \/>\n\n<\/div>\n<h2>7. Збереження в TIFF у Adobe Illustrator<\/h2>\n<p>Ще попросив зробити скрипт для швидкого збереження артборду у TIFF з заданим DPI. Отримав отакий варіант, який видавав помилку. Знайшов у спільноті Адоба відповідь зі схожою частиною, та побачив що один з параметрів замість IBM має називатись IBMPC, замінив, запрацювало. Тобто весь скрипт робочий, але помилка була в одному з параметрів. <a href=\"https:\/\/www.dropbox.com\/s\/g6u54xerw8lg4v4\/toTIFF.jsx?dl=0\">Завантажити скрипт<\/a>.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/automation-7-1-w2400.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Збереження артбоду в TIFF 300dpi<\/div>\n<\/div>\n<h2>8. OSM Overpass Query<\/h2>\n<p>Деякі системи хоч і доступні всім, але поріг входу в них занадто високий. Але ChatGPT і тут зможе допомогти його подолати.<\/p>\n<p>У OpenStreetMap (карта\/база даних, які відкриті для всіх) зберігається величезна база геоданих, доступ до яких не суперпростий. І в OSM є мова запитів Overpass, яка дозволяє вивантажувати \/ запитувати якусь певну частину тих даних. Так от Overpass супер-неінтуітивна мова, і тут Chat GPT допомагає перекласти запит з людської на машинну.<\/p>\n<p><a href=\"https:\/\/twitter.com\/lemonodor\/status\/1636849040548675584\">twitter.com\/lemonodor\/status\/1636849040548675584<\/a><\/p><h2>P.S.<\/h2>\n<p>І це я скористався лише безкоштовною версією ChatGPT (модель GPT 3.5), і вже відчув, що стаю продуктивнішим ніби маю ще один механізований маніпулятор на додачу до рук, який розуміє що я хочу зробити та робить це швидше,<\/p>\n<p>Тепер спробую модель Codex (Github Copilot), яка створювалась як раз для написання коду, а також GPT4. Напишу потім, що з цього вийшло.<\/p>\n<p><i>Також хотів проілюструвати цю думку згенерувавши картинку людини з ще оною механізованою рукою, накшталт, технодесандників з Вархаммеру, але з 20 спроб у Midjourney v4 мого задуму не вийшло<\/i> ¯\\_(ツ)_\/¯<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"1024\" data-ratio=\"1\">\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_5e4ed387-75ea-434f-80ad-54a6bbf25a92-transformed.png\" width=\"1024\" height=\"1024\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_c97b8485-4aa5-4fcc-aba3-c6bbdc06f756-transformed.png\" width=\"1024\" height=\"1024\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_augmentics_stay_with_laptop_at_the_large_f_35d6b34f-06c8-42a9-bb5f-a9f7d0228c89.png\" width=\"1024\" height=\"1024\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_augmentics_stay_with_laptop_at_the_large_f_366792c8-fc63-431c-adb1-e75029104bb6.png\" width=\"1024\" height=\"1024\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_augmentics_stay_with_laptop_at_the_large_f_b5de7f02-f43b-4fd6-b01c-4c33fcdace3e.png\" width=\"1024\" height=\"1024\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_bionic_robotic_mechanical_manipulator_in_h_4edd41d4-5a33-488d-ad2c-58255555764f.png\" width=\"1024\" height=\"1024\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_bionic_robotic_mechanical_manipulator_in_h_79d5dd21-a324-4f24-b5c2-ce37832c925b.png\" width=\"1024\" height=\"1024\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_5e4ed387-75ea-434f-80ad-54a6bbf25a92.png\" width=\"1024\" height=\"1024\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_15cc879c-6032-47b5-883c-56ccb48732cb.png\" width=\"1024\" height=\"1024\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_bb7622b8-8dac-41de-9925-d14892d79a05.png\" width=\"1024\" height=\"1024\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_c97b8485-4aa5-4fcc-aba3-c6bbdc06f756.png\" width=\"1024\" height=\"1024\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_techmarine_warhammer_40k_style_with_robotic_arm_sit_092b8d8f-7132-4b40-9394-dd83607d6cb8.png\" width=\"1024\" height=\"1024\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_techno_spacemarine_warhammer40k_style_with_robotic__b100e5a6-8d87-4b47-83cf-3151991a242a.png\" width=\"1024\" height=\"1024\" alt=\"\" \/>\n<\/div>\n<\/div>\n<p><hr><\/p>\n<div><div style=\"float: left;\"><p><span style=\"font-weight:bold; font-size: 3em\"><b>?<\/b><\/span><\/p>\n<\/div><div style=\"padding: 1em 0 0 4em\"><p>Якщо у вас приклади вашого повторюваного дизайн-процесу, який ви повторюєте щоразу і витрачаєте свій час, напишіть на <a href=\"mailto:alexkolodko@gmail.com\">пошту<\/a> або у <a href=\"https:\/\/t.me\/alexkolodko\">телеграм<\/a>.<\/p>\n<\/div><\/div><p><hr><\/p>\n<div><div style=\"float: left;\"><p><span style=\"font-weight:bold; font-size: 3em\"><b>₴<\/b><\/span><\/p>\n<\/div><div style=\"padding: 1em 0 0 4em\"><p>Якщо вам було цікаво та корисно, можете пригостити мене кавою ☕️: картка Монобанку: <tt>4441114450427339<\/tt> або <a href=\"https:\/\/send.monobank.ua\/5jVrTaRziu\">через сайт<\/a>.<\/p>\n<\/div><\/div>",
            "date_published": "2023-03-24T22:37:31+02:00",
            "date_modified": "2023-03-24T22:38:54+02:00",
            "tags": [
                "adobe",
                "automator",
                "chatgpt",
                "figma",
                "grep",
                "illustrator",
                "indesign",
                "автоматизація",
                "ші"
            ],
            "image": "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-2-1.png",
            "_date_published_rfc2822": "Fri, 24 Mar 2023 22:37:31 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "94",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "jquery\/jquery.js",
                    "fotorama\/fotorama.css",
                    "fotorama\/fotorama.js",
                    "https:\/\/platform.twitter.com\/widgets.js",
                    "embedded-tweet\/embedded-tweet.js"
                ],
                "og_images": [
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-2-1.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-2-2.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-3-1.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-3-2.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-3-3.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-1.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-2.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-3.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-4.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-5.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-6.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-7.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-8.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-4-9.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-5-2-1-compress-video.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/_automation-5-2-2-compress-video.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/automation-7-1-w2400.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_5e4ed387-75ea-434f-80ad-54a6bbf25a92-transformed.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_c97b8485-4aa5-4fcc-aba3-c6bbdc06f756-transformed.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_augmentics_stay_with_laptop_at_the_large_f_35d6b34f-06c8-42a9-bb5f-a9f7d0228c89.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_augmentics_stay_with_laptop_at_the_large_f_366792c8-fc63-431c-adb1-e75029104bb6.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_augmentics_stay_with_laptop_at_the_large_f_b5de7f02-f43b-4fd6-b01c-4c33fcdace3e.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_bionic_robotic_mechanical_manipulator_in_h_4edd41d4-5a33-488d-ad2c-58255555764f.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_bionic_robotic_mechanical_manipulator_in_h_79d5dd21-a324-4f24-b5c2-ce37832c925b.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_5e4ed387-75ea-434f-80ad-54a6bbf25a92.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_15cc879c-6032-47b5-883c-56ccb48732cb.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_bb7622b8-8dac-41de-9925-d14892d79a05.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_c97b8485-4aa5-4fcc-aba3-c6bbdc06f756.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_techmarine_warhammer_40k_style_with_robotic_arm_sit_092b8d8f-7132-4b40-9394-dd83607d6cb8.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/alexkolodko_techno_spacemarine_warhammer40k_style_with_robotic__b100e5a6-8d87-4b47-83cf-3151991a242a.png"
                ]
            }
        },
        {
            "id": "93",
            "url": "https:\/\/blog-archive.alexkolodko.com\/all\/adobe-scripting-with-chatgpt\/",
            "title": "ChatGPT як помічник з автоматизації",
            "content_html": "<p>Знайшов для себе цікавий кейс застосування ChatGPT — створення простих скриптів для Ілюстратора.<\/p>\n<p>У лекції про дизайн-конвеєр я розповідав, що можна дуже прискорити роботу автоматизуючі окремі дії. І тут дуже допомагають екшени та різного роду скрипти. Але екшени покривають точно не всі функції, а поріг входу у скрипти доволі високий.<\/p>\n<p>Так от, нейромережа може допомогти створювати прості скрипти (до об’ємних вони поки не доросли).<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/Screen-Recording-2023-03-14-at-23.32.20-x2.mp4#t=0.001\" width=\"2560\" height=\"1600\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">ChatGPT → JSX → Adobe Illustrator<\/div>\n<\/div>\n<p>Наприклад, є задача: маємо купу інфографіки для звіту двома мовами. І в усіх картинках треба поміняти шрифт на інший та замінити кому на крапку у числах (45,5% → 45.5%).<\/p>\n<p>У картинках використовуються різні накреслення, тож просто все виділити і поміняти не підходить. Треба йти в Find\/Replace font і там вручну задавати зміну кожного накреслення. Довго. Те саме  заміною символів: Find and Replace, ввести символи, замінити, підтвердити. Довго.<\/p>\n<p>Спочатку, як завжди, пошукав у гуглі відповідь, бо можливо хтось вже писав такий код. Сходу не знайшов щось робоче.<\/p>\n<p>Тож далі я запитав у ChatGPT, щоб він описав скрипт, який би замінював один шрифт на інший. Вийшов скрипт, який міняє шрифт, але робить все одним накресленням. Другим запитом я уточнив, щоб і накреслення враховувалось. Перевірив — працює. Тож у кожному документі просто запускався скрипт і все саме мінялось.<\/p>\n<p>На цю задачу можна було залучити програміста, який на цьому розуміється, але з конкретною простою задачею навіть безплатний ChatGPT впорався непогано.<\/p>\n<p>Далі можна ще допиляти скрипт додати заміну кількох шрифтів на інші. І ось, ще один службовий інструмент у вас є.<\/p>\n<p>Авжеж, не весь код працює або не враховує якісь крайні ситуації. Але через кілька уточнень можна спробувати трохи іншу версію.<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"2400\" data-ratio=\"1.6\">\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/adobe-scripting-with-chatpgpt-1.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/adobe-scripting-with-chatpgpt-2.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-caption\">Відповіді ChatGPT<\/div>\n<\/div>\n<p>Ось вам приклад цього скрипта, який я частково докрутив: <a href=\"https:\/\/www.dropbox.com\/s\/5c26qlafyo225sq\/Font%20Replacer.jsx?dl=0\">https:\/\/www.dropbox.com\/s\/5c26qlafyo225sq\/Font%20Replacer.jsx?dl=0<\/a><\/p>\n<p>\u2028На початку у масиві вказуються назви старого і нового шрифтів та їхні накреслення. Також можна вказати декілька змін для різних шрифтів і накреслень.<\/p>\n<pre>\n{\n«oldFontName» : «Daikon»,  \/\/ Назва старого шрифта\n«oldFontWeight» : «Bold»,  \/\/ Накреслення старого шрифта\n«newFontName» : «DM Sans», \/\/ Назва нового шрифта\n«newFontWeight» : «Bold»   \/\/ Накреслення нового шрифта\n},\n\n<\/pre>\n<p>Не обов’язково треба вивчати кодування для програм Адоб, буде достатньо розуміння, що ви хочете отримати в результаті. Чим простіша і точкова задача, тим буде простіше поставити питання нейромережі й отримати більш-менш робоче рішення. <\/p>\n<p>І замість витрачання на часу на ручне клацання в інтерфейсі, можна створювати такі скрипти. Для своєї задачі я зекономив десь пів години, але чим більше картинок, тим більша буде й економія.<\/p>\n<p>Цікаво, як з такою задачею впрорається анонсований вчора GPT-4. Уявіть плагін, який би працював безпосередньо в Ілюстраторі, в який можна написати задачу і він видаватиме робочий скрипт, який можна запускати одразу у редакторі.<\/p>\n",
            "date_published": "2023-03-15T11:37:29+02:00",
            "date_modified": "2023-03-15T13:43:31+02:00",
            "tags": [
                "adobe",
                "chatgpt",
                "автоматизація",
                "ші"
            ],
            "image": "https:\/\/blog-archive.alexkolodko.com\/pictures\/adobe-scripting-with-chatpgpt-1.png",
            "_date_published_rfc2822": "Wed, 15 Mar 2023 11:37:29 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "93",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "jquery\/jquery.js",
                    "fotorama\/fotorama.css",
                    "fotorama\/fotorama.js"
                ],
                "og_images": [
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/adobe-scripting-with-chatpgpt-1.png",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/adobe-scripting-with-chatpgpt-2.png"
                ]
            }
        }
    ],
    "_e2_version": 4134,
    "_e2_ua_string": "Aegea 11.3 (v4134)"
}