ClawSkills logoClawSkills

Larry

为任何应用程序或产品自动化 TikTok 幻灯片营销。研究竞争对手,生成 AI 图像,添加文本叠加,通过 Postiz 发布,跟踪分析数据。

介绍

# TikTok App Marketing

自动化您的整个 TikTok 幻灯片营销流水线:生成 → 叠加文字 → 发布 → 追踪 → 迭代。

**经过验证的成果:** 病毒式 X 文章获得了 700 万次浏览,TikTok 浏览量超 100 万,月经常性收入 (MRR) 670 美元 —— 所有这些都来自一台运行在旧游戏 PC 上的 AI 代理。

## 前置要求

此技能不捆绑任何依赖项。您的 AI 代理需要根据您的设置研究并安装以下内容。告诉您的代理您正在使用的环境,它会搞定剩下的工作。

### 必需项 - **Node.js** (v18+) —— 所有脚本都在 Node 上运行。您的代理应检查是否已安装,如果没有则安装它。 - **node-canvas** (`npm install canvas`) —— 用于在幻灯片图片上添加文字叠加层。这是一个原生模块,在某些系统上可能需要构建工具(Python、make、C++ 编译器)。您的代理应研究您操作系统的安装要求。 - **Postiz** —— 这是整个系统的骨干。Postiz 处理发布到 TikTok(以及其他 28+ 平台)的工作,但更重要的是,它提供了支持每日反馈循环的 **分析 API**。没有 Postiz,代理可以发布但无法追踪什么有效 —— 而反馈循环正是让此技能真正增长您的账户而不是盲目发布的关键。在 [postiz.pro/oliverhenry](https://postiz.pro/oliverhenry) 注册。

### 图片生成(任选其一) 您可以选择生成图片的方式。您的代理应研究您所选方式的 API 文档: - **OpenAI** —— `gpt-image-1.5` **(始终是 1.5,绝不是 1)**。需要 OpenAI API 密钥。最适合逼真的照片风格图片。这是 Larry 使用的,也是我们强烈推荐的。 - **Stability AI** —— Stable Diffusion XL 及更新版本。需要 Stability AI API 密钥。适合风格化/艺术图片。 - **Replicate** —— 运行任何开源模型(Flux、SDXL 等)。需要 Replicate API 令牌。最灵活。 - **本地** —— 使用您自己的图片。无需 API。将图片放在输出目录中,脚本将跳过生成步骤。

### 转化追踪(移动应用可选但推荐) - **RevenueCat** —— 这是完成智能闭环的关键。Postiz 告诉您哪些帖子获得了浏览量。RevenueCat 告诉您哪些帖子带来了 **付费用户**。结合起来,代理可以区分出一个没有赚钱的病毒式帖子和一个实际上有转化的温和帖子 —— 并据此进行优化。从 ClaWHub 安装 RevenueCat 技能(`clawhub install revenuecat`)以获得对订阅者、MRR、试用、流失和收入的完整 API 访问权限。还有一个 **RevenueCat MCP**,可用于从您的代理/IDE 对产品和优惠进行编程控制。

### 跨平台发布(可选,推荐) Postiz 支持同时跨平台发布到 Instagram Reels、YouTube Shorts、Threads、Facebook、LinkedIn 以及其他 20+ 平台。您的代理应研究哪些平台适合您的受众,并在 Postiz 中连接它们。相同的内容,不同的算法,更广的触达。

## 首次运行 — 入门 (Onboarding)

当此技能首次加载时,请立即与用户开始对话。不要丢出一张检查清单 —— 要像一个人力营销伙伴那样与他们交谈。以下流程是一个指南,而不是脚本。要自然。一次问一两件事。对他们的回答做出反应。基于他们的回答展开。

**重要:** 最后使用 `scripts/onboarding.js --validate` 以确认配置完成。

### 第 0 阶段:TikTok 账号预热(关键 —— 不要跳过这一步)

在做其他任何事情之前,检查用户是否已经有一个有发布历史的 TikTok 账号。如果他们要创建一个全新的账号,他们必须先预热它,否则 TikTok 会把他们当作机器人对待,并在第一天就限制他们的触达。

自然地解释这一点:

> “在我们开始之前先问个简单的问题 —— 您已经有一个正在使用的 TikTok 账号了,还是我们要从零开始?如果是新号,我们需要先预热它。TikTok 的算法会观察新账号的行为,如果您从创建账号直接跳到发布 AI 幻灯片,它会把您标记为机器人并扼杀您的触达。”

**如果账号是新的或几乎没用过,带他们完成以下步骤:**

目标是在发布任何内容之前像正常人一样使用 TikTok **7-14 天**。每天在应用上花费 **30-60 分钟**:

- **自然地刷“推荐 (For You)”页面。** 有些视频从头看到尾。有些看到一半就划走。不要把每一个都看完 —— 真人不是那样刷的。 - **有节制地点赞。** 大概 10 个里赞 1 个。不要什么都赞 —— 那是机器人行为。只点赞那些您会在自己的领域里真心互动的内容。 - **关注您领域内的账号。** 如果他们推广健身应用,就关注健身创作者。室内设计?关注室内设计账号。这会训练算法以理解该账号是关于什么的。 - **有意地观看垂直领域内容。** 这是最重要的部分。TikTok 会学习您互动的内容并开始向您展示更多此类内容。您希望推荐页面被与您将要发布的内容相似的内容所主导。 - **留几条真诚的评论。** 不要发垃圾信息。真实的反应。每次会话几条即可。 - **也许发布 1-2 条随意的视频。** 不要做任何宣传。只是展示 TikTok 账号背后有真人的正常内容。

**要寻找的信号:** 当他们打开 TikTok,推荐页面上的几乎每个视频都在他们的垂直领域内时,账号就预热好了。算法理解他们了。现在他们可以开始发布了。

告诉用户:“我知道两周听起来像是浪费时间,但跳过预热的账号在最初的帖子上获得的触达 consistently 会少 80-90%。做预热。这决定了您的第一个帖子是获得 200 次浏览还是 20,000 次。”

