Skip to main content
Back to BlogAI Guides

How to Write TikTok Captions (Five Templates, a Vibe Picker That Only Moves Two of Them, and Hashtags That Ignore Your Topic)

Write TikTok captions with the generator — and learn why the vibe picker only affects the Hook and Trend styles, why the CTA/Emoji/Minimalist are vibe-blind, why the 150-char badge is always green, and why all 15 hashtags ignore your topic.

The Toolbox TeamAugust 14, 20267 min read

Pick "Controversial." Three of your five captions don't change.

Type "morning routine" into the AI TikTok Caption Generator, set vibe to Educational, hit Generate. You get five captions: Hook-based, Trend Format, CTA, Emoji-heavy, Minimalist. Switch to Controversial and Generate again. The Hook and Trend rewrite — "Controversial opinion: morning routine is overrated. Fight me." The other three come back byte-identical. The vibe picker, which looks like the main control, drives two of five outputs. The rest are vibe-blind.

The thing to understand: it's five deterministic templates with topic fills, and the vibe selector only threads into the two that vary. The "AI" framing and the 500 ms spinner oversell string slicing and a lookup table — no model, no randomness.

Five templates, fully deterministic

generateCaptions returns the same five structures every run, in the same order, with the same labels. The variation comes from your topic string and — for two of the five — the vibe. There's no random selection: hashStr(topic + vibe) is computed into a seed that is never read; si() next to it is dead code. Same topic + same vibe produces byte-identical output every click. There's no Regenerate button, and Generate doesn't reshuffle — nothing to reshuffle.

# Style Vibe-aware? Shape
1 Hook-based yes POV: You just discovered {topic}… 😭 (varies by vibe)
2 Trend Format yes Tell me you [X] {topic} without telling me… (varies by vibe)
3 CTA no Follow for more {topic} content — new videos every week! 📲
4 Emoji-heavy no 🔥 {topic} 🔥 — This literally changed my life. 💯 Save this! 📌
5 Minimalist no {topic}. That's it. That's the post.

The CTA, Emoji-heavy, and Minimalist are single strings hardcoded in the return — they don't read the vibe variable. A "satisfying" video and a "controversial" video get the same CTA. If the CTA must match the tone, rewrite it; the tool won't.

Topic slicing cuts mid-word

The templates use short = topic.slice(0, 30) + '...' when the topic exceeds 30 characters, and topic.slice(0, 40) / topic.slice(0, 60) for the Emoji-heavy and Minimalist. None slice on word boundaries. A 45-char topic becomes a really long topic about morn... in the Hook — mid-word, then an ellipsis. The Minimalist uses slice(0, 60) with no ellipsis — ...and productiv. That's it. "productiv" cut mid-word, then a period. The Trend Format inserts {short} twice — double ellipsis, mid-sentence. The fix is upstream: keep topics under 30 chars, or end on a word boundary. The tool won't clean up a bad cut.

The 150 badge is always green

Each caption shows a {charCount}/150 badge — green at ≤150, yellow above. The FAQ frames 150 as the limit. Two problems:

  1. 150 is a display truncation, not a post limit. TikTok accepts captions up to 2,200 characters; the first ~150 show in-feed before "more." A 200-char caption still posts — it just gets cut in the feed preview. The badge implies a hard ceiling; it's a soft target.
  2. The built-in templates can't exceed 150. They're pre-truncated (short ≤33, Emoji ≤40, Minimalist ≤60), so the longest output is ~130 chars. The yellow warning is unreachable unless you hand-edit. The badge is decorative for generated output. (Emojis count as 2 UTF-16 code units each in .length.)

Hashtags are vibe-locked and topic-agnostic

The 15 hashtags are HASHTAGS_BY_VIBE[vibe] — a fixed array per vibe, same order, every time. Your topic never enters hashtag selection. A "quantum physics" educational video and a "sourdough starter" educational video get the identical 15 — topic-agnostic.

Three consequences:

  • #fyp and #foryou are in every vibe. Both appear in all five arrays — the most-used tags on TikTok, near-zero discriminative value. The algorithm treats them as noise.
  • 15 is a lot. TikTok recommends 3–5 relevant hashtags. 15 risks looking spammy, and the more generic tags you stack, the less the algorithm can categorize the video.
  • Hashtags count toward your caption budget — the tool doesn't recount. On TikTok, hashtags are part of the caption text. 15 tags × ~10 chars = ~150 chars of tags alone, which would blow past the 150-char display budget. But the caption badge and the hashtag panel are separate; the tool never adds hashtags to the caption and recomputes. Paste caption and 15 hashtags into TikTok and you're well over 150 — no warning.

Gotchas

  • No Regenerate, and no point to one. Output is deterministic — same topic + vibe = identical captions every click. To get variation, change the topic or the vibe (only Hook/Trend change).
  • No persistence. No history, no favorites, no saved sessions. Copy anything you want to keep; refresh clears everything.
  • The vibe picker oversells its reach. It looks like the primary control, but only affects 2 of 5 captions.

Summary

  • The generator is five deterministic templates — no model, no randomness (the seed is dead code). Same topic + vibe produces byte-identical output every click; no Regenerate because there's nothing to reshuffle.
  • The vibe picker only affects the Hook and Trend styles; CTA, Emoji-heavy, and Minimalist are hardcoded and vibe-blind. A "controversial" video gets the same CTA as a "satisfying" one.
  • Topic slicing cuts mid-wordmorn..., productiv. That's it. Keep topics under 30 chars or end on a word boundary.
  • The 150-char badge is always green for built-in templates (pre-truncated below 150), and 150 is a display truncation point, not a post limit (TikTok accepts 2,200).
  • 15 hashtags are vibe-locked and topic-agnostic#fyp and #foryou in every set, your topic never enters selection, and the tool doesn't recount the caption budget when you paste them in.
  • Generate with the TikTok Caption Generator. For other platforms: YouTube descriptions, YouTube titles, email subject lines. For a different shape: slogan generator.