amplifier-bundle-blog-creator

January 6, 2026 ยท View on GitHub

Modern Amplifier bundle for AI-powered blog creation with style-aware generation

Transform rough ideas into polished, illustrated blog posts that match your unique writing voice.

Features

โœจ Style-Aware Generation - Analyzes your writing samples to match your voice
๐Ÿ”„ Iterative Refinement - Review and revise until perfect
๐ŸŽฏ Multi-Stage Workflow - Style โ†’ Draft โ†’ Review โ†’ Revision โ†’ Illustration
๐Ÿค– Specialized Agents - Expert agents for each stage
๐Ÿ“‹ Recipe Automation - Declarative workflow orchestration
๐Ÿ› ๏ธ Tool Modules - Modular, reusable capabilities

Architecture

This bundle follows 2026 Amplifier best practices:

  • Thin bundle inheriting from foundation
  • Behaviors declaring reusable capabilities
  • Specialized agents for each workflow stage
  • Tool modules with proper protocols
  • Recipe system for automated orchestration

What's Included

amplifier-bundle-blog-creator/
โ”œโ”€โ”€ bundle.md                    # Thin bundle definition
โ”œโ”€โ”€ behaviors/
โ”‚   โ””โ”€โ”€ blog-creator.yaml        # Blog creation capability
โ”œโ”€โ”€ agents/
โ”‚   โ”œโ”€โ”€ style-analyzer.md        # Style extraction specialist
โ”‚   โ”œโ”€โ”€ content-drafter.md       # Draft creation specialist
โ”‚   โ”œโ”€โ”€ content-reviewer.md      # Review specialist
โ”‚   โ””โ”€โ”€ illustrator.md           # Image generation specialist
โ”œโ”€โ”€ context/
โ”‚   โ””โ”€โ”€ blog-creator-instructions.md  # Workflow guidance
โ”œโ”€โ”€ recipes/
โ”‚   โ””โ”€โ”€ create-blog-post.yaml    # Automated workflow
โ”œโ”€โ”€ modules/
โ”‚   โ”œโ”€โ”€ tool-image-generation/   # AI image generation (DALL-E, Imagen)
โ”‚   โ”œโ”€โ”€ tool-style-extraction/   # Writing style analysis
โ”‚   โ””โ”€โ”€ markdown-utils/          # Markdown utilities (library)
โ””โ”€โ”€ .amplifier/
    โ””โ”€โ”€ settings.yaml            # Configuration example

Quick Start

Prerequisites

# Install Amplifier
# See: https://github.com/microsoft/amplifier

# Set up API keys
export ANTHROPIC_API_KEY="your-key-here"
export OPENAI_API_KEY="your-key-here"      # For DALL-E images (optional)
export GOOGLE_API_KEY="your-key-here"      # For Imagen (optional)

Installation

# Clone the bundle
git clone https://github.com/robotdad/amplifier-bundle-blog-creator
cd amplifier-bundle-blog-creator

# Install tool modules
cd modules/tool-image-generation && uv sync && cd ../..
cd modules/tool-style-extraction && uv sync && cd ../..

Automated multi-stage workflow:

amplifier recipe run amplifier-bundle-blog-creator:recipes/create-blog-post.yaml \
  --input topic="Why Event-Driven Architecture Matters" \
  --input style_samples_dir="~/my_blog_posts/" \
  --input with_illustrations=true

Recipe features:

  • โœ… Automatic stage progression
  • โœ… Context accumulation across stages
  • โœ… Resumable if interrupted
  • โœ… Saves all intermediate artifacts

Usage: Agent-Based (Manual)

Step-by-step with specialized agents:

# 1. Extract writing style
amplifier --bundle blog-creator --agent style-analyzer
# Provide: Directory with 3-5 writing samples
# Output: style_profile.json

# 2. Generate initial draft
amplifier --bundle blog-creator --agent content-drafter
# Provide: idea notes + style profile
# Output: draft_v1.md

# 3. Review draft
amplifier --bundle blog-creator --agent content-reviewer
# Provide: draft + idea notes + style profile
# Output: review_result.json

# 4. Revise draft
amplifier --bundle blog-creator --agent content-drafter
# Provide: draft + review feedback + style profile
# Output: draft_v2.md

# 5. Add illustrations (optional)
amplifier --bundle blog-creator --agent illustrator
# Provide: final draft
# Output: illustrated_draft.md + images/

Workflow

Stage 1: Style Extraction

Agent: @style-analyzer

Analyzes 3-5 writing samples to extract:

  • Tone (conversational, technical, formal, etc.)
  • Voice (person, active/passive)
  • Vocabulary level
  • Sentence structure patterns
  • Common phrases and expressions
  • Writing patterns (openings, transitions, closings)

Output: StyleProfile JSON

Stage 2: Draft Generation

Agent: @content-drafter

Creates initial blog post from rough ideas:

  • Applies extracted style profile
  • Maintains source accuracy (no invented facts)
  • Structures content appropriately
  • Uses author's natural voice

Output: Initial draft markdown

Stage 3: Review

Agent: @content-reviewer

Provides objective feedback:

  • Source accuracy: Checks facts against original notes
  • Style consistency: Compares against style profile
  • Cites specific examples
  • Suggests improvements

Output: ReviewResult JSON

Stage 4: Revision

Agent: @content-drafter

Incorporates feedback:

  • Addresses source accuracy issues
  • Corrects style inconsistencies
  • Implements user requests
  • Maintains quality

Iterates: Repeat stages 3-4 until approved

Stage 5: Illustration (Optional)

Agent: @illustrator

