Communitygithub.com

素材からショートへ:Shorts・Reels・TikTok に公開

完成した短尺 MP4 を、依存ゼロのポータブルな Python CLI で Buffer 経由で YouTube Shorts、TikTok、Instagram Reels、Facebook、LinkedIn に公開します。1 つ以上の Buffer アカウントを接続し、アカウントをまたいでチャンネルをグループ化、ネットワークごとのタイトルとキャプションを下書きし、確認できる投稿プランを保存して、実際の投稿ステータスとリンクを報告します。

素材からショートへ:Shorts・Reels・TikTok に公開 とは?

「素材からショートへ」レシピのステップ 3(公開)。出典は BRPLia/publish-shorts-skill(スキル名 buffer-shorts、ドキュメントはスペイン語)。SKILL.md を読める任意のエージェントで動作し、npx skills add BRPLia/publish-shorts-skill で導入できます。scripts/buffer_shorts.py を操作します。Python 3.9 以上の標準ライブラリだけで動き、JSON を返し、サーバー・ブラウザ・追加パッケージは不要。初回設定ではアカウント名と Buffer API キーの渡し方だけを尋ね、実際に接続済みのチャンネルを検出し、複数アカウントにまたがるグループとして保存できます。動画ごとに MP4 のパスと投稿先グループを受け取り、ネットワーク別に忠実な文面(YouTube はタイトルと説明、TikTok はキャプションのみ)を作成、アカウント・文面・ファイル指紋を含むプランを保存してから公開し、チャンネルごとにアカウント、ネットワーク、ステータス(sending・scheduled・accepted)、post_id、リンク、エラーを報告します。動画の生成や編集は行いません。

対応✓Claude Code~Codex CLI~Cursor
npx skills add BRPLia/publish-shorts-skill

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Buffer Shorts

「この動画を私のSNSに公開して」といった依頼を、具体的な計画と検証可能な公開作業に変換します。このフォルダから scripts/buffer_shorts.py を実行します。CLIは標準のPython 3.9+を使用し、JSONを返します。Content Publisher、サーバー、ブラウザ、外部Python依存関係は必要ありません。

最初の連絡

  1. 絶対パスやユーザー名を仮定せずに、このフォルダを特定します。
  2. 必要な場合にのみ、README.mdを読んでインストール方法と制限事項を確認します。
  3. channels を実行して、すでに設定されているアカウントを確認します。ワークスペースの権限とターミナルのルールに従ってください。ヘルプを表示しても何も公開されません。
  4. アカウントがない場合は、以下のオンボーディングに従ってガイドします。すでに存在する場合は、それらを再利用します。

会話形式のオンボーディング

不足している情報のみを質問します:アカウント名と、keyの受け渡し方法。次のように説明します:「Bufferでソーシャルネットワークを接続し、設定→APIでAPIキーを作成してください。チャンネルを自動検出して設定を保存します。IDを調べる必要はありません。」URL: https://publish.buffer.com/settings/api パスが変更された場合は、Buffer → Settings → APIにアクセスしてください。

会話例:

  • ユーザー:「Bufferを設定して。このアカウントはマイブランドです。」
  • エージェント:「Bufferでネットワークを接続してください。キーは、非表示のローカルプロンプトに入力するか、ローカルファイルに保存するか、チャット履歴に残ってもよければここで共有してください。」
  • ユーザーが選択した方法でキーを渡します。
  • エージェントが設定し、チャンネルを検出して、その名前を応答します。キーは繰り返しません。
  • エージェント:「YouTube マイチャンネル、TikTok マイチャンネル、Instagram マイチャンネルが見つかりました。これらをグループ「マイブランド」に保存しますか?」ユーザーがすでにグループ/宛先を指定している場合は、直接作成します。

非表示のローカル入力の場合:

python scripts/buffer_shorts.py accounts add --label "マイブランド"

これには、ユーザーが getpass で入力できる対話型ターミナルが必要です。ユーザーがそこで入力できることを期待して、インタラクティブな入力がないツールで実行しないでください。

ユーザーが用意したローカルファイルの場合:

