Skip to content

autoblog: hero image only, at medium quality (~$10/day -> ~$0.60/day) - #347

Merged
ralyodio merged 1 commit into
masterfrom
fix/autoblog-hero-only-medium
Oct 9, 2026
Merged

ralyodio merged 1 commit into
masterfrom
fix/autoblog-hero-only-medium

Conversation

@ralyodio

@ralyodio ralyodio commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

The daily autoblog run (15 articles across 10 sites at 09:00 UTC) drew a hero
plus 3 inline gpt-image-2 images per article at HIGH quality: 60 images at
$0.165, about $9.90 a day on the shared OpenAI key. Anthony picked option B:
one hero image per article, at medium (
$0.04).

  • IMAGE_QUALITY high -> medium (hero, any inline, and the repair sweep).
  • INLINE_IMAGE_COUNT 3 -> 0. The system prompt now asks for no placeholders;
    with the count above 0 the old instructions come back unchanged.
  • The schema no longer fails an article whose model returns inline slots
    anyway: normalizeArticleOutput trims them to INLINE_IMAGE_COUNT, and
    dropUnfilledInlineMarkers strips any stray from the
    body (articles and guest posts).

Tests: tests/contract/lx-article.test.ts covers the prompt, the schema with zero and extra inline images, and marker stripping. tsc clean.

🤖 Generated with Claude Code

The daily autoblog run (15 articles across 10 sites at 09:00 UTC) drew a hero
plus 3 inline gpt-image-2 images per article at HIGH quality: 60 images at
~$0.165, about $9.90 a day on the shared OpenAI key. Anthony picked option B:
one hero image per article, at medium (~$0.04).

- IMAGE_QUALITY high -> medium (hero, any inline, and the repair sweep).
- INLINE_IMAGE_COUNT 3 -> 0. The system prompt now asks for no placeholders;
  with the count above 0 the old instructions come back unchanged.
- The schema no longer fails an article whose model returns inline slots
  anyway: normalizeArticleOutput trims them to INLINE_IMAGE_COUNT, and
  dropUnfilledInlineMarkers strips any stray <!--INLINE_IMAGE_N--> from the
  body (articles and guest posts).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown

ThreatCrush Security Scan

48 finding(s)

HIGH/CRITICAL: 2 | MEDIUM: 31 | LOW: 15

Severity Rule Location
HIGH tls-verification-disabled lib/onion.ts:48
HIGH secret-generic-credential lib/sp/platforms/facebook.ts:32
MEDIUM js-unescaped-html-sink app/(app)/dashboard/admin/email-broadcast/EmailBroadcastForm.tsx:125
MEDIUM js-unescaped-html-sink app/(app)/dashboard/projects/[id]/autoblog/articles/[articleId]/page.tsx:214
MEDIUM js-unescaped-html-sink app/(marketing)/blog/[slug]/page.tsx:67
MEDIUM js-unescaped-html-sink app/(marketing)/blog/[slug]/page.tsx:97
MEDIUM js-unescaped-html-sink app/(marketing)/blog/[slug]/page.tsx:104
MEDIUM js-unescaped-html-sink app/(marketing)/blog/[slug]/page.tsx:110
MEDIUM js-unescaped-html-sink app/(marketing)/recent/page.tsx:186
MEDIUM js-unescaped-html-sink app/(marketing)/recent/page.tsx:190
MEDIUM js-unescaped-html-sink app/c/[project]/[slug]/page.tsx:77
MEDIUM js-unescaped-html-sink app/c/[project]/page.tsx:57
MEDIUM js-unescaped-html-sink app/careers.js/route.ts:228
MEDIUM js-unescaped-html-sink app/careers.js/route.ts:285
MEDIUM js-unescaped-html-sink app/layout.tsx:128
MEDIUM js-open-redirect app/login/form.tsx:39
MEDIUM js-unescaped-html-sink app/r/[token]/page.tsx:176
MEDIUM js-open-redirect app/signup/form.tsx:43
MEDIUM js-open-redirect components/billing/buy-credits-modal.tsx:98
MEDIUM js-unescaped-html-sink components/json-ld.tsx:8
MEDIUM js-unescaped-html-sink components/report/markdown-view.tsx:15
MEDIUM js-unescaped-html-sink lib/careers/page-templates.ts:198
MEDIUM js-dynamic-code-execution lib/crawl-limits.ts:67
MEDIUM redos-nested-quantifier lib/emailMarkdown.ts:41
MEDIUM redos-nested-quantifier lib/emailMarkdown.ts:324
MEDIUM redos-nested-quantifier lib/lx/articleGen.ts:100
MEDIUM redos-nested-quantifier lib/tracker/agent-gate.ts:61
MEDIUM sh-predictable-temp-path ops/selfhost/server/setup-supabase.sh:218
MEDIUM sql-template-interpolation scripts/detect-slot-themes.ts:31
MEDIUM sql-template-interpolation scripts/purge-constructed-keywords.ts:163
MEDIUM sql-template-interpolation scripts/purge-offniche-keywords.ts:124
MEDIUM js-dynamic-code-execution scripts/test-crawl-limits.mjs:14
MEDIUM js-dynamic-code-execution scripts/test-crawl-limits.mjs:24
LOW secret-generic-credential app/(marketing)/docs/autoblog-webhook/page.tsx:145
LOW secret-generic-credential lib/sp/platforms/linkedin.ts:25
LOW js-dynamic-code-execution tests/careers-page-templates.test.ts:21
LOW js-dynamic-code-execution tests/careers-widget-script.test.ts:19
LOW js-dynamic-code-execution tests/careers-widget-script.test.ts:69
LOW js-dynamic-code-execution tests/contract/ad-visitor-id.test.ts:51
LOW js-dynamic-code-execution tests/contract/ad-visitor-id.test.ts:52
LOW js-dynamic-code-execution tests/contract/ads-click-cooldown-redis.test.ts:20
LOW js-dynamic-code-execution tests/contract/ads-click-cooldown-redis.test.ts:24
LOW js-dynamic-code-execution tests/contract/ads-click-cooldown-redis.test.ts:25
LOW js-dynamic-code-execution tests/contract/ads-click-cooldown-redis.test.ts:26
LOW js-dynamic-code-execution tests/contract/ads-click-cooldown-redis.test.ts:31
LOW js-dynamic-code-execution tests/contract/ads-click-cooldown-redis.test.ts:35
LOW secret-generic-credential tests/contract/posthog-integration.test.ts:13
LOW secret-generic-credential tests/lead-campaign.test.ts:16

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit 1d7b367 into master Oct 9, 2026
9 of 10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant