---
title: ToolRouter — Tool Detail
description: Detailed documentation for a ToolRouter tool including skills, parameters, and examples.
url: https://toolrouter.com/tools/faceless-carousels
---
# Faceless Carousel Generator

Generate faceless carousel posts for Instagram and TikTok — from quick single-call creation to a full research-backed pipeline. Handles niche research, hook writing, slide copy, visual design, and final rendered images. No design skills or personal brand required.

- **Version:** 0.02
- **Categories:** media, marketing, ai
- **Workflow:** create_carousel → write_carousel → render_slides → research_niche → write_hooks → write_slides → design_slides → render_slides → export_editable

## Skills (9)

### Research Niche (`research_niche`)

Research target niche, audience pain points, trending carousel topics, and competitor strategies using Parallel AI deep research. ⏱ Takes 5-15 minutes. Returns a job_id — poll with get_job_result until complete. Tell the user this is running and approximately how long it will take.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `niche` | string | Yes | Niche or topic area (e.g. "personal finance for millennials") |
| `micro_niche` | string | No | Optional micro-niche focus (e.g. "budgeting for freelancers") |
| `target_audience` | string | No | Target audience description (e.g. "25-35 year old freelancers") |
| `platform` | string | No | Platform priority (default: instagram) (instagram, tiktok, both) |
| `goals` | array | No | Content goals (e.g. ["followers", "saves", "DMs"]) |
| `competitors` | array | No | Competitor account handles to research |
| `source_domains` | array | No | Domains to focus research on |

**Returns:** Structured niche research with trending topics, audience pain points, language patterns, emotional triggers, content types, platform tips, and sources

**Examples:**

*Research personal finance niche for Instagram carousels:*

```json
{
  "niche": "personal finance for millennials",
  "platform": "instagram",
  "goals": [
    "followers",
    "saves"
  ]
}
```

### Write Hooks (`write_hooks`)

Generate carousel-specific Slide 1 hooks using 6 proven formulas (question, statistic, promise, list, mistake, curiosity). Text-first hooks optimized for bold display on static images. ⏱ Takes ~5 seconds. Step 2 — requires research from step 1.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `niche` | string | Yes | Niche or topic area |
| `research` | object | Yes | Research output from research_niche step |
| `topic` | string | Yes | Specific carousel topic |
| `creative_direction` | object | No | Optional creative direction for hook style |
| `num_hooks` | number | No | Number of hooks to generate (default 5) [default: 5] |
| `goal` | string | No | Goal for this carousel (e.g. "saves", "follows", "DMs") |
| `llm_model` | string | No | OpenRouter model ID (default google/gemini-2.5-flash) |

**Returns:** Array of hooks with text, formula type, target emotion, and target pain point

**Examples:**

*Generate 5 hooks for a budgeting carousel:*

```json
{
  "niche": "personal finance for millennials",
  "research": {
    "audience_pain_points": [
      "living paycheck to paycheck"
    ],
    "trending_topics": [
      "50/30/20 budget rule"
    ]
  },
  "topic": "5 budgeting mistakes that keep you broke",
  "num_hooks": 5
}
```

### Write Slides (`write_slides`)

Generate complete slide-by-slide text content for each hook. Produces 10-slide carousels (configurable) with hook, body, and CTA slides following U-curve engagement principles. ⏱ Takes ~10 seconds per hook. Step 3 — requires hooks from step 2.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `hooks` | array | Yes | Array of hooks from write_hooks step |
| `niche` | string | Yes | Niche or topic area |
| `research` | object | Yes | Research output from research_niche step |
| `topic` | string | Yes | Specific carousel topic |
| `creative_direction` | object | No | Optional creative direction for slide copy |
| `slide_count` | number | No | Number of slides per carousel (default 10, max 20) [default: 10] |
| `source_material` | string | No | Additional context or data to weave into slides |
| `llm_model` | string | No | OpenRouter model ID (default google/gemini-2.5-flash) |

**Returns:** Array of carousels, each with hook_id, title, slides (headline, body, emphasis, type), CTA text and instruction

**Examples:**

*Generate 10-slide carousels from hooks:*

```json
{
  "hooks": [
    {
      "id": "hook_1",
      "text": "5 budgeting mistakes keeping you broke",
      "formula_type": "mistake"
    }
  ],
  "niche": "personal finance for millennials",
  "research": {
    "audience_pain_points": [
      "living paycheck to paycheck"
    ]
  },
  "topic": "5 budgeting mistakes that keep you broke"
}
```

### Design Slides (`design_slides`)

Generate visual design specifications for each slide including image prompts, layout, typography, colors, and decorative elements. Bridges copywriting and image generation with platform-specific optimization. ⏱ Takes ~5 seconds per carousel. Step 4 — requires carousels from step 3.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `carousels` | array | Yes | Array of carousels from write_slides step |
| `creative_direction` | object | No | Optional creative direction for visual design |
| `brand_url` | string | No | Optional website URL to auto-extract brand colors, fonts, logo, and style. Skipped if brand_colors already provided in creative_direction. |
| `llm_model` | string | No | OpenRouter model ID (default google/gemini-2.5-flash) |