python scripts/buffer_shorts.py accounts add --label "マイブランド" --key-file ".local/key-input.txt"

キーがチャットで渡された場合は、最初に .local/ を作成し、エージェントのファイルツールを使用して .local/key-input.txt にキーのみを書き込みます。上記のコマンドを実行し、成功を確認してから、ファイルツールを使用してその一時ファイルを削除します。キーは .local/config.json に残ります。キーをシェルコマンド、引数、ドキュメント、例、メッセージに展開しないでください。

--key-env NOMBRE_VARIABLE または --key-stdin も使用できます。キーを偽造したり、他のプロジェクトのキーをコピーしたりしないでください。config.json を表示しないでください。accounts list と channels は、秘密を表示せずに結果を表示するように設計されています。

複数のアカウント

「別のアカウントを追加」と要求された場合は、別の名前とそのキーを使用して accounts add を繰り返します。以前のアカウントを置き換えずに、チャンネルが追加されます。Bufferで接続を追加した場合は、accounts refresh を実行し、必要に応じて --account ID を指定します。

各アカウントのFreeプランでは、現在のBufferの制限に従って最大3つのチャンネルが提供されます。同じアカウントの複数のキーでこの制限を増やすことはできません。このスキルは独立したアカウントを管理し、実際の接続を検出し、最大3つを強制しません。より多くのチャンネルがあるプランにも役立ちます。無制限の接続や、Bufferが複数アカウント戦略を許可することを約束しないでください。プロバイダーのものと同様に、現在の条件を文書化してください。

各チャンネルには、ID_CUENTA:ID_CANAL という形式の参照(ref)があります。2つのネットワークが同じ名前であっても、これらのIDを保持します。「youtube」が2つのチャンネルと一致する場合は、どちらかを尋ね、そのrefを使用します。すべてに公開したり、最初のものを選択したりしないでください。グループは、複数のアカウントの宛先を組み合わせることができます。

python scripts/buffer_shorts.py group "マイブランド" --targets "REF_1,REF_2,REF_3"

動画の準備

  1. MP4のパスと宛先(グループまたはref)を取得します。channels を使用します。捏造しないでください。

  2. ユーザーからの文字起こし/コンテキスト、または動画の検査を使用して、その内容を理解します。検査できない場合は、簡単な説明を求めます。ファイル名から事実、結果、何百万回もの再生、ブランド名を推測しないでください。

  3. 文章を作成する前に、選択したソーシャルネットワークのタイトル/キャプションについて、簡単なウェブ検索を実行します:最大3回のグループ化された検索と3ページ、目安として約60秒の予算。公式ソースを優先し、最大3つの有用な改善を適用します。手順については references/copy-refresh.md を参照してください。同じ日に同じバッチの投稿に対しては、確認済みの情報を再利用します。日付、ソース、ルールを .local/copy-research.json に保存します。公開ファイルには決して保存しないでください。キー、アカウントID、ユーザーのプライベートテキストを検索しないでください。ブラウジングできない場合は、基本原則を使用し、現在のクエリがなかったことを報告します。アルゴリズムの新しい情報や公開の妨げになる情報を捏造しないでください。

  4. 各ソーシャルネットワークに適した、簡潔で正確なテキストを作成します。YouTubeはタイトルと説明を分けます。TikTokは独立した動画タイトルではなくキャプションを使用します。

  5. 必要に応じて、サービスまたはrefごとにローカルJSON設定ファイルを準備します。

    { "youtube": {"title": "具体的なタイトル", "description": "役立つ説明", "category_id": "27"}, "tiktok": {"caption": "フックとコンテキスト #テーマ"}, "instagram": {"caption": "コンテキストと行動喚起"}, "facebook": {"caption": "リール用テキスト"}, "linkedin": {"title": "学び", "caption": "プロフェッショナルなコンテキスト"} }

