
Генератор постов
Генерация постов с учётом специфики платформ: форматирование, лимиты символов, хештег-стратегии и шаблоны CTA для Telegram, VK, Instagram и YouTube Shorts.
SKILL.md
Генератор постов — контент с учётом специфики платформ
Генерируй посты для социальных сетей с правильным форматированием, тоном и структурой для каждой платформы.
Посты в Telegram-канал
Правила формата
- Лимит: 4 096 символов на сообщение
- Форматирование: Markdown — жирный
**текст**, ссылки[текст](url), код - Структура: Заголовок → Тело → CTA
- Визуал: Эмодзи как разделители секций (не как украшение)
Шаблон
📌 [ЗАГОЛОВОК]
[Открывающий хук — 1-2 предложения]
[Основной контент — абзацы разделены эмодзи]
📝 [Ключевой вывод или резюме]
👉 [CTA — подписка / комментарий / переход по ссылке]
Варианты тона
- Экспертный: "Разбираем 5 ошибок, которые убивают ваши продажи..."
- Дружелюбный: "Привет! Сегодня расскажу про секрет, который мне помог..."
- Провокационный: "Спойлер: вы делаете SMM неправильно. Вот почему..."
Посты ВКонтакте
Правила формата
- Органические посты: Нет жёсткого лимита символов
- Рекламные записи: До 220 символов текст
- PRO-реклама: Без эмодзи и хештегов
- Алгоритм: Ценит удержание внимания, сохранения, репосты, длинные комментарии
Шаблон
[Хук — вопрос или смелое утверждение]
[История или полезный контент — разговорный стиль, как с другом]
[Призыв к взаимодействию — "А как у вас? Напишите в комментариях!"]
Специфика VK
- Используй опросы для вовлечения (алгоритм поощряет)
- VK Клипы (вертикальное видео 5-15 сек) — формат с максимальным охватом
- Комьюнити-тон: тёплый, инклюзивный, «мы» вместо «я»
- Отметка друзей: "Отметьте коллегу, которому это полезно"
Посты в Instagram
Правила формата
- Подпись: до 2 200 символов
- Зона хука: первые 125 символов (видны до кнопки «ещё»)
- Хештеги: 5-12 (ротация каждые 2 недели)
- Посты в ленте: Длинные подписи подходят для сторителлинга
- Reels: Короткие подписи, CTA + краткое описание
Шаблон поста в ленту
[ХУК — первые 125 символов — чтобы захотелось читать дальше]
[История или полезный контент]
[Ключевой момент или урок]
[CTA: "Сохрани чтобы не потерять" / "Поделись с другом"]
#hashtag1 #hashtag2 #hashtag3 ... #hashtag8
Шаблон подписи для Reels
[Краткое описание — 1-2 строки]
[CTA]
#hashtag1 #hashtag2 #hashtag3
Стратегия хештегов
- Микс размеров: 2-3 популярных (500K+), 3-4 средних (50K-500K), 2-3 нишевых (<50K)
- Ротация каждые 2 недели
- Естественно вплетай в подпись
- Исследуй трендовые хештеги в нише еженедельно
YouTube Shorts
Правила формата
- Название: до 40 символов, с ключевыми словами
- Описание: ключевые слова, теги, 3-5 хештегов
- Хук: первые 1-3 секунды критически важны (визуал + текст)
Паттерны названий
- "Как [достичь результата] за [время]"
- "3 ошибки в [тема], которые вы совершаете"
- "[Тема]: секрет, о котором не говорят"
- "Что я узнал(а) о [тема] за [опыт]"
Шаблон описания
[1-2 предложения с ключевыми словами]
#hashtag1 #hashtag2 #hashtag3
Адаптация под платформы
Одна и та же идея становится разными постами на каждой платформе:
| Идея | Telegram | VK | Shorts | |
|---|---|---|---|---|
| Совет о продукте | Длинный гайд с Markdown | Разговорная история с опросом | Карусель с пошаговой инструкцией | 15 сек демонстрация |
| Закулисье | Экспертный пост с деталями | Комьюнити-история, тег команды | Серия Stories / Reel | Быстрый BTS-ролик |
| Отзыв клиента | Текст + скриншот | Пост в комьюнити с комментариями | Репост + комментарий | Текст + озвучка |
| Акция/предложение | Все детали + CTA + ссылка | Тёплое приглашение + опрос | Визуал + ссылка в профиле | Быстрое объявление + CTA |
Шаблоны CTA
| Цель | CTA |
|---|---|
| Вовлечение | "Напишите в комментариях: [вопрос]" |
| Сохранение/репост | "Сохрани чтобы не потерять ❤️" |
| Переход | "Читать подробнее: [ссылка]" |
| Подписка | "Подпишись, чтобы не пропустить" |
| Личные сообщения | "Напиши нам в личные сообщения" |
| Опрос | "Голосуй в опросе ниже 👇" |
Чек-лист качества
Перед отправкой каждого поста:
- Вписывается в лимит символов платформы
- Хук в видимой зоне (первая строка / первые 125 символов)
- CTA включён
- Форматирование соответствует платформе (Markdown для Telegram, без эмодзи в VK PRO, хештеги для Instagram)
- Тон бренда соответствует пожеланиям клиента
- Нет идентичного кросспостинга (контент адаптирован под платформу)
Инструкции по публикации (browser-use)
Telegram: отправка одним сообщением
⚠️ НЕ ИСПОЛЬЗУЙ browser-use input для постов с переносами строк! Команда input передаёт символы по одному, и \n интерпретируется как нажатие Enter — сообщение разбивается на множество отдельных.
Правильный метод:
- Найди поле ввода через
document.querySelector('[contenteditable=true]') - Вставь контент через eval:
browser-use eval "var inp = document.querySelector('[contenteditable=true]'); inp.innerHTML = 'Строка 1<br><br>Строка 2'; inp.dispatchEvent(new InputEvent('input', {bubbles: true}));" - Кликни кнопку отправки (крайний правый
<button>внизу) - Проверь:
evalс проверкойinp.innerText === ''→ пост отправлен
⚠️ Используй <br> вместо \n для переносов внутри одного сообщения.
Instagram: загрузка изображения для поста
⚠️ Instagram Web имеет несколько скрытых <input type=file> в shadow DOM. Только один корректно запускает flow создания поста.
Правильный метод:
- Кликни
svg[aria-label="New post"] - Загрузи изображение в ПЕРВЫЙ
input[type=file][accept="image/jpeg"](теневой DOM) - Дождись экрана «New Photo Post» → Next
- Введи подпись в
textarea[aria-label="Write a caption…"] - Кликни Share
- Проверь: профиль показывает +1 пост
Требования к изображениям для Instagram
- Формат: 1080×1080px (квадрат), JPEG или PNG
- Безопасные отступы: ≥60px со всех сторон
- Контент центрирован, важный текст не у краёв
- Рендерить через Playwright, НЕ через
browser-use screenshot
Рендеринг изображений
⚠️ browser-use --headed screenshot НЕ подходит — вьюпорт неконтролируем.
Используй Playwright для headless-рендеринга с точным viewport:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page(viewport={'width': 1080, 'height': 1080})
page.goto('http://localhost:8899/template.html', wait_until='networkidle')
page.screenshot(path='output.png', full_page=False)
browser.close()