**Returns:** Array of designed carousels with image prompts, layout specs, color schemes, and visual consistency notes per slide

**Examples:**

*Design slides with brand colors:*

```json
{
  "carousels": [
    {
      "hook_id": "hook_1",
      "carousel_title": "Budgeting Mistakes",
      "slides": [
        {
          "slide_number": 1,
          "headline": "5 budgeting mistakes",
          "slide_type": "hook"
        }
      ]
    }
  ],
  "creative_direction": {
    "brand_colors": {
      "primary": "#1a1a2e",
      "accent": "#ffd700"
    },
    "visual_style": "dark mode"
  }
}
```

### Write Complete Carousel (Fast) (`write_carousel`)

Generate a complete carousel in ONE call — hook, slide copy, emphasis text, and color scheme. Outputs designed_carousels ready for render_slides. This is the FAST path: replaces write_hooks + write_slides + design_slides in a single LLM call (~5s). Use this instead of the 3-step pipeline for speed.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `niche` | string | Yes | Niche or topic area (e.g. "personal finance for millennials") |
| `topic` | string | Yes | Specific carousel topic (e.g. "5 money habits that keep you broke") |
| `research` | object | No | Optional research output from research_niche step |
| `slide_count` | number | No | Number of slides (default 7, max 15) [default: 7] |
| `creative_direction` | object | No | Optional creative direction for style, colors, and tone |
| `llm_model` | string | No | OpenRouter model ID |

**Returns:** Complete designed_carousels array ready for render_slides, plus color_scheme

**Examples:**

*Generate a 7-slide finance carousel:*

```json
{
  "niche": "personal finance",
  "topic": "5 money habits that keep you broke",
  "creative_direction": {
    "visual_style": "dark mode bold",
    "platform": "instagram"
  }
}
```

### Create Complete Carousel (End-to-End) (`create_carousel`)

Generate a complete ready-to-post carousel in a single call. Writes copy, matches a template, renders all slides, and returns image URLs. Supports template replication, slide background images, and brand extraction. ⏱ Takes ~15-30 seconds. Async — poll with get_job_result.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `niche` | string | Yes | Niche or topic area (e.g. "personal finance for millennials") |
| `topic` | string | Yes | Specific carousel topic (e.g. "5 money habits that keep you broke") |
| `research` | object | No | Optional research output from research_niche step |
| `slide_count` | number | No | Number of slides (default 7, max 15) [default: 7] |
| `creative_direction` | object | No | Optional creative direction for style, colors, and tone |
| `brand_url` | string | No | Website URL to auto-extract brand colors, fonts, and page images for styling and slide backgrounds. |
| `template_images` | array | No | Template carousel image(s) to replicate via vision LLM. Brand colors/fonts override template styling if provided. |
| `slide_images` | array | No | Image URLs or file paths for slide backgrounds. Distributed across slides in order (CTA excluded). Alias: images. |
| `images` | array | No | Alias for slide_images. Image URLs or file paths for slide backgrounds, distributed across slides in order (CTA excluded). |
| `llm_model` | string | No | OpenRouter model ID |

**Returns:** Carousel with slide image URLs, color scheme, and metadata — ready to post. Includes saved_template_id if a template was analyzed and persisted.

**Examples:**

*Create a 7-slide finance carousel with images:*

```json
{
  "niche": "personal finance",
  "topic": "5 money habits that keep you broke",
  "creative_direction": {
    "visual_style": "dark mode bold",
    "platform": "instagram"
  }
}
```

### Generate Slide Images (`generate_images`)

Generate carousel slide images using fal.ai. Supports 70+ models; default: nano-banana-2 with accurate text rendering. Requires designed carousels from the design step. ⏱ Takes ~5-10 seconds per slide. Async — poll with get_job_result.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `designed_carousels` | array | Yes | Array of designed carousels from design_slides step |
| `creative_direction` | object | No | Optional creative direction |
| `model` | string | No | Any fal.ai model key or ID from the image model registry [default: "fal-ai/nano-banana-2"] |

**Returns:** Array of carousels with generated slide image URLs, plus asset paths for auto-upload

**Examples:**

*Generate images for designed carousel:*

```json
{
  "designed_carousels": [
    {
      "hook_id": "hook_1",
      "carousel_title": "Budgeting Mistakes",
      "slides": [
        {
          "slide_number": 1,
          "image_prompt": "Clean dark carousel slide with bold white text reading \"5 budgeting mistakes keeping you broke\""
        }
      ]
    }
  ]
}
```

### Render Slide Images (Template-Based) (`render_slides`)

