---
name: viral-works
description: What is working right now in a niche on TikTok, Instagram Reels and YouTube Shorts — one vidIQ search for TikTok and Reels and one for Shorts return posts that did many times better than their account's usual, each with the hook of the first 3 seconds, the format, the pacing and the sound where vidIQ reads them; then at most three picks, a pattern line and the FlashBoards mode that makes each format.
---
# What is working right now

FlashBoards user skill, version 1.2.3 (2026-10-13).

On the board, read these guides with `list_skills` and `get_skill` when the assistant exposes them; otherwise use the hosted index through an available read-only retrieval tool. Use that runtime’s actual model discovery, current page context and guarded board actions for execution. Keep native readiness, approval and cost gates; do not claim a guide was read when retrieval is unavailable.

Read related guides with `get_skill({skillId:"<id>"})` or the [hosted index](https://pub-78da82d51ed14147ac554d38094b0c0b.r2.dev/user-skills/1.2.3/index.html). Reading a guide does not start or authorize a paid generation.

Read `viral` for the shared rules. **The person's own niche and audience. The example run is a measurement of public posts, not the person's results.**

Slots: {topic} · {platforms} · {audience} · {lens} — format, hook or concept.

## One search a platform group, three picks, one decision

1. **Word the topic the way the post would be described**, 3–6 words: the niche plus the format if the person named one — "skincare routine", "AI animated character talking to camera", "coffee shop owner day in the life". Not a hashtag, not a sentence.
2. **Pick the lens**, what the search matches on:
   - `format` (default): posts built the same way ("talking head with captions", "animated skit");
   - `hook`: posts that open the same way, when the person asks for hooks or openers;
   - `concept`: posts about the same idea, when the person has a concrete idea and wants to see who did it.

   `format` and `hook` match how a post is built, not its subject: they bring back other niches built the same way. When the person wants their own niche, use `concept`, or say that the picks share the format, not the topic.
3. **TikTok and Reels — one paid call for both**: `vidiq_research` with `tool: "instagram_tiktok_outlier_search"`, a new `requestId` and `input`:
   ```json
   {"query": "{topic}", "audienceQuery": "Culture/Region: Global, English-speaking; Global: true; Demographics: {audience};", "embeddingType": "format", "resultsPerPlatform": 3, "collapseByCreator": true, "datePostedAfter": "<30 days ago, ISO>"}
   ```
   `audienceQuery` is required and keeps that exact shape; a region the person named goes there with `Global: false` ("Culture/Region: UK/British; Global: false; …"). `descriptionLanguage: ["<code>"]` narrows the captions' language.
4. **Shorts — one paid call**: `vidiq_research` with `tool: "outliers"`, a new `requestId` and `input` `{"keyword": "{topic}", "contentType": "short", "publishedWithin": "thisMonth", "limit": 3}`. Add `"language"` only for English titles: vidIQ filters Shorts by title language only in English. Long YouTube: `"contentType": "long"`.
5. **Show at most 3 picks**, one line each: who, and how many times their usual; the hook of the first 3 seconds; why it works. Then the pattern line if it says something ("2 of 3 put text in the first 3 seconds, 26 s median"). Then a choice: the picks, "Show me more", "Make my own idea". Never paste the whole output.
6. **When they pick one**: name its format in plain words and the mode that makes it (the table in `viral`), and offer to make their version — their character, their words, that structure.

## Reading the answer

- `38x their median of 40K` (TikTok and Reels) or a breakout score (Shorts): the post's views against that account's usual. A small account at 300× is a format that travels without an audience; a big account at 4× is mostly the account.
- `hook_0_3s` (TikTok and Reels): what is on screen, the on-screen text, the sound. This is the part to learn from.
- `format`: the template in one sentence; `execution` (pacing, captions) and `audio` are how it is cut.
- A pattern across 3–6 posts is a hint, not a law: say "2 of 3", never "most viral videos".
- Shorts come with a title, views per hour and a breakout score, without a hook breakdown.
- An Instagram result names its reel by shortcode: the link is `https://www.instagram.com/reel/<shortcode>/`.

## Rules

1. One search per question. A second search only for a different topic or lens the person asked for. A repeat of the same input within 12 hours comes back `cached: true` for free.
2. Never present a pick as a guarantee: it worked for that account, that week.
3. Never copy a pick's words, title or look: structure only.
4. When vidIQ answers `VIDIQ_PAYMENT_REQUIRED` (the balance cannot cover the call), say so and offer the parts of the viral radar that need no vidIQ (`viral-score`, `viral-rules`); do not search another way.

## Example run (reference only — never reuse its posts or numbers as the person's)

- 2026-10-12, "skincare routine", lens hook: Reels — a DIY mask series at 915× the account's usual (hook: peeling the mask off, text "7 DAYS OF DIY SKINCARE", voice from the first frame); TikTok — three posts at 3–10×; Shorts — a dermatologist's routine at 35× on a 3K channel. 10 credits.

## Execute through MCP or on the board

Use the person's FlashBoards account; never ask for a personal provider key or run the source's local scripts. Discover `get_account`, `list_generation_models` and the tools of this client first: a published guide does not prove a feature is deployed.

**Headless, no open board.** Quote with `estimate_generation_cost` (skill models: `estimate_skill_model`), then run `generate_image`, `generate_video`, `generate_audio` or `run_skill_model` with one stable `generationAttemptId` per logical attempt. Pass `maxCostUsd` only when the current operation and selected model support it; otherwise use the quoted cost and the person's explicit approval with the supported controls. Never silently ignore an unsupported spending cap; make one `get_generation` check after `retryAfterSeconds`. Pass the person's own results by `generationId`: images in `referenceGenerationIds`, `firstFrameUrl` and `endFrameUrl`, audio in `referenceAudioUrls` or `targetAudioUrl`, videos in `referenceVideoGenerationIds`. They are read on the server; signed result links do not work as public URLs. Every `generationId` a tool returns stays valid: a later read of the same result gives a different string, and both work. Film frames and gallery pictures go in by `previewHandle`: `referencePreviewHandles` of the generation tools, a `{previewHandle}` source of `arrange_images`, `crop_image` and `pad_image`, and `describe_media`. New files come from `show_media_upload_picker` as receipts. The person's character comes in as its sheet, by `generationId` or as an upload; there is no search by name. If the person names a character without the sheet, ask for it or make one with `character-sheet`; do not scan recent results for it. Free server steps: `trim_video`, `concat_videos`, `conform_video`, `replace_video_audio`, `extract_video_frame`, `extract_video_audio`, `detect_video_cuts`, `crop_image`, `pad_image`, `arrange_images`, `cut_audio_span`, `concat_audio_tracks`, `mix_audio_tracks`, `fit_audio_duration`, `add_audio_reverb`. Check every result with `describe_media` (a question about an image; `model`, `mode` and `sourceRange` only for a video) and `transcribe_media` for speech. Both checks are paid: `describe_media` costs a fraction of a cent for an image and about 2–4 ¢ for a short video (more for a long one), `transcribe_media` under 1 ¢ a minute — count the checks you plan in the price you name before the first paid step. `describe_media` is not reliable about sound: it misses effects mixed under music and can hear voices or instruments that are not there. Check speech with `transcribe_media` and ask the person to listen for effects and music. Never repay an uncertain submission; reuse an attempt ID only for the identical request. Make each new `requestId` or `generationAttemptId` unique, for example the task, the date and a short random suffix: an ID used before, even in another chat, replays that earlier request or answers `REQUEST_ID_CONFLICT`.

**On the board.** Inspect with `list_board_sessions` and `get_board_snapshot` and carry the same `sessionId` and a fresh `activeBoardId` as `expectedBoardId`. Native cards: `execute_board_action` (`listNativeModels`, `setModel`), `prepare_board_generation` with ordered board items or owned outputs, then one `generate_on_board` within the authorized budget. Board media tools: `list_media_tools` → `start_media_tool` → `get_media_tool_run`. Put headless results on a board with `add_media_to_board`.

Keep mandatory safety settings and the live limits of each model. Prices, timings, endpoints and "free retry" claims in the sources are historical, not FlashBoards contracts. If a step this guide needs is not available or is refused (a tool error, `audio_not_configured`, a missing model or input), keep the finished assets, tell the person which step is blocked and why, and ask how to go on. A single generation that ends `failed` is not a blocked step: submit it once more with a new `generationAttemptId` (reworded if it may have hit the content checker), and stop to ask only if it fails again. A failed attempt is not always refunded, so the retry may be paid again and `maxCostUsd` caps each request on its own: count both against the budget the person approved. Never swap in another route on your own: no image model redrawing a layout or a frame, no `describe_media` in place of the frames it should check, no clip generated only to take its sound, no picture drawn where the guide takes a film frame.

## Source and related guides

- The owner's viral radar (flashboards-apps `.claude/skills/viral-works`, 2026-10-12); no Learn article yet.

Read: `viral`, `viral-score`, `reels`, `toon`, `ad`. Source experiments and demo materials are historical; use the person's own approved media.
