Commit Graph

9 Commits

Author SHA1 Message Date
Ник (Claude) 1ef770b5fc feat: custom prompt for articles + HD image quality per channel
- ai.js: generateArticle принимает customPrompt (от юзера) или channel.ai_style_prompt
- articles.js + routes/articles.js: проброс customPrompt через цепочку
- postImages.js: channel.image_quality='hd' → gpt-5.4-image-2+medium, иначе gpt-5-image-mini+low
- aiUsage.js: правильные цены routerai (RUB/token), gpt-5-image-mini и gpt-5.4-image-2
- channels.js: updateChannel сохраняет ai_style_prompt и image_quality
- DB: channels.ai_style_prompt TEXT, channels.image_quality VARCHAR(16) DEFAULT standard
2026-06-11 15:11:18 +03:00
Ник (Claude) 95578af261 feat: channel image style settings wired to cover/post generation
covers.js:
- buildCoverPrompt() принимает channelStyle: использует image_style из
  канала (abstract/3d-render/minimal/etc.) вместо дефолтного ротационного
  COVER_STYLES. image_palette и image_custom_colors перекрывают цвета.
  image_prompt_instructions добавляется как Channel visual guidelines.
- generateCover() принимает channelId, загружает channel_style из БД.

postImages.js:
- image_prompt_instructions добавляется в промпт постовой картинки.

articles.js:
- generateCover вызывается с channelId=1 (системный блог-канал zeropost.ru).

services/channels.js:
- updateChannel whitelist расширен: добавлены image_enabled, image_style,
  image_palette, image_custom_colors, image_prompt_instructions.
  Раньше эти поля молча игнорировались при PATCH канала.

DB:
- ALTER TABLE channel_style ADD COLUMN image_prompt_instructions TEXT;
- Системный канал id=1 получил хорошие дефолты: style=abstract,
  palette=dark, instructions=Modern tech editorial blog cover...
2026-06-09 10:48:38 +03:00
Nik (Claude) a370b8f7d8 feat: Зеро-персонаж, auto-publish, auto-series, channel-stats, fallback covers
- Персонаж Зеро: 23 позы (zeroCharacter.js), скрипты генерации
- Auto-publish статей в TG: multipart upload, кнопки, режим alternating Zero/cover
- Fallback цепочка обложек: aiprimetech gpt-5.5 → Pollinations → local SVG (6 палитр)
- Auto-series: Claude haiku определяет серию для каждой статьи автоматически
- Channel stats: подписчики, история, delta 24h/7d
- Photo-search: Yandex API, профили доменов, Redis лимиты
- Scheduled posts runner: backfill, preview, queue, cancel
- promptBuilder: author_persona Зеро, голос от первого лица
- Fixes: dollar-placeholder bugs в PATCH channels/autogen, listArticles фильтры
- AI model: gpt-5.5 для image generation
2026-06-07 14:03:56 +03:00
Alexey Pavlov c1d5337680 fix: jsonb tag filter operator ?? -> ? 2026-05-31 16:38:48 +03:00
Alexey Pavlov 3372574b32 feat: autogen service — content_queue, autogen_settings, TOPIC_BANK, cron API 2026-05-31 14:48:38 +03:00
Alexey Pavlov e5e7e9ef98 feat: categories table, API, category field in articles 2026-05-31 14:43:27 +03:00
Alexey Pavlov bc2d311e59 feat: editor_notes + /api/stats/live + tokens в getArticleBySlug
- БД: таблица editor_notes (title/content/author/tags/is_pinned/is_published)
- routes/notes.js: CRUD заметок редактора
- /api/stats/live: latest article, processing job, активность за 7 дней
- getArticleBySlug: JOIN с generation_jobs для tokens_in/out
2026-05-31 10:05:28 +03:00
Alexey Pavlov c7b83147f1 feat: AI-генерация обложек + /api/stats + раздача /uploads
- services/covers.js: gpt-image-1, фиксированный стиль emerald-geometric, fallback на ошибки шлюза
- articles.generateAndSaveArticle: запускает обложку в setImmediate (не блокирует ответ)
- routes/articles: POST /backfill-covers для досгенерации
- routes/stats: статистика блога (статьи, слова, токены, просмотры)
- index.js: express.static на /uploads БЕЗ авторизации (публичные картинки)
2026-05-31 09:17:08 +03:00
Alexey Pavlov 500bb0299e feat: articles — публичный блог zeropost.ru
- БД: таблица articles (slug, title, excerpt, content, cover, tags, SEO)
- services/articles.js: slugify (ru→en транслит), reading_time, генерация со встроенным blog-channel
- routes/articles.js: GET list/tags/:slug, POST /generate
- Универсальный blogChannel со стилем для лонгридов: tone:friendly, structure:headers, без эмодзи и хэштегов
- generateAndSaveArticle: вытаскивает title из H1, генерит excerpt, считает время чтения
2026-05-31 08:45:34 +03:00