Render carousel slides using template-based SVG composition with professional typography. Pixel-perfect text, consistent layouts. Supports template replication, slide backgrounds, and brand extraction. ⏱ Takes ~10-30 seconds. Async — poll with get_job_result.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `designed_carousels` | array | Yes | Array of designed carousels from design_slides or write_carousel step |
| `creative_direction` | object | No | Optional creative direction |
| `brand_url` | string | No | Website URL to auto-extract brand colors, fonts, and page images for styling and slide backgrounds. |
| `template_images` | array | No | Template carousel image(s) to replicate via vision LLM. Brand colors/fonts override template styling if provided. |
| `slide_images` | array | No | Image URLs or file paths for slide backgrounds. Takes priority over generated and brand page images. Alias: images. |
| `images` | array | No | Alias for slide_images. Image URLs or file paths for slide backgrounds, distributed across slides in order (CTA excluded). |
| `photo_backgrounds` | boolean | No | Generate photo backgrounds via fal.ai (default: false). User-provided slide_images/images take priority. |

**Returns:** Array of carousels with rendered slide image paths for auto-upload. Includes saved_template_id if a template was analyzed and persisted.

**Examples:**

*Render slides from designed carousel using template composition:*

```json
{
  "designed_carousels": [
    {
      "hook_id": "hook_1",
      "carousel_title": "Budgeting Mistakes",
      "slides": [
        {
          "slide_number": 1,
          "text_overlay": {
            "headline": {
              "text": "5 budgeting mistakes"
            }
          },
          "color_scheme": {
            "background": "#1a1a2e",
            "text": "#ffffff",
            "accent": "#ffd700"
          }
        }
      ]
    }
  ]
}
```

### Export Editable SVGs (`export_editable`)

Generate editable SVG files for each carousel slide. SVGs import into Figma, Canva, or Illustrator with fully editable text layers. No external API needed. ⏱ Takes ~1-2 seconds per slide. Step 6 (optional) — requires designed carousels from step 4.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `designed_carousels` | array | Yes | Array of designed carousels from design_slides step |
| `creative_direction` | object | No | Optional creative direction |
| `format` | string | No | Output format (default: svg) (svg, svg_bundle) |

**Returns:** Array of carousels with SVG content per slide, plus asset paths for auto-upload

**Examples:**

*Export editable SVGs for Figma:*

```json
{
  "designed_carousels": [
    {
      "hook_id": "hook_1",
      "carousel_title": "Budgeting Mistakes",
      "slides": [
        {
          "slide_number": 1,
          "text_overlay": {
            "headline": {
              "text": "5 budgeting mistakes"
            }
          },
          "color_scheme": {
            "background": "#1a1a2e",
            "text": "#ffffff",
            "accent": "#ffd700"
          }
        }
      ]
    }
  ]
}
```

## Quick Start

```bash
# Via CLI
TOOLROUTER_API_KEY=tr_live_xxx npx -y toolrouter-mcp call faceless-carousels research_niche --niche personal finance for millennials --platform instagram --goals followers,saves

# Via REST API
curl -H "Authorization: Bearer tr_live_xxx" \
     -d '{"tool":"faceless-carousels","skill":"research_niche","input":{"niche":"personal finance for millennials","platform":"instagram","goals":["followers","saves"]}}' \
     https://api.toolrouter.com/v1/tools/call
```

## Frequently Asked Questions

### Do I need to research the niche first?

It helps a lot. `research_niche` is the long-form discovery step that surfaces audience pain points, trending topics, and competitor patterns before you write the carousel.

### What is the quickest way to make a carousel?

Use `write_carousel` if you want the fast path. It combines hook, slide copy, emphasis text, and color direction in one call instead of spreading the work across several steps.

### Can I export editable files for design work?

Yes. `export_editable` generates slide SVGs that can be opened in tools like Figma, Canva, or Illustrator with editable text layers intact.

### How many slides do the carousels usually have?

The default flow builds 10-slide carousels, but the slide count is configurable when you need a shorter or longer sequence.

---

## Get Started with ToolRouter

**Already connected?** Call any tool with `use_tool({ tool, skill, input })`. Browse tools with `discover` or visit https://toolrouter.com/llms-full.txt

**New to ToolRouter?** Connect with one command (no API key needed — auto-provisions on first use):

```bash
# MCP (Claude Code, Codex CLI)
claude mcp add toolrouter -- npx -y toolrouter-mcp

# MCP (Cursor, Windsurf, Cline, VS Code, Gemini CLI, Claude Desktop)
{"mcpServers":{"toolrouter":{"command":"npx","args":["-y","toolrouter-mcp"]}}}

# Claude Chat / Claude Cowork / Claude Mobile — add as a connector:
# Settings → Connectors → Add custom connector → URL: https://api.toolrouter.com/mcp

# ChatGPT — add as an app:
# Settings → Apps → Advanced settings → enable Developer mode → Create app → MCP Server URL: https://api.toolrouter.com/mcp

# CLI (works instantly, no restart needed)
npx -y toolrouter-mcp tools                    # browse all tools
npx -y toolrouter-mcp search "seo"             # search by keyword
npx -y toolrouter-mcp call seo analyze_page --url https://example.com
```

Free tools work immediately. For paid tools, visit https://toolrouter.com/claim to add credits.

All platforms: https://toolrouter.com/connect | Full catalog: https://toolrouter.com/llms-full.txt | Docs: https://toolrouter.com/docs