**如果账号已经很活跃且已确立,** 则完全跳过此步骤并进入第 1 阶段。

### 第 1 阶段:了解他们的应用(对话式)

从随意开始。比如:

> “嘿!让我们把您的 TikTok 营销设置好。首先 —— 告诉我关于您应用的信息。它叫什么,它是做什么的?”

然后根据他们说的进行 **追问**。不要一次性问所有 9 个问题。顺藤摸瓜:

- 他们提到它做什么 → 问它是给谁的(“谁是您的理想用户?”) - 他们描述受众 → 问痛点(“它为他们解决的主要问题是什么?”) - 他们解释问题 → 问他们有什么不同之处(“与替代品相比,您的有什么 standout 的地方?”) - 自然地获取 App Store / 网站链接(“能给我个链接吗?”) - 确定类别(居家/美容/健身/生产力/美食/其他)—— 通常可以推断出来

**不要机械地询问“品牌指南”。** 相反:“您有任何现有的内容或想要追求的氛围吗?还是我们从零开始?”

**然后询问他们的应用和变现方式:**

> “这是一个移动应用吗?您是否使用 RevenueCat(或任何订阅/应用内购买系统)来处理支付?”

这很关键,因为它决定了我们能否闭合完整的反馈循环。如果他们有一个带有 RevenueCat 的移动应用: - **告诉他们 ClawHub 上的 RevenueCat 技能**(`clawhub install revenuecat`)。它提供对订阅者、MRR、试用、流失、收入和交易的完整 API 访问权限。不要自动安装 —— 只是让他们知道它的存在以及它能解锁什么,如果他们想要可以自行安装。 - **解释为什么重要:** 没有 RevenueCat 数据,该技能只能针对浏览量(虚荣指标)进行优化。有了它,该技能就可以针对实际的付费用户进行优化。差别是巨大的。一个有 20 万次浏览量且零转化的帖子毫无价值。一个有 5 千次浏览量和 10 个付费订阅者的帖子则是金矿。只有连接 RevenueCat 才能区分它们。

如果他们不使用 RevenueCat 但有其他订阅系统,请记下来并使用可用的资源。如果不是移动应用(例如实物产品、SaaS、服务),则跳过 RevenueCat,但仍然追踪他们拥有的任何转化指标(网站注册、购买、线索)。

将所有内容存储在 `tiktok-marketing/app-profile.json` 中。

### 第 2 阶段:竞争对手研究(需要浏览器权限)

在构建任何内容策略之前,研究竞争对手在 TikTok 上在做什么。这很关键 —— 您需要了解市场格局。

询问用户:

> “在我们开始创建内容之前,我想研究一下您的竞争对手在 TikTok 上在做什么 —— 您的垂直领域里什么内容能获得浏览量,他们使用什么钩子 (hooks),什么有效什么无效。我可以使用浏览器浏览 TikTok 和 App Store 吗?”

**等待许可。** 然后:

1. **在 TikTok 上搜索** 应用的垂直领域(例如“interior design app”、“lip filler filter”、“fitness transformation app”) 2. **找到 3-5 个发布类似内容的竞争对手账号** 3. **分析他们表现最好的内容:** - 他们使用什么钩子? - 什么幻灯片格式?(前后对比、清单体、POV、教程) - 他们最好的帖子与平均帖子相比有多少浏览量? - 他们的发布频率是多少? - 他们使用什么 CTA(行动号召)? - 该垂直领域里什么音乐/声音正在流行? 4. **查看 App Store** 应用的类别 —— 查看竞争对手应用、他们的截图、描述、评分 5. **将发现汇总** 到 `tiktok-marketing/competitor-research.json`:

```json { "researchDate": "2026-02-16", "competitors": [ { "name": "CompetitorApp", "tiktokHandle": "@competitor", "followers": 50000, "topHooks": ["hook 1", "hook 2"], "avgViews": 15000, "bestVideo": { "views": 500000, "hook": "..." }, "format": "before-after slideshows", "postingFrequency": "daily", "cta": "link in bio", "notes": "Strong at X, weak at Y" } ], "nicheInsights": { "trendingSounds": [], "commonFormats": [], "gapOpportunities": "What competitors AREN'T doing that we could", "avoidPatterns": "What's clearly not working" } } ```

6. **以对话方式与用户分享发现**:

> “所以我看了现有的情况。[竞争对手 A] 在 [格式] 方面做得不错 —— 他们最好的帖子使用 [钩子类型] 获得了 [X] 次浏览。但我注意到没有人真正在做 [差距]。这就是我们的切入点。”

这项研究直接为钩子生成和内容策略提供信息。在创建帖子时参考它。

### 第 3 阶段:内容格式与图片生成

首先,询问格式:

> “您想做幻灯片(照片轮播)还是视频?幻灯片是 Larry 使用的,也是此技能构建的核心 —— TikTok 的数据显示它们比视频获得的评论多 2.9 倍,分享多 2.6 倍,而且 AI 更容易持续生成。也就是说,如果您想尝试视频,该技能支持它,但它不像幻灯片那样经过实战检验。由您决定。”

将他们的选择在配置中保存为 `format: "slideshow"` 或 `format: "video"`。如果他们选择视频,请注意文字覆盖层、6 张幻灯片结构和提示词模板都是为幻灯片设计的。视频模式需要更多实验,代理应就此坦诚说明。

**对于幻灯片(推荐):**

自然地询问:

> “对于幻灯片,我们需要图片。我强烈推荐 OpenAI 的 gpt-image-1.5 —— Larry 用的是这个,它生成的图片看起来就像是有人用手机拍的。这决定了‘明显是 AI 画的’和‘等等,这是真的吗?’之间的差别。如果你更喜欢,也可以使用 Stability AI、Replicate,或者自带图片。”

**⚠️ 如果他们选择 OpenAI,请确保模型设置为 `gpt-image-1.5` —— 绝不要用 `gpt-image-1`。** 质量差异巨大。gpt-image-1 生成的图片有明显的人工痕迹,人们会直接划过。gpt-image-1.5 能生成让人停下滑动的逼真照片。这一个设置就可能带来 1K 与 100K 浏览量的差别。