Generates contextual images:

  • Analyzes content for illustration opportunities
  • Creates relevant prompts for AI generators
  • Uses DALL-E or Imagen
  • Embeds images with proper alt text

Output: Illustrated markdown + image files

Tool Modules

tool-image-generation

Multi-provider AI image generation with automatic fallback.

Features:

  • OpenAI DALL-E 3 support
  • Google Imagen 3 support
  • Automatic provider fallback
  • Cost tracking
  • Multiple image styles

Usage as library:

from image_generation import ImageGenerator

generator = ImageGenerator()
result = await generator.generate(
    prompt="Software architecture diagram in minimalist style",
    output_path=Path("diagram.png"),
    preferred_api="openai"
)

Usage as tool:

from image_generation import ImageGenerationTool

tool = ImageGenerationTool()
result = await tool.execute({
    "operation": "generate",
    "prompt": "Software architecture diagram",
    "output_path": "diagram.png"
})

tool-style-extraction

LLM-powered writing style analysis.

Features:

  • Extracts 8 style dimensions
  • Pattern recognition across samples
  • Concrete examples
  • Pydantic models for type safety

Usage as library:

from style_extraction import StyleExtractor

extractor = StyleExtractor()
profile = await extractor.extract_style(Path("~/writings"))

Usage as tool:

from style_extraction import StyleExtractionTool

tool = StyleExtractionTool()
result = await tool.execute({
    "operation": "extract_style",
    "samples_dir": "~/writings"
})

markdown-utils

Pure Python markdown utilities (library only).

Features:

  • Title extraction
  • Slug generation
  • Structure parsing
  • Image insertion helpers

Usage:

from amplifier_module_markdown_utils import extract_title, slugify

title = extract_title(markdown_content)
slug = slugify(title)  # "my-blog-post-title"

Configuration

.amplifier/settings.yaml

providers:
  - module: provider-anthropic
    config:
      api_key: ${ANTHROPIC_API_KEY}
      default_model: claude-sonnet-4-5

modules:
  tools:
    - module: tool-style-extraction
      config:
        min_samples: 3
        max_samples: 5
    
    - module: tool-image-generation
      config:
        default_provider: openai
        default_style: photorealistic

recipes:
  working_dir: ./ai_working
  save_intermediate: true

Development

Running Tests

# Tool modules
cd modules/tool-image-generation && uv run pytest
cd modules/tool-style-extraction && uv run pytest

# Test recipe (dry run)
amplifier recipe validate recipes/create-blog-post.yaml

Project Structure Philosophy

This bundle follows the "bricks and studs" philosophy:

  • Thin bundle = Inherits capabilities, adds only domain-specific
  • Tool modules = Self-contained bricks with clean interfaces
  • Agents = Specialized roles with clear responsibilities
  • Recipes = Declarative orchestration, not hardcoded logic
  • Behaviors = Reusable capability sets others can include

Migration from Legacy App

This bundle replaces amplifier-app-blog-creator (the legacy FastAPI app) with modern Amplifier patterns:

LegacyModern
Standalone Python appThin bundle inheriting foundation
Hardcoded workflowDeclarative recipe
Python packagesTool protocol modules
Direct PydanticAI callsFoundation providers
Custom orchestrationRecipe system
.amplifier/profiles/behaviors/*.yaml

Benefits of modernization:

  • โœ… Recipe-based automation
  • โœ… Resumable workflows
  • โœ… Better modularity
  • โœ… Foundation tool access
  • โœ… Standardized patterns

Examples

Example 1: Technical Blog Post

amplifier recipe run blog-creator:recipes/create-blog-post.yaml \
  --input topic="Building Event-Driven Systems with Kafka" \
  --input style_samples_dir="~/tech_blog/" \
  --input additional_instructions="Keep under 1500 words, include code examples" \
  --input with_illustrations=true \
  --input max_images=2

Example 2: Manual Workflow with Iteration

# Extract style once
amplifier --bundle blog-creator --agent style-analyzer
# > Saves style_profile.json

# Generate draft
amplifier --bundle blog-creator --agent content-drafter
# > Saves draft_v1.md

# Review
amplifier --bundle blog-creator --agent content-reviewer
# > Saves review_result.json

# Manual edits to draft_v1.md...

# Final review
amplifier --bundle blog-creator --agent content-reviewer
# > Approves or suggests more changes

Best Practices

Style Extraction

  • Use 3-5 writing samples minimum
  • Same genre and audience as target blog
  • Representative of current voice (not old work)
  • Substantial length (500+ words each)

Draft Generation

  • Provide detailed idea notes (not just a topic)
  • Include specific examples and facts
  • Note any constraints (length, structure, tone)
  • Reference sources if needed

Review Process

  • Review objectively against specs
  • Cite specific examples
  • Focus on meaningful issues
  • Acknowledge what's working

Illustration

  • Maximum 3-4 images per post
  • Quality over quantity
  • Use for complex concepts, not decoration
  • Consistent visual style

Troubleshooting

"Style profile not found"

Ensure you've run style extraction first or provide style_profile.json.

"Insufficient writing samples"

Provide at least 3 markdown files in the samples directory.

"Image generation failed"

Check API keys for OpenAI or Google. The tool will fallback between providers.

"Recipe won't resume"

Check ./ai_working/sessions/ for session state. Use amplifier recipe resume <session-id>.

Contributing

This bundle follows Amplifier contribution guidelines:

License

MIT License - See LICENSE file

Learn More

Credits

Created by robotdad as a modernization of the legacy amplifier-app-blog-creator.

Built with:

  • Amplifier Foundation
  • Anthropic Claude (content generation)
  • OpenAI DALL-E (image generation)
  • Google Imagen (image generation)
  • PydanticAI (structured outputs)