publish について
Publishは、完成した動画を自身のアカウントで公開するクリエイター向けスキルです。各プラットフォーム用のファイルと投稿文を準備し、確認を得てからTregまたは手動で投稿します。
主な機能
- 01完成動画を選択
- 02SNS用ファイルとカバー画像を準備
- 03プラットフォーム別の投稿文を作成
- 04投稿前に承認を取得
- 05Tregまたは手動投稿に対応
活用シーン
- 01完成したショート動画をSNSに投稿
- 02YouTube動画とサムネイルを準備
- 03Treg未設定時に手動で投稿
MCP 対応
PublishはMCPベースの投稿経路であるTregを使い、接続済みのInstagram、TikTok、YouTubeアカウントに投稿できます。Tregを使わない手動投稿にも対応します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ melvynx/ video-agent-skills --skill publishインストール後、Claude Code で/publishを入力して読み込まれたか確認します。
詳細
公開
完成した動画を1本、クリエイター自身のアカウントで公開します。動画の制作については /short-editing を参照してください。
ステップ5の計画について、クリエイターから明確な承認を得るまで、何も公開しません。 この承認は、その動画だけを対象とします。
クリエイターの言語で話しかけます。<edit> = video-agent/edits/<slug>/。
1. 動画を選ぶ
次のうち、最初に該当したものを使います。
- 指定されたパス、スラッグ、またはタイトル:
<edit>/output/<name>.mp4(<edit>=video-agent/edits/<name>/。-roughのカットは使いません)。 - この会話で完成した動画。
- 該当するものがない場合:最新の
video-agent/edits/*/output/*.mp4(-roughではないもの)。計画の中でファイル名を伝えます。
以下の <video> はそのファイルを指します。post.md は output/ 内でそのファイルと同じ場所にあります。
次に <edit>/published.md を確認します。対象プラットフォームへの公開記録がすでにある場合は、その旨を伝えて終了します(再投稿を希望している場合を除く)。
ffprobe で形式を確認します。縦型(ショート動画。YouTube Shorts、Reels、TikTok 向け)か、横型(長尺動画。デフォルトでは YouTube のみ)です。
2. Treg のセットアップ(初回のみ)
Treg は、クリエイターに代わって自身のアカウントから無料で投稿します。次を確認します。
treg --version
treg connections ls
投稿先の各プラットフォームが、投稿権限付きで一覧に表示されている必要があります(Instagram は scopes に content_publish、TikTok は video.publish、YouTube は youtube.upload または youtube が必要です)。
不足している場合:1行で説明して確認を求め、その後に次を実行します。
- インストール(macOS と Linux。Windows では MCP を使用:
claude mcp add --transport http treg https://treg.to/mcp/を実行し、その後/mcpでサインインします):curl -fsSL https://treg.to/install.sh | sh treg login - 接続:投稿先のプラットフォームだけを接続します。それぞれのプラットフォーム独自のログイン画面が開きます。
Instagram にはプロアカウントが必要です(Creator または Business。アプリの設定から無料で切り替えられます)。treg connections connect --provider instagram --capability post treg connections connect --provider tiktok --capability post treg connections connect --provider youtube --capability post
Treg を使いたくない場合は、セットアップ不要の手動手順(6a)を利用できます。
3. ファイル
- マスター:
<video>。YouTube 用のフル画質です。 - ソーシャル用書き出し(ショート動画のみ):
<edit>/social.mp4。H.264 + AAC で、Treg が Instagram にアップロードできるよう 30 MB 未満にします(TikTok は最大 64 MB まで対応します)。ファイルがない場合、またはマスターより古い場合は、収まるビットレートで再エンコードします(目安は、28 MB × 8000 ÷ 動画の長さ[秒]から音声の 160 kb/s を引いた値、単位は kb/s):
ファイルサイズを確認し、デコードできることも確認します:ffmpeg -y -i <video> -c:v libx264 -preset slow -b:v <rate>k -maxrate <rate>k -bufsize <2x rate>k -pix_fmt yuv420p -c:a aac -b:a 160k -movflags +faststart <edit>/social.mp4ffmpeg -v error -i <edit>/social.mp4 -f null -。 - カバー画像:常に
<edit>/cover.jpgを用意します。カバー画像がないと、Instagram はフレーム0を使うため、まばたきの瞬間や空白のフレームになることがよくあります。<edit>/images/に/codex-imagesで作成済みの画像があれば、見せて選んでもらい、選ばれた画像を<edit>/cover.jpgにコピーします。ない場合は、動画のフックに合うものを選びます。目を開けた顔が映っていて、フックカード全体が収まっているフレームが最適です。最初の3秒のコンタクトシートを作成して内容を確認し、選んだ時刻<t>のフレームを切り出します。
縦型動画では、主要なビジュアルを中央の3:4の範囲(y 240〜1680)に収めます。プロフィールのグリッドではこの範囲にトリミングされます。長尺動画では、1280x720 のサムネイルが適しています。作成にはffmpeg -v error -y -ss 0.1 -t 3 -i <video> -vf "fps=10,scale=270:-1,tile=6x5" -frames:v 1 video-agent/.tmp/hook-sheet.jpg ffmpeg -v error -y -ss <t> -i <video> -frames:v 1 -q:v 2 <edit>/cover.jpg/codex-imagesを提案するか、動画のフレームを使います。
4. テキスト
<edit>/output/post.md がある場合はそこから取得します(short-editing による作成)。ない場合は、動画のスクリプトまたは文字起こしと video-agent/voice.md を使い、動画と同じ言語で作成します。
- キャプション(Instagram と TikTok):最初の1行は、話し言葉のフックをそのまま繰り返さずに視聴者の興味を引くものにします(「続きを読む」の前に最初の125文字が表示されます)。視聴者が得られることを短い2〜4行で説明し、voice.md にある呼びかけを続け、その後にトピックに関するハッシュタグを3〜5個付けます。#fyp は使わず、絵文字を大量に並べないでください。
- TikTok のキャプション:変更する必要がある場合のみ作成します(短めにする、別のハッシュタグを使うなど)。
- YouTube のタイトル:ショート動画は60文字未満、長尺動画は70文字未満にします。動画の内容に忠実で、その価値が伝わるものにします。
- YouTube の説明:キャプション、長尺動画の場合はチャプター(post.md から取得)、続けてクリエイターのリンクを記載します。リンクは一度だけ尋ね、voice.md に追加します。
studio-script スキルがインストールされている場合は、これらすべてに対して、そのスキルの references/humanize.md にある自然な文章にするための処理を実行します。名前、数字、主張はすべて動画に基づくものとし、新たに追加しません。各テキストを見出しごとに <edit>/output/post.md に保存します。
5. 計画(必須)
- プラットフォーム:指定がない限り、ショート動画は YouTube + Instagram + TikTok に、長尺動画は YouTube に投稿します。
- 時刻:指定された時刻(相手の現地時間と UTC で記載)、指定がなければ 現在。
- プラットフォームごとの方法:Treg(接続済み)または手動。Instagram と TikTok は Treg で予約投稿できないため、今すぐ投稿します。YouTube は日付を指定して予約できます(非公開 +
publishAt)。Instagram または TikTok で後の時刻に投稿する場合は、その時刻に再度/publishを実行するか、手動に切り替えてアプリの予約投稿機能を使います。
計画を提示して、明確な承認を待ちます。
PLAN · budget-margins · 0:47 · social.mp4 18 MB
Cover: cover.jpg (0.8 s) [shown as an image]
YouTube Shorts · Treg · 2026-10-11 18:00 Paris (16:00 UTC) · private until then
Instagram Reel · Treg · now
TikTok · manual (not connected)
Title: Your margin is lying to you
Caption: ...
Reply yes to publish, or tell me what to change.
計画に変更があった場合は、反映して計画を再度提示します。
6a. 手動
フォルダーを開き(macOS open <edit>、Windows explorer <edit>、Linux xdg-open <edit>)、次の手順を案内します。
- YouTube:studio.youtube.com → Create → Upload videos →
<video>→output/post.mdのタイトルと説明 → サムネイルにcover.jpg→ Visibility → Schedule または Public。 - Instagram:アプリ → + → Reel →
social.mp4→ キャプション → Edit cover → Add from camera roll →cover.jpg→ Share(またはプロアカウントの詳細設定で Schedule)。 - TikTok:アプリまたは tiktok.com/upload →
social.mp4→ キャプション → カバーに使う時間を指定 → Post(またはウェブ版で Schedule)。
6b. Treg
呼び出しの前に、正確なパラメーターを確認するため、毎回 treg catalog get <id> を実行します(パラメーターは変更される場合があります)。これらはすべて、各自のアカウントで無料で利用できます。標準出力のみを保持します(2>/dev/null)。いずれかのプラットフォームで失敗しても、ほかのプラットフォームへの投稿は続行します。
Instagram リール
- ファイルをホストします(各ファイル最大 30 MB、7 日間):
treg host <edit>/social.mp4とtreg host <edit>/cover.jpgを実行すると、公開 URL が表示されます。 instagram.instagram.media.container.createを実行し、ig_user_id(treg connections lsに表示される Instagram アカウントのresource_ref)、media_type=REELS、video_url、cover_url、captionを指定します。instagram.instagram.media.container.statusを 10 秒ごとに実行し、FINISHEDになるまで確認します(ERRORの場合は、エラー内容を示して Instagram の処理を停止します)。- コンテナー ID を指定して
instagram.instagram.post.publishを実行します。その後、permalinkを取得します(fields=id,permalinkを指定してinstagram.instagram.user.postsを実行し、最新の投稿を確認します)。
TikTok
tiktok.tiktok.creator.infoを実行し、利用できるプライバシー設定を確認します。- キャプション、一覧から選んだ
privacy_level(選択肢にあれば公開)、カバーに使う時間をミリ秒で指定したvideo_cover_timestamp_ms(TikTok は画像ではなく動画のフレームを使います)、およびファイルサイズ全体を 1 チャンクとして指定したsource_infoFILE_UPLOADを指定して、tiktok.tiktok.video.publish.initを実行します。 - 返された
upload_urlにsocial.mp4を PUT します。Content-Type: video/mp4とContent-Range: bytes 0-<size-1>/<size>を指定します。 - 公開されるまで
tiktok.tiktok.publish.statusを確認します。
応答が unaudited_client_can_only_post_to_private_accounts の場合(または選択肢が SELF_ONLY のみの場合)は、代わりに tiktok.tiktok.video.inbox.init を使って TikTok の受信箱に送信します(同じ方法でアップロードし、キャプションは指定しません)。24 時間以内に TikTok を開き、キャプションを貼り付けて投稿するよう伝えます。
YouTube
uploadType=resumable、タイトルと説明を含むスニペット、およびstatus{"privacyStatus": "private", "selfDeclaredMadeForKids": false}を指定してyoutube.youtube.video.uploadを実行します。日付を指定する場合は"publishAt": "<UTC ISO time>"を追加し、今すぐ公開する場合は"public"を指定します。- 返されたセッション URL に
<video>を PUT します。 cover.jpgを指定してyoutube.youtube.video.thumbnail.setを実行します(確認済みの YouTube アカウントで利用できます。拒否された場合はその旨を伝えます)。
応答にセッション URL が含まれていない場合、YouTube は手動で投稿します。
7. 記録する
<edit>/published.md に、プラットフォームごとに 1 行で、日付、時刻、方法、リンクを記録します。公開後にリンク(https://youtube.com/shorts/<id> または https://youtu.be/<id>、リール、TikTok)を記録します。手動の場合は、投稿したと相手から連絡があった時点で記録します。
公開状況とリンクを伝え、1 週間後に成果を確認するため /insta-audit を提案します。
制限事項
- Instagram と TikTok は Treg 経由で予約投稿できず、すぐに投稿する場合のみ利用できます。各プラットフォームのアプリでは予約投稿できます。
- TikTok では、アプリの監査が完了するまで、新しいサードパーティ製アプリからの投稿は非公開になります。受信トレイルートを使えば、この制限を回避できます。
- プラットフォーム側で動画が拒否されることがあります(長さ、形式、音楽の権利など)。エラーはそのまま表示されます。手動ルートなら常に投稿できます。
- 音楽を含め、クリエイター自身が所有する、または使用権を持つ動画のみを投稿してください。