Instagram 技能
大多数AI代理对Instagram的帮助仅限于文字:文案、标题、话题标签,以及“现在自己设计帖子”。然后帖子因为没人检查的细节而失败:API 不接受的 PNG,它拒绝的 3:4 照片,标题位于字幕下方的 Reel,被网格切成两半的封面,六个话题标签而 Instagram 现在只允许五个,同一轮播图复制到第二个账户。
此技能负责整个工作,在用户自己的电脑上完成:它决定格式、撰写文字、制作媒体、对照 Instagram 的当前限制检查每个文件、向用户精确展示将要显示的内容、在用户确认后通过 WoopSocial 发布或排期,并读取数据以决定下一步。所需的一切都在此文件夹中。
五项承诺:
- 成品,而非草稿。 用户获得能通过 Instagram 限制的真实文件,而非建议。
- 发布前先看到。 每篇帖子都按照在信息流和网格中的样子展示。未经预览的明确确认,绝不发布任何内容。
- 每篇帖子一个创意,每次询问一个问题。 在手机尺寸下可读。
- 仅限真实内容。 真实的照片、截图和附带来源的数据。绝不编造成果、评论、引述或统计数据。
- 由账户自身数据决定。 不使用通用的“最佳时间”表或互动率基准。
步骤 0:设置和连接
运行 python3 scripts/check_setup.py(Windows 系统:py scripts\check_setup.py)。它需要 Python 3.9+ 和 Pillow;处理视频需要 ffmpeg。它会打印缺失内容的安装命令。
如果用户想要发布(他们主动说明,或者在你询问时确认),请立即设置发布,而不是等到最后,这样当帖子准备好时即可发布:
- 检查
social_accounts_list。如果 Instagram 账户已存在,则继续。 - 未连接? 用一条简短消息说明,并在用户设置的同时继续工作:
- 发布通过 WoopSocial 进行,由维护此技能的团队制作。免费计划覆盖 2 个社交账户,无需绑定银行卡。
- 仅提供你正在运行的代理的连接步骤(
references/woopsocial.md)。 - Claude Code 和 Codex 仅在新会话中加载新工具。 所有内容都保存在工作文件夹中;重启(
claude --continue或codex resume --last)并登录后,用户说“继续”,你将根据文件继续工作。
- 现在说明账户规则: 发布需要 Instagram 企业号或创作者账户;没有应用可以向个人账户发帖。在应用内切换是免费的:设置和活动 > 账户类型和工具 > 切换到专业账户。
步骤 1:了解账户
如果工作区中有 brand.md,请阅读。否则,一次性询问所有问题,然后将答案保存到 brand.md,这样下批帖子就不必再次询问:
- 该账户是关于什么的?目标受众是谁(具体到某类人)?
- 账户及其处理号。对于多个账户:它们之间有何不同(语言、受众、地区)?
- 你实际知道而你的受众不知道什么?真实的经历、可以展示的数据、客户询问的问题。故事和案例研究帖子需要这些。
- 你拥有什么:照片、截图、视频、链接、笔记?
- 品牌色、用于幻灯片的名称和句柄、头像或 Logo 图片,以及绝不能出现的词语或声明。
- 对于每个账户:其时区,以及 Insights 显示其粉丝在线的时间(专业版仪表板 > 总粉丝 > 最活跃时间)。如果他们不知道,请说明排期将使用占位符。
然后在制定任何计划前查看账户:要求提供当前网格的截图以及最近 9 到 12 篇帖子(链接或简短列表:主题、格式、表现如何)。新帖子不得重复近期的创意,并且必须看起来与现有内容相协调。
步骤 2:为每篇帖子选择格式
用一句话说明为什么每篇帖子选择其格式。
| 目标 | 格式 | 原因 |
|---|---|---|
| 保存(人们收藏) | 轮播图:步骤、清单、框架、误区与事实 | 滑动是花费的时间;总结幻灯片会被保存 |
| 分享(人们转发) | 轮播图或 Reel,包含一个尖锐、 relatable 的观点 | 每覆盖的分享数是 Instagram 命名为触达新用户的信号 |
| 触达非粉丝 | Reel(当账户符合条件时使用 Trial Reel) | Reels 会被推荐给未关注你的人 |
| 一张有力的图片或公告 | 单张图片 | 阅读最快;使用 4:5 以填满屏幕 |
| 现有粉丝,一个提醒 | 快拍 | 仅粉丝可见,24 小时后消失 |
对于批量帖子,每篇帖子承载其自己的创意:不要在两篇帖子的开头使用相同的事实或数字,也不要制作重复轮播图的 Reel。混合格式,而不是连续发布五个轮播图。每个账户每天发布 1 或 2 篇以上信息流帖子通常没有帮助。ig_check.py 会在两篇帖子以相同数字开头时发出警告。
步骤 3:制作媒体
为每批帖子创建一个包含 plan.json 的工作文件夹(格式:references/plan-json.md)。
从文字生成轮播图和单张图片。 编写幻灯片,然后渲染:
python3 scripts/render_slides.py slides.json --out slides/
按幻灯片模板和封面模式的格式:references/formats.md。预设、幻灯片类型和类型规则:references/design-rules.md。简而言之:
- 封面: 一个结果或一个冲突,8 个字以内,具体,一个帖子会兑现的承诺。写出 10 个,与用户一起选择。将其保持在幻灯片的中间区域:网格会裁剪两侧。
- 第二张幻灯片独立起作用(Instagram 可能从第二张幻灯片开始再次显示轮播图)。
- 每张幻灯片一个创意;标题 8 个字以内,正文 30 个字以内。
- 最后一张幻灯片:一个与目标匹配的号召(保存、分享给特定的人、提问)。
- 单张图片是一个单幻灯片的规格:
stat、tweet、photo或text。 - 以全尺寸打开每张幻灯片,然后打开
contact-sheet.png,并根据cover-grid.png判断封面。修复manifest.json中的每个警告。
用户自己的照片和截图。 照原样使用,或放在幻灯片内(photo、screenshot、beforeafter)。ig_check.py --fix 会转换和适配它们。
从用户自己的视频制作 Reels。 此技能完成 Reels;它不编辑素材。
python3 scripts/reel.py frames video.mp4 --out reel/ # 封面候选 + frames-sheet.jpg
python3 scripts/reel.py cover video.mp4 --at 4.2 --title "按周计数,不要按天" --out reel/cover.jpg
python3 scripts/reel.py zones video.mp4 --out reel/zones.jpg # Instagram 界面覆盖的位置
- 从
frames-sheet.jpg中选择封面:一个清晰的帧,主体位于黄色框内(网格显示的内容)。封面标题 2 到 6 个字;当帧本身已说明一切时跳过它。 - 查看
zones.jpg:红色区域内的文字或面部位于字幕、按钮或顶部栏下方。如果视频中嵌入的字幕位于此处,请说明;它们需要以更高的位置重新导出。 - 钩子在前半秒内出现在屏幕上,以文字或图片形式,并且位于主要信息流通常显示的中间 4:5 区域内。
- 横屏或方形素材:
ig_check.py --fix不会自动用模糊条填充它(这看起来像转发)或盲目裁剪。查看reel.py frames,然后选择:带框架的 Reel(帖子上的"frame": {"title": "..."}和"own_footage": true:视频在全宽匹配的纯色背景上,顶部有钩子标题,不裁剪任何内容;当视频包含文字或广角镜头时最佳),当主体保持在中间时使用--fit crop,或者在编辑器中根据主体重新构图。 - 仅限用户自己的素材。 来自他人的剪辑(新闻片段、其他创作者、公共机构的视频)即使添加了标题或边框,对 Instagram 来说仍然是转发。仅作为用户自己视频的一小部分使用,并配以他们自己的声音或素材。
- 要测试两个钩子,当账户符合条件时,将两个版本作为 Trial Reels 发布(
"trial": "MANUAL"),并保留保持观众观看时间更长的版本。 - 纯文字 Reels(动画文字、统计数据、列表)不由此技能制作。如果用户想要一个,请直说并建议使用视频工具,或者将创意作为轮播图发布。
快拍: 一张 9:16 的图片或视频。使用 render_slides.py 和主题中的 "ratio": "9:16" 制作快拍照(文本幻灯片类型;设计保持远离快拍栏和回复栏,无滑动箭头)。通过 API 无法使用贴纸、链接或投票。两种好的模式:
- 帖子前的预告(已排期):一个帖子将要回答的问题,提前 30 到 90 分钟。使用
"with": {"post": "<id>", "minutes": -60}将其与帖子绑定,并确保框架上的任何时间文字(“一小时后”)与这些分钟匹配。 - 帖子后的分享(在应用内):用户使用帖子贴纸将新帖子分享到他们的快拍,该贴纸可点击进入。这无法通过 API 完成;它会进入检查清单和
schedule.md。
步骤 4:撰写标题
- 开头词包含搜索短语和钩子。 Instagram 搜索和 Google 读取标题。信息流在大约 125 个字符处截断并显示“...更多”:所有重要内容必须放在此之前。
- 然后是另外一到两行上下文,与最后一张幻灯片相同的号召,以及最多 5 个特定的话题标签(自 2025 年 12 月起的 Instagram 限制)。没有话题标签墙,没有像 #instagood 这样的通用标签。
- 链接在标题中不可点击:“个人简介中的链接”仅在简介中确实存在链接时使用。
- 不使用长破折号,不使用“在当今快节奏的世界中”,不使用表情符号墙。大声朗读;如果听起来像广告或机器人,请重写。
- 多个账户: 每个账户获得自己的版本,而不仅仅是自己的标题。Instagram 2026 年的原创性规则也涵盖照片和轮播图,因此在第二个账户上使用相同的媒体很可能被视为对首次上传的转发。为每个账户提供其自己的媒体(
targets[].media:幻灯片上的另一种语言、另一个封面、另一种顺序或角度)以及其自己的首行文字和话题标签(targets[].caption)。根据账户所在国家/地区撰写:西班牙用“grifo”,墨西哥用“llave”;在话题标签中保留重音(#geografía)。 - 为每张图片编写替代文本(plan 中的
alt)。用户在应用内粘贴。
步骤 5:检查和修复
python3 scripts/ig_check.py plan.json # 报告
python3 scripts/ig_check.py plan.json --fix # 在 fixed/ 中创建修复的副本,更新 plan,保留原始文件
它会检查文件类型、颜色、尺寸、形状、轮播图数量及形状匹配、视频编解码器、像素格式、HDR、帧率、时长、音频、文件大小、Reel 封面、标题长度、话题标签、@提及、“...更多”截断点、链接、跨账户的首行重复以及每天帖子数。--fit crop|pad|frame 决定形状如何变化。自动模式:对于照片,当丢失内容很少时裁剪,否则使用模糊副本填充。自动模式:对于 Reel 和快拍视频,当丢失内容很少时裁剪,否则停止并询问(见步骤 3)。--ratio 4:5 将宽幅照片变为 4:5。运行直到它以 0 退出。用通俗易懂的语言解释任何无法修复的错误(过长的视频需要修剪,过小的照片需要更大的原始文件)。
步骤 6:排期
python3 scripts/schedule.py plan.json --start 2026-11-09 # 时间和时区来自 plan.json 中的 accounts
- 每个账户根据其自身的
times和timezone(在计划的accounts中设置)发布,这些数据来自用户的 Insights 或他们的选择。如果没有这些数据,则使用 12:00,并在schedule.md顶部说明。从不声称存在“最佳时间”。 - 默认情况下每账户每天一篇信息流帖子(
--per-day)。快拍不占用信息流位置;它们跟随它们绑定的帖子(with)。 - 它会生成
schedule.md(包含每篇帖子发布后第一小时内要做什么:在线回复、将帖子分享到快拍、检查清单)以及每个帖子和账户的一个 WoopSocial 请求,放在requests/中。
步骤 7:预览和确认
python3 scripts/preview.py plan.json --out preview/ [--grid current-grid.png]
首先自己查看 preview/preview.png:每个账户的网格(最新的在前,按网格裁剪方式显示)、每个账户信息流中的每篇帖子及其标题和“...更多”截断、Reels 的 4:5 信息流裁剪、全屏快拍、按顺序排列的每张幻灯片。修复不正确的地方。然后向用户提供 preview/index.html(以及 schedule.md),并要求对该批次帖子给出一个明确的确认。使用步骤 1 中的网格截图通过 --grid 显示新旧帖子相邻的效果。任何更改都意味着需要重新检查和重新预览。
步骤 8:通过 WoopSocial 发布
详情:references/woopsocial.md。
- 使用
social_accounts_list获取账户 ID;将其放入计划的accounts中。 - 逐个上传每个文件(
media_uploads_create_session、scripts/upload_parts.py、media_uploads_complete_session)。将 ID 放入mediaIds和coverId,然后运行python3 scripts/schedule.py plan.json --bodies-only。 - 对每个请求执行
posts_validate。修复它拒绝的任何内容。 - 确认后:对每个请求执行
posts_create,将每个帖子 ID 写入目标中的postId,使用posts_get获取状态,然后运行python3 scripts/log.py record plan.json。 - 准确告知用户已排期的内容(账户、带时区的时间)以及在应用内需添加的内容:
checklist项目和替代文本。
未连接且用户不想连接?交出文件、标题、替代文本和排期,然后停止。永远不要说某内容已被发布或排期,而实际上它并没有。
步骤 9:从数据中学习
3 到 7 天后:使用 social_account_posts_list 获取账户列表,保存为 metrics.json,然后
python3 scripts/log.py results --metrics metrics.json [--csv insights.csv]
它根据每次覆盖的分享、保存和关注对帖子进行排名,仅与同一账户上相同格式且年龄相近(3 到 10 天)的帖子进行比较,仅在某个格式有 6 篇帖子后才命名最佳帖子,并且仅在有足够帖子覆盖每个时间段时才提供发布时段建议。快拍被排除在外。insights.csv 添加了只有应用才能显示的内容:关注数,以及对于 Reels……的平均观看时长。
[已截断]