refごとのエントリは、serviceごとのエントリよりも優先されます。ベースタイトルとベース説明は必須です。絵文字や #youtube/#tiktok を自動的に追加しないでください。ai_generated は、その情報がある場合のみマークします。省略しても、動画がAIを使用していないことを意味するわけではありません。ユーザーがプライバシーや子ども向けコンテンツを調整したい場合、このバージョンでは送信前にBufferでこれらのオプションを確認する必要があります。CLIがそれらを設定できると約束しないでください。

python scripts/buffer_shorts.py prepare "video.mp4" --group "マイブランド" --title "タイトル" --description "説明" --copy-file ".local/copy.json"

--group の代わりに --targets "REF_1,REF_2" も使用できます。prepare はローカルで実行されます。動画をアップロードしたり公開したりしません。アカウント、テキスト、動画のフィンガープリントを含む計画のパスを返します。ユーザーに宛先と最終テキストをわかりやすい言葉で表示します。

公開と確認

ユーザーがすでにその動画をそれらの宛先に公開するよう依頼している場合、この指示は公開を許可します。準備、テキスト提案、設定のみを依頼した場合は、公開の許可を待ちます。追加のローカル権限を尊重します。すでに明確に許可されているアクションについて、再度確認を求めないでください。

python scripts/buffer_shorts.py publish "RUTA_PLAN" --yes
python scripts/buffer_shorts.py status "RUTA_PLAN"

最初の送信前に、Bufferが動画をダウンロードできるように、動画が一時的なパブリックホストにアップロードされることを説明します。即時公開にはそのオプションを使用します。スケジュール設定には使用しないでください。--media-url URL を使用すると、独自の公開MP4を指定できます。「アンチ禁止」、リーチ、バイラル性のメリットを宣伝しないでください。

CLIは、Bufferにリクエストを送信する前に各送信を記録します。盲目的な再試行は実行しません。リクエストが中断された場合、unknown/submitting ステータスは再送信をブロックします。Bufferと履歴を確認してから決定します。--republish は、明示的な再公開リクエストがある場合にのみ使用します。エラー解決には使用しないでください。

確認後に不確かな送信を回復するには、Bufferで投稿を見つけた場合、recover PLAN --target REF --post-id ID --yes を使用します。コンテンツが一致することを確認します。CLIは、IDが選択されたチャンネルに属していることを確認します。ユーザーが投稿が作成されていないことを確認した場合、recover PLAN --target REF --not-sent --yes で新しい試行が可能です。タイムアウトによって投稿の不在を主張しないでください。中断後のロックは、プロセスが終了したことを確認し、.local/publish.lock のみを削除する前に history を確認する必要があります。

  • sent:公開済み。利用可能な場合は external_link を返します。
  • sending/scheduled/accepted:Bufferが受信しましたが、まだ公開が確認されていません。
  • error:失敗を報告します。修正後に再試行できます。
  • needs_approval/draft:Bufferで保留中の手順を完了する必要があります。
  • skipped:すでに送信済み。結果に示されている元の計画を確認します。
  • unknown/blocked:確認が必要です。自動的に再送信しないでください。
  • not_submitted:その宛先はまだ送信されていません。

保留中の場合は、間隔をあけて status を再度確認します。PostActionSuccess またはIDは公開を証明しません。宛先ごとに報告します:アカウント名/ネットワーク、ステータス、post_id、リンク、エラー(存在する場合)。

対応範囲

主なアダプター:YouTube、TikTok、Instagram、Facebook、LinkedIn。X(service=twitter)、Threads、Bluesky、Mastodon向けの基本的な動画アダプターもあります。それぞれの制限に従います。channels は、アダプターがない検出されたサービスに対して supported=false とマークします。「すべてのソーシャルネットワーク」と主張しないでください。

縦または正方形のMP4を使用します。最大180秒、最大150MB。オプションの ffprobe で寸法/長さを確認します。ffprobe がない場合、CLIは未確認としてマークし、公開前に確認する必要があります。各ソーシャルネットワークの固有の制限はさらに厳しい場合があります。動画を変換したり、自動的にffmpegをインストールしたりしないでください。

ユーザーが要求しない限り、このスキルをグローバルにインストールしないでください。任意のエージェントで使用するには、このSKILL.mdを読み、Python実行環境があれば十分です。

関連スキル