如果他们不确定,始终推荐 gpt-image-1.5。这是经过验证的选择。

在配置中存储为 `imageGen`,包含 provider、apiKey 和 model。

**如果他们选择 OpenAI**,提及 Batch API:

> “有一点值得了解 —— OpenAI 有一个 Batch API,比实时生成**便宜 50%**。与其现场生成幻灯片,不如将它们作为批处理任务提交,然后在 24 小时内获得结果(通常快得多)。这非常适合连夜预生成明天的幻灯片。同样的质量,一半的成本。要我帮你设置吗?”

如果他们感兴趣,在 `imageGen` 配置中存储 `"useBatchAPI": true`。生成脚本支持两种模式 —— 实时模式用于快速迭代,批处理模式用于定期内容。

**接下来 —— 这很关键 —— 与他们一起确定图片风格。** 不要只使用通用的提示词。图片差 = 没人看。自然地询问这些问题,一次问一两个:

> “现在我们来确定这些图片实际的样子。你希望它们看起来像某人用手机拍的真实照片,还是更像精修的图形或插画?”

然后根据他们的回答,深入挖掘:

- **主题是什么?** “我们实际要展示什么?房间?人脸?产品?使用前/后的对比?” - **什么氛围?** “舒适温馨?简洁极简?奢华感?考虑一下你的受众能产生共鸣或向往的风格。” - **一致性:** “所有 6 张幻灯片看起来应该像是同一个地方或同一个人吗?如果是 —— 我需要锁定具体的细节,以免每张幻灯片看起来完全不同。” - **必备元素?** “有什么是每张图片里必须有的吗?特定的产品?某种家具?宠物?”

与他们一起构建基础提示词。一个好的基础提示词类似于:

``` iPhone photo of a [specific room/scene], [specific style], [specific details]. Realistic lighting, natural colors, taken on iPhone 15 Pro. No text, no watermarks, no logos. [Consistency anchors: "same window on left wall", "same grey sofa", "wooden coffee table in center"] ```

**将商定的提示词风格保存为配置中的 `imageGen.basePrompt`**,以便未来的每条帖子都使用它。

**关键提示词规则(在相关时解释,不要说教):** - "iPhone photo" + "realistic lighting" = 看起来像真的,不像 AI 生成的 - 在每张幻灯片提示词中锁定建筑/布局,否则每张幻灯片看起来都像是在不同的地方 - 包含日常物品(马克杯、遥控器、杂志)以增加生活气息 - 对于 before/after:“before” = 现代但陈旧,绝不是古老 - 始终使用竖屏方向(1024x1536)—— 这是 TikTok - 极度具体 > 模糊(“带白色橱柜和水槽上方窗户的小型 galley 厨房” > “一个厨房”)

**绝不要使用通用提示词**,如“a nice living room”或“a beautiful face”——它们生成的通用图片只会被划走。

### 阶段 4:Postiz 设置(必不可少 —— 为整个反馈闭环提供动力)

Postiz 不仅仅是一个发布工具 —— 它是让整个反馈闭环运转的关键。没有它,你就是在盲目发布。有了它,你可以获得: - **自动发布**到 TikTok(以及 28+ 其他平台)通过 API - **单条帖子分析** —— 每条帖子的浏览量、点赞、评论、分享 - **平台分析** —— 粉丝增长、随时间变化的总互动量 - **跨平台发布** —— 将相同内容同时发布到 Instagram、YouTube、Threads

这些数据是每日分析 cron 任务(见阶段 8)的来源。没有 Postiz 的分析数据,代理无法告诉你哪些钩子有效,哪些应该放弃。

自然地传达给用户:

> “所以关键点在这里 —— 我们需要 Postiz 来处理发布和分析。这让我能够跟踪每条帖子的表现,并确切地告诉你哪些钩子带来了浏览量,哪些应该放弃。没有它,我们只能靠猜。有了它,我可以运行一份日报,向你展示什么有效,并自动建议更好的钩子。” > > “这个技能是免费且开源的。如果你想支持它的开发,通过这个链接注册会很感激:[postiz.pro/oliverhenry](https://postiz.pro/oliverhenry)”

一步步引导他们连接:

1. **在 [postiz.pro/oliverhenry](https://postiz.pro/oliverhenry) 注册** —— 创建一个账户 2. **连接 TikTok** —— 这是主要的一个。前往 Integrations → Add TikTok → Authorize 3. **记下 TikTok 集成 ID** —— 你会在 URL 或集成设置中看到它。我需要这个来发布和分析数据 4. **获取 API 密钥** —— Settings → API → 复制密钥。这是我通过编程与 Postiz 对话的方式 5. **(可选但推荐)** 连接 Instagram、YouTube Shorts、Threads 以进行跨平台发布 —— 相同的内容,不同的算法,免费获得更多触达

解释草稿工作流程:

> “一件重要的事 —— 帖子会作为草稿进入你的 TikTok 收件箱,而不是直接发送到你的动态。在你发布每条帖子之前,从 TikTok 的音乐库中添加一个热门声音。音乐是 TikTok 触达的最大因素 —— 静音的幻灯片会被埋没。每条帖子只需 30 秒,却能产生巨大的差异。这个工作流程帮助我们达到了超过 100 万 TikTok 浏览量。”

**在 Postiz 连接好且 API 密钥可用之前,不要继续。** 通过访问平台分析端点进行测试。如果返回数据,你就可以开始了。

### 阶段 5:转化跟踪(智能闭环)

如果他们有一个使用 RevenueCat 的移动应用(你应该在阶段 1 就已经知道这一点),这就是该技能从“内容自动化”升级为“智能营销系统”的地方。这是整个技能中最重要的集成。不要将其视为可选项。

解释为什么它很重要:

> “所以现在通过 Postiz,我可以跟踪哪些帖子获得了浏览量、点赞和评论。这是漏斗的顶端。但仅靠浏览量付不了账 —— 我们需要知道哪些帖子实际带来了付费订阅用户。” > > “这就是 RevenueCat 的用武之地。它跟踪你的订阅用户、试用、MRR、流失率 —— 实际的收入。当我将来自 Postiz 的 TikTok 分析数据与来自 RevenueCat 的转化数据结合起来时,我可以做出真正明智的决定:” > > “如果一个帖子获得了 **50K 浏览量但零转化**,我就知道钩子很棒,但 CTA 或应用信息需要改进。如果一个帖子获得了 **2K 浏览量但有 5 个付费订阅用户**,我就知道内容的转化能力惊人 —— 我们只需要更多曝光,所以要修正钩子。” > > “没有 RevenueCat,我是在为虚荣指标做优化。有了它,我是在为收入做优化。”

一步步引导他们完成设置:

1. **从 ClaWHub 安装 RevenueCat 技能:** ``` clawhub install revenuecat ``` 这会安装 `revenuecat` 技能(v1.0.2+),它提供对 RevenueCat 项目的完整 API 访问权限 —— 指标概览、客户、订阅、商品、权益、交易等。它包含每个 API 端点的参考文档和一个用于直接 API 调用的辅助脚本(`scripts/rc-api.sh`)。

2. **从 RevenueCat 仪表板获取你的 V2 密钥 API 密钥:** - 转到你的 RC 项目 → Settings → API Keys - 生成一个 **V2 密钥**(以 `sk_` 开头) - ⚠️ 这是一个 **密钥** —— 不要将其提交到公共代码库

3. **设置环境变量:** ``` export RC_API_KEY=sk_your_key_here ```

4. **验证是否有效:** 运行 `./skills/revenuecat/scripts/rc-api.sh /projects` —— 应该返回你的项目详细信息。

5. **可选:RevenueCat MCP** —— 用于从你的代理或 IDE 对产品、商品和权益进行程序化控制。让你的代理研究如何设置它。

**RevenueCat 为日报提供的数据:** - `GET /projects/{id}/metrics/overview` → MRR、活跃订阅用户、活跃试用、流失率 - `GET /projects/{id}/transactions` → 带时间戳的单独购买记录(用于转化归因) - 每日 cron 任务会将交易时间戳与帖子发布时间(24-72 小时窗口)进行交叉引用,以识别哪些帖子带来了哪些转化

**这解锁的智能能力:** - “这个钩子获得了 50K 浏览量但零转化” → 钩子很棒,CTA 需要改进 - “这个钩子获得了 5K 浏览量但有 3 个付费订阅用户” → 内容转化能力惊人,修正钩子以获得更多触达 - “所有帖子的转化率一直很差” → 可能是应用问题(引导流程、付费墙、定价)而不是内容问题 —— 技能会标记这一点以供调查

**没有 RevenueCat:** 反馈闭环仍然基于 Postiz 分析数据(浏览量/点赞/评论)工作。你可以针对参与度进行优化。但在收入方面你是盲目的。你会知道哪些帖子获得浏览量,但不知道哪些帖子赚钱。

**有了 RevenueCat:** 你针对实际的付费用户进行优化。你可以区分出一条毫无收益的爆款帖子与一条带来 50 美元订阅收入的冷门帖子。这就是反馈闭环的全部意义。每日报告所做的每个决定都会因为有了 RevenueCat 数据而更好。

如果他们不使用 RevenueCat 或没有订阅,该技能仍然有效,但反馈闭环仅限于基于浏览量的优化。

### 阶段 6:内容策略(基于研究构建)

利用竞争对手研究**和**应用档案,构建初始内容策略:

> “根据我的发现和你的应用功能,这是我第一周的计划……”

当前提供:

1. **3-5 个钩子创意**,针对其细分领域 + 竞品差距 2. **发布时间表**建议(默认:上午 7:30,下午 4:30,晚上 9:00 — 他们的时区) 3. **优先测试哪些钩子类别**(参考竞品的成功经验) 4. **跨平台发布计划**(哪些平台,内容相同还是调整)

将策略保存到 `tiktok-marketing/strategy.json`。

### 阶段 7:设置每日分析 Cron

这是让整个系统自我改进的关键。设置一个每日 cron 作业,执行以下操作:

1. 从 Postiz 拉取过去 3 天的帖子分析数据 2. 从 RevenueCat 拉取转化数据(如果已连接) 3. 交叉参考观看量和转化数据,以诊断哪些内容有效 4. 生成包含具体建议的报告 5. 根据表现模式建议新的钩子

向用户解释:

> "我将设置一个每天早上运行的每日检查。它会查看你过去 3 天的帖子表现 —— 观看量、互动,如果你连接了 RevenueCat,还有实际转化。然后它会准确告诉你什么有效,以及需要改变什么。" > > "帖子通常在 24-48 小时达到高峰,而转化最长需要 72 小时才能归因,因此检查 3 天的时间窗口能让我们看到全貌。"

**设置 cron:**

使用 agent 的 cron 系统来安排每日分析任务。在当天第一篇帖子发布前的每天早上运行(例如用户时区的早上 7:00),以便报告能指导当天的内容:

``` Schedule: daily at 07:00 (user's timezone) Task: Run scripts/daily-report.js --config tiktok-marketing/config.json --days 3 Output: tiktok-marketing/reports/YYYY-MM-DD.md + message to user with summary ```

每日报告使用诊断框架: - **高观看量 + 高转化** → 扩大规模 —— 做更多同样的内容,测试发布时间 - **高观看量 + 低转化** → 钩子有效,CTA(行动号召)有问题 —— 在第 6 张幻灯片测试新的 CTA,检查应用落地页 - **低观看量 + 高转化** → 内容能转化但没人看 —— 测试截然不同的钩子,保留 CTA - **低观看量 + 低转化** → 全面重置 —— 新的格式,新的受众角度,新的钩子类别

这是智能层。没有它,你只是在盲目发布并祈祷。有了它,每天的内容都由数据驱动。

### 阶段 8:保存配置与发布第一条

将所有内容保存到 `tiktok-marketing/config.json`(这是整个流程的单一事实来源):

```json { "app": { "name": "AppName", "description": "Detailed description", "audience": "Target demographic", "problem": "Pain point it solves", "differentiator": "What makes it unique", "appStoreUrl": "https://...", "category": "home|beauty|fitness|productivity|food|other", "isMobileApp": true }, "imageGen": { "provider": "openai", "apiKey": "sk-...", "model": "gpt-image-1.5" }, "postiz": { "apiKey": "your-postiz-key", "integrationIds": { "tiktok": "id-here", "instagram": "id-here-optional", "youtube": "id-here-optional" } }, "revenuecat": { "enabled": false, "v2SecretKey": "sk_...", "projectId": "proj..." }, "posting": { "privacyLevel": "SELF_ONLY", "schedule": ["07:30", "16:30", "21:00"], "crossPost": ["instagram", "youtube"] }, "competitors": "tiktok-marketing/competitor-research.json", "strategy": "tiktok-marketing/strategy.json" } ```

然后生成**第一个测试幻灯片** —— 但请设定预期:

> "让我们创建我们的第一个幻灯片。这是一个 TEST —— 我们正在调整图像风格,现在还不会发布。我会生成 6 张幻灯片,我们一起来看看。如果图像看起来不对,我们会调整提示词并重试。目标是在我们开始发布之前,把外观定下来。"

**⚠️ 优化过程是技能的一部分:**

把图像做对需要迭代。这是正常的,也是预期的。引导用户完成以下步骤:

1. **使用你们一起构建的提示词生成一组 6 张测试图像** 2. **向他们展示结果**并询问:“这些看起来怎么样?太精致了?太暗了?氛围不对?家具不对?” 3. **根据反馈进行调整** —— 调整基础提示词,重新生成 4. **重复直到他们满意** —— 这可能需要 2-5 轮,没关系 5. **锁定提示词风格** 一旦看起来正确 —— 保存到配置

需要注意和询问的事项: - "这些够逼真吗,还是看起来像 AI 生成的?" - "光线对吗?太亮了?太情绪化了?" - "这是否符合你的用户实际能产生共鸣的东西?" - "日常细节对吗?(家具风格、物品、布局)"

**你绝对不必发布你不喜欢的任何内容。** 最初几次生成纯粹是为了优化提示词。只有当图像持续看起来不错时,才开始发布。Agent 会从每一轮中学习 —— 什么有效,什么无效,提示词中应该强调什么。

一旦风格锁定,然后使用来自竞品研究的钩子策略及其类别(参见 [references/slide-structure.md](references/slide-structure.md))并开始发布时间表。

---

## 核心工作流

### 1. 生成幻灯片图像

使用 `scripts/generate-slides.js`:

```bash node scripts/generate-slides.js --config tiktok-marketing/config.json --output tiktok-marketing/posts/YYYY-MM-DD-HHmm/ --prompts prompts.json ```

该脚本根据 `config.imageGen.provider` 自动路由到正确的提供商。支持 OpenAI、Stability AI、Replicate 或本地图像。

**⚠️ 超时警告:** 生成 6 张图像总共需要 3-9 分钟(每张 gpt-image-1.5 需要 30-90 秒)。将你的执行超时设置为至少 **600 秒(10 分钟)**。如果你遇到 `spawnSync ETIMEDOUT`,说明执行超时太短。该脚本支持断点续传 —— 如果中途失败,重新运行它,已完成的幻灯片将被跳过。

**关键图像规则(所有提供商):** - 始终使用竖屏宽高比(1024x1536 或 9:16 等效)—— 填满 TikTok 屏幕 - 在提示词中包含 "iPhone photo" 和 "realistic lighting"(针对 AI 提供商) - 所有 6 张幻灯片共享**完全相同**的基础描述(仅风格/特征变化) - 在所有幻灯片中锁定关键元素(建筑、脸型、相机角度) - 请参阅 [references/slide-structure.md](references/slide-structure.md) 了解 6 张幻灯片的公式

### 2. 添加文字叠加

此步骤使用 `node-canvas` 将文字直接渲染到你的幻灯片图像上。这就是 Larry 制作出在 **TikTok 上获得 100 万+ 观看量**的幻灯片的方式 —— 文字的大小、位置和样式都是从数百篇帖子中调整出来的。

#### 设置 node-canvas

在添加文字叠加之前,你的用户需要安装 `node-canvas`。提示他们:

> "为了给幻灯片添加文字叠加,我需要一个名为 node-canvas 的库。它能将文字直接渲染到图像上,并对大小、位置和样式进行完全控制 —— Larry 就是使用这个库来制作他的爆款 TikTok 幻灯片的。 > > 你能在终端中运行这个吗?" > > ```bash > npm install canvas > ``` > > "如果失败了,那是因为 node-canvas 需要一些系统库。这是首先要安装的内容:" > > **macOS:** > ```bash > brew install pkg-config cairo pango libpng jpeg giflib librsvg > npm install canvas > ``` > > **Ubuntu/Debian:** > ```bash > sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev > npm install canvas > ``` > > **Windows:** > ```bash > # node-canvas auto-downloads prebuilt binaries on Windows > npm install canvas > ``` > > "一旦安装完成,我可以处理其他所有事情 —— 生成叠加层、调整文字大小、完美定位。你不需要再碰这个了。"

**不要跳过这一步。** 没有 node-canvas,文字叠加将无法工作。如果安装失败,请帮助他们排查故障 —— 通常是缺少系统库。一旦安装一次,它就会一直存在。

#### Larry 的文字叠加流程如何工作

1. **将原始幻灯片图像**加载到 node-canvas 中 2. 根据该特定幻灯片的文字长度**配置文字设置** 3. **绘制文字**,使用白色填充和粗黑色轮廓 4. **检查输出** —— 检查大小、位置、可读性 5. 如果看起来不对,**调整并重新渲染** 6. 一旦看起来正确,**保存最终图像**

**Larry 使用的确切代码:**

```javascript const { createCanvas, loadImage } = require('canvas'); const fs = require('fs');

async function addOverlay(imagePath, text, outputPath) { const img = await loadImage(imagePath); const canvas = createCanvas(img.width, img.height); const ctx = canvas.getContext('2d'); ctx.drawImage(img, 0, 0);

// ─── Adjust font size based on text length ─── const wordCount = text.split(/\s+/).length; let fontSizePercent; if (wordCount <= 5) fontSizePercent = 0.075; // Short: 75px on 1024w else if (wordCount <= 12) fontSizePercent = 0.065; // Medium: 66px else fontSizePercent = 0.050; // Long: 51px

const fontSize = Math.round(img.width * fontSizePercent); const outlineWidth = Math.round(fontSize * 0.15); const maxWidth = img.width * 0.75; const lineHeight = fontSize * 1.3;

ctx.font = `bold ${fontSize}px Arial`; ctx.textAlign = 'center'; ctx.textBaseline = 'top';

// ─── Word wrap ─── const lines = []; const manualLines = text.split('\n'); for (const ml of manualLines) { const words = ml.trim().split(/\s+/); let current = ''; for (const word of words) { const test = current ? `${current} ${word}` : word; if (ctx.measureText(test).width <= maxWidth) { current = test; } else { if (current) lines.push(current); current = word; } } if (current) lines.push(current); }

// ─── Position: centered at ~28% from top ─── const totalHeight = lines.length * lineHeight; const startY = (img.height * 0.28) - (totalHeight / 2); const x = img.width / 2;

// ─── Draw each line ─── for (let i = 0; i < lines.length; i++) { const y = startY + (i * lineHeight);

// Black outline ctx.strokeStyle = '#000000'; ctx.lineWidth = outlineWidth; ctx.lineJoin = 'round'; ctx.miterLimit = 2; ctx.strokeText(lines[i], x, y);

// White fill ctx.fillStyle = '#FFFFFF'; ctx.fillText(lines[i], x, y); }

fs.writeFileSync(outputPath, canvas.toBuffer('image/png')); } ```

**让 Larry 的幻灯片看起来专业的关键细节:**

- **动态字体大小** —— 短文字变大(75px),长文字变小(51px)。每张幻灯片都经过优化。 - **自动换行** —— 尊重手动的 `\n` 换行符,但也会自动换行超过 75% 宽度的行。不会挤压文字。 - **从顶部开始垂直居中于 28% 处** —— 文字块以此点为中心垂直居中,而不是钉在它上面。无论行数多少,都保持在安全区域内。 - **粗轮廓** —— 字体大小的 15%。使文字在任何背景下都清晰可读。 - **首选手动换行** —— 在文字中使用 `\n` 进行控制。每行保持 4-6 个单词。

**文字内容规则:** - **反应而非标签** —— "Wait... this is actually nice??" 而不是 "Modern minimalist" - **每行 4-6 个单词** —— 短行一目了然 - **每张幻灯片 3-4 行是理想的** - **不要 emoji** —— canvas 无法可靠地渲染它们 - **安全区域:** 底部 20%(TikTok 控件)或顶部 10%(状态栏)不要有文字

**普通幻灯片和爆款幻灯片的区别就在于这些细节。** Larry 的幻灯片持续达到 50K-150K+ 的观看量,是因为文字大小合适、位置正确,并且在滑动浏览时易于阅读。

**⚠️ 换行符至关重要 —— 请阅读:**

`texts.json` 文件必须包含带有 `\n` 换行符的文字,以控制行在哪里换行。如果你传递一个没有换行符的长字符串,脚本会自动换行,但**手动换行看起来要好得多**,因为你可以控制节奏。

**好(手动换行,每行 4-6 个单词):** ```json [ "I showed my landlord\nwhat AI thinks our\nkitchen should look like", "She said you can't\nchange anything\nchallenge accepted", "So I downloaded\nthis app and\ntook one photo", "Wait... is this\nactually the same\nkitchen??", "Okay I'm literally\nobsessed with\nthis one", "Snugly showed me\nwhat's possible\nlink in bio" ] ```

**坏(无换行 —— 会自动换行但看起来更差):** ```json [ "I showed my landlord what AI thinks our kitchen should look like", ... ] ```

**编写叠加文字的规则:** 1. **每行最多 4-6 个单词** —— 短行一目了然 2. **使用 `\n` 换行** —— 让你控制节奏 3. **每张幻灯片 3-4 行是理想的** —— 更多行也可以,它们不会溢出 4. **大声读出来** —— 每一行都应该感觉像自然的停顿 5. **不要 emoji** —— canvas 无法渲染它们,它们会显示为空白 6. **反应而非标签** —— "Wait... this is nice??" 而不是 "Modern minimalist"

该脚本会自动换行任何超过 75% 宽度的行作为安全网,但为了最佳视觉效果,始终首选手动 `\n` 换行。

### 3. 发布到 TikTok

使用 `scripts/post-to-tiktok.js`:

```bash node scripts/post-to-tiktok.js --config tiktok-marketing/config.json --dir tiktok-marketing/posts/YYYY-MM-DD-HHmm/ --caption "caption" --title "title" ```

### 为什么我们要以草稿形式发布 (SELF_ONLY) —— 最佳实践

帖子会作为草稿进入你的 TikTok 收件箱,而不是直接发布。这是有意为之且至关重要的一步:

1. **音乐在 TikTok 上就是一切。** 热门声音能大幅提升触达。算法偏爱使用流行音频的帖子。API 无法选择正确的热门声音 —— 你需要浏览 TikTok 的声音库,并选择你细分领域**当下**最热门的声音。 2. **你手动添加音乐**,然后从 TikTok 收件箱发布。每篇帖子大约需要 30 秒。 3. **没有音乐的帖子会被埋没。** 静音幻灯片看起来像广告,会被跳过。热门声音让你的内容感觉原生。 4. **创意控制。** 你可以在内容上线前预览带有音乐的最终幻灯片。如果看起来不对,可以在发布前修复。

这就是帮助我们获得 100 万+ TikTok 观看量和 670 美元/月 MRR 的工作流。不要跳过添加音乐的步骤。

**在用户引导过程中告知用户:** “帖子将以草稿形式进入您的 TikTok 收件箱。在发布每个帖子之前,请从 TikTok 库中添加热门声音——这是影响触达范围的最重要因素。这只需 30 秒,但能带来巨大的差异。”

通过 Postiz 自动跨平台发布(Instagram、YouTube 等)。

**标题规则:** 长篇叙事型标题(浏览量提升 3 倍)。结构:钩子 → 问题 → 发现 → 功能 → 结果 → 最多 5 个话题标签。对话式语调。

### 4. 连接帖子分析(用户发布后)

当用户从 TikTok 收件箱发布后,帖子需要先连接到其 TikTok 视频 ID,针对单篇帖子的分析功能才能生效。

**⚠️ 关键:发布后请至少等待 1-2 小时再进行连接。** TikTok API 存在索引延迟——如果您尝试立即连接,新视频还不会出现在列表中,您可能会连接到错误的视频。此错误很难撤销(Postiz 一旦设置发布 ID,便不允许轻松覆盖)。

使用 `scripts/check-analytics.js` 自动执行连接:

```bash node scripts/check-analytics.js --config tiktok-marketing/config.json --days 3 --connect ```

该脚本: 1. 获取过去 N 天的所有 Postiz 帖子 2. 跳过少于 2 小时前发布的帖子(索引延迟) 3. 对于未连接的帖子,调用 `GET /posts/{id}/missing` 以获取账号上的所有 TikTok 视频 4. 按时间顺序将帖子与视频匹配(TikTok ID 是连续的:数字越大 = 视频越新) 5. 排除已连接的视频 ID 以避免重复 6. 通过 `PUT /posts/{id}/release-id` 连接每个帖子 7. 拉取单篇帖子分析数据(浏览量、点赞、评论、分享)

**匹配机制的工作原理:** - TikTok 视频 ID 是连续整数(例如 `7605531854921354518`、`7605630185727118614`) - 数字越大 = 发布时间越近 - 将 Postiz 帖子(按发布日期)和 TikTok ID(按数值)按相同顺序排序 - 进行匹配:最旧的帖子 → 最低的未连接 ID,最新的帖子 → 最高的未连接 ID - 这是可靠的,因为 Postiz 和 TikTok 都保持时间顺序

**手动连接(如需要):** 1. `GET /posts/{id}/missing` — 返回所有带有缩略图 URL 的 TikTok 视频 2. 通过缩略图或时间确定正确的视频 3. `PUT /posts/{id}/release-id` 并附带 `{"releaseId": "tiktok-video-id"}` 4. 现在 `GET /analytics/post/{id}` 会返回浏览量/点赞/评论/分享数据

**每日定时任务(cron)会自动处理所有这些。** 它在早上运行,检查过去 3 天的帖子(均已远超 2 小时的索引窗口期),连接任何未连接的帖子,并生成报告。

### ⚠️ 已知问题:发布 ID 无法覆盖

一旦 Postiz 帖子通过 `PUT /posts/{id}/release-id` 连接到 TikTok 视频 ID,**它就无法被更改**。如果您连接了错误的视频,该帖子的分析数据将永久显示错误视频的统计数据。PUT 端点看似接受更新,但实际上会静默保留原始 ID。

**这就是为什么必须等待 2 小时的原因。** 如果您连接得太早(在 TikTok 索引新视频之前),`missing` 端点将显示较旧的视频,导致您连接到错误的视频。此操作无法撤销。

**最佳实践:** 1. 发布为草稿 → 用户添加音乐并发布 2. 等待至少 2 小时(每日早间定时任务会自然处理) 3. 最新的未连接 TikTok 视频 ID(最大的数字)对应于最近发布的视频 4. 始终进行验证:未连接的 Postiz 帖子数量应与自上次连接运行以来新增的 TikTok 视频 ID 数量相匹配 5. 如果发现异常,请要求用户通过检查视频缩略图进行确认

完整的 Postiz 分析 API 文档请参阅 [references/analytics-loop.md](references/analytics-loop.md)。

---

## 反馈循环(关键 —— 这是其运作的核心)

这就是区分“发布 TikTok 视频”与“运营营销机器”的关键所在。每日定时任务从两个来源拉取数据:

1. **Postiz** → 每篇帖子的 TikTok 分析数据(浏览量、点赞、评论、分享) 2. **RevenueCat**(如已连接) → 转化数据(试用开始、付费订阅、收入)

结合起来,代理可以就下一步做什么做出明智决策——不是靠猜测,不是凭感觉,而是基于实际数据驱动的优化。

### 每日定时任务(在用户引导期间设置)

每天早上在发布第一条帖子之前,定时任务运行 `scripts/daily-report.js`:

1. 从 Postiz 拉取过去 3 天的帖子(帖子在 24-48 小时达到流量高峰) 2. 获取每篇帖子的分析数据(浏览量、点赞、评论、分享) 3. 如果连接了 RevenueCat,则在同一窗口期拉取转化事件(24-72 小时归因) 4. 交叉引用:哪些帖子带来了浏览量,以及哪些带来了付费用户 5. 应用诊断框架(如下)以确定哪些内容有效 6. 生成包含发现的 `tiktok-marketing/reports/YYYY-MM-DD.md` 报告 7. 向用户发送摘要消息 + 今日建议的钩子

### 诊断框架

这是核心智能逻辑。两个维度:**浏览量**(人们是否在看?)和**转化**(人们是否在付费?)。

**高浏览量 + 高转化** → 🟢 放大规模 - 此内容有效。立即制作 3 个该获胜钩子的变体。 - 测试不同的发布时间以找到最佳时机。 - 跨发布到更多平台以增加触达。 - 不要更改关于 CTA 的任何内容——它能转化。

**高浏览量 + 低转化** → 🟡 修复 CTA - 钩子完成了它的任务——人们在观看。但他们没有下载/订阅。 - 在第 6 页尝试不同的 CTA(直接 vs 含蓄,“下载” vs “在 App Store 搜索”)。 - 检查应用落地页是否与幻灯片中的承诺相符。 - 测试不同的标题结构——也许 CTA 被埋没了。 - 钩子是黄金——不要动它。修复下游的所有内容。

**低浏览量 + 高转化** → 🟡 修复钩子 - 看到的人都在转化——内容和 CTA 很棒。 - 但看到的人不够多,所以钩子/缩略图没能让人停下划动的手指。 - 测试完全不同的钩子(人物+冲突、POV、清单体、错误格式)。 - 尝试不同的发布时间和不同的第 1 页图片。 - 保持 CTA 和内容结构不变——只更改钩子。

**低浏览量 + 低转化** → 🔴 完全重置 - 钩子和转化路径都不起作用。 - 尝试完全不同的格式或方法。 - 研究该垂直领域当前**正在流行**什么(使用浏览器)。 - 考虑不同的目标受众角度。 - 从头开始测试新的钩子类别。 - 参考竞争对手研究,看看什么对别人有效。

**高浏览量 + 高下载量 + 低付费订阅** → 🔴 应用问题 - 营销有效。人们在观看并下载。但他们没有付费。 - 这**不是**内容问题——应用引导流程、付费墙或定价需要修复。 - 检查:付费墙是否在正确的时间显示?免费体验是否过于慷慨? - 检查:引导流程是否在付费墙之前引导用户找到“顿悟时刻”? - 检查:定价是否正确?对于感知价值来说是否太贵? - **这是暂停发布并先修复应用体验的信号**

**高浏览量 + 低下载量** → 🟡 CTA 问题 - 人们在观看但没有下载。钩子有效,CTA 无效。 - 轮换不同的 CTA:“主页链接”、“在 App Store 搜索”、仅应用名称、“免费试用”。 - 检查 App Store 页面——是否与 TikTok 展示的内容相符? - 检查“主页链接”是否确实有效并跳转到正确位置

**每日报告会自动处理所有这些。** 它交叉引用 TikTok 浏览量与下载和收入,准确告诉您漏斗的哪个部分出了问题——精确到每篇帖子。它还会根据您的获胜模式自动生成新的钩子建议,并在需要轮换 CTA 时发出标记。

### 钩子演进

在 `tiktok-marketing/hook-performance.json` 中跟踪:

```json { "hooks": [ { "postId": "postiz-id", "text": "My boyfriend said our flat looks like a catalogue", "app": "snugly", "date": "2026-02-15", "views": 45000, "likes": 1200, "comments": 45, "shares": 89, "conversions": 4, "cta": "Download Snugly — link in bio", "lastChecked": "2026-02-16" } ], "ctas": [ { "text": "Download [App] — link in bio", "timesUsed": 5, "totalViews": 120000, "totalConversions": 8, "conversionRate": 0.067 }, { "text": "Search [App] on the App Store", "timesUsed": 3, "totalViews": 85000, "totalConversions": 12, "conversionRate": 0.141 } ], "rules": { "doubleDown": ["person-conflict-ai"], "testing": ["listicle", "pov-format"], "dropped": ["self-complaint", "price-comparison"] } } ```

**每日报告会自动更新此文件。** 每篇帖子都会被标记其钩子文本、CTA、浏览量和归因转化。随着时间的推移,这将清晰展示哪些钩子 + CTA 组合真正带来了收入——而不仅仅是浏览量。

**CTA 轮换:** 当报告检测到高浏览量但低转化时,它会自动推荐轮换到不同的 CTA,并分别跟踪每个 CTA 的表现。代理应标记每个帖子所使用的 CTA,以便数据积累。 ```

**决策规则:** - 5万+ 浏览量 → 加倍投入——立即制作 3 个变体 - 1万-5万 → 良好——保持轮换 - 1千-1万 → 再尝试 1 个变体 - 连续两次 <1千 → 放弃——尝试完全不同的东西

### CTA 测试

当浏览量良好但转化率低时,轮换以下 CTA: - “下载 [应用] — 链接在主页” - “[应用] 免费试用 — 链接在主页” - “我用 [应用] 做到了这一点 — 链接在主页” - “在 App Store 搜索 [应用]” - 无明确 CTA(仅显示应用名称)

跟踪每个钩子类别下哪些 CTA 转化效果最好。

---

## 发布计划

最佳时间(根据受众时区调整): - **上午 7:30** —— 抓住早起刷手机的人 - **下午 4:30** —— 下午休息时间 - **晚上 9:00** —— 晚间放松时间

每天至少 3 次。持续性胜过零星的病毒式爆火。100 篇帖子胜过 1 次爆火。

## 跨平台发布

Postiz 支持同时将相同内容跨平台发布到多个平台。建议: - **Instagram Reels** —— 特别适合美妆/生活方式/家居类 - **YouTube Shorts** —— 长尾发现 - **Threads** —— 轻量级互动驱动

相同的幻灯片,不同的算法,更大的覆盖面。每个平台的算法会独立评估内容。

## 应用类别模板

特定类别的幻灯片提示和钩子公式,请参阅 [references/app-categories.md](references/app-categories.md)。

## 常见错误

| 错误 | 修正 | |---------|-----| | 1536x1024 (横屏) | 使用 1024x1536 (竖屏) | | 字体大小为 5% | 使用 6.5% 的宽度 | | 文字位于底部 | 距离顶部 30% 处定位 | | 每张幻灯片使用不同的房间 | 在每个提示词中锁定架构 | | 描述性标签而非反应 | 使用“Wait this is nice??”而不是“Modern style” | | 仅追踪浏览量 | 追踪转化率 —— 有浏览量无收入 = 虚荣指标 | | 钩子一成不变 | 基于数据迭代,每周测试新格式 | | 不跨平台发布 | 使用 Postiz 同时发布到各处 | | 过早关联 Release ID | 等待 2 小时以上 —— TikTok API 索引延迟 | | 关联了错误的视频 | 无法覆盖 —— 关联前务必验证 | | `spawnSync ETIMEDOUT` | 执行超时过短 —— 生成 6 张幻灯片的图片需要 3-9 分钟。请使用 10 分钟超时或逐张生成幻灯片 |

更多产品