スマホ編集風(Estilo Celular)
唯一のルール: 見る人が「これはクリエイター自身がInstagramのエディターで編集したんだ」と感じること。決して代理店やAIがやったように見えてはいけません。迷ったら「少なく、より生で、より小さく」。ここでかわいいモーショングラフィックスは禁止です。
始める前に ../perfil-criadora.md を読み、ルートの perfil.json を読み込む(または作成する)こと。
ビジュアル — 譲れない条件
| 要素 | ルール |
|---|---|
| スクリーンショット | クリエイターのマイプリントフォルダから実際のスクリーンショット(プロフィールヘッダー、インサイト、いいね/コメント/保存、再生数、DM、コメント、投稿)を使用。角は直角、枠なし、影なし、フレームなし、角丸カードなしでそのまま切り抜き。頭上に配置。 |
| 頭上テキスト | タイトルフォント(.tit)、白、小さい — タイトルは48〜70px、ラベルは1080幅で40〜48px。スクリーンショットの左端に左揃え。 アクセントカラー(.y)はたまに1単語のみ。サンセリフ(.sans)は「悪い/良い/バズった」のようなラベルだけ。 |
| 影 | 後ろの壁が明るい場合のみ(.sh)。テキストの後ろにボックス、背景、ガラスは絶対に配置しないこと。 |
| 動き | なし。 要素はカット編集で出入りするのみ(show()/hide())。フェード、スライド、ズーム、バウンド禁止。 |
| 絵文字 | テンプレート上では実際の文字(✅ ❌ 🔥 ❤️ 👇 🚨 …)を使用。montar.mjs がTwemojiのアートに差し替えます。アイコンは絶対に描かないでください。 |
| キャプション | 1単語ずつ、54px、白、ソフトな影付き(輪郭は不可)。胸の中央、あごのすぐ下(reel.json の capTop)に配置。単語ごとにカット編集。 |
| 固定タイトル | 話題のタイトルは、その上でスクリーンショットが切り替わっている間、長時間画面に表示したままにできます。 |
| リスト | 絵文字+単語のチェックリスト(✅ 字幕 / ❌ タイトル)。話されている単語に合わせて1項目ずつ表示。 |
| モックアップ | 避けてください。実際のスクリーンショットを使用してください。スクリーンショットが存在せず、かつクリエイターが依頼した場合のみモックアップを描いてください。 |
カットのルール
- 息継ぎや間を一切残さない:−30dB以下が0.15秒以上続く部分はすべて削除(
cortar.mjsが自動実行)。 - 繰り返し、言い直し、言い直しのやり直しはすべて削除。最後の最もきれいなバージョンを残す。
- 文字起こしツールは繰り返しを隠し、タイミングを誤ることがあります。 カット後は必ず
clean.mp4を再文字起こしし、最初から最後まで読んで、重複したフレーズ、切れた単語、不足した動詞がないか確認。きれいになるまでカットし直す。 - 最大90秒。クリエイターが別の指定をした場合を除く。納品時には何をカットしたか伝える。
- J/Lカット はデフォルトでオン(
--jl 6でよりソフト、--no-jlでオフ)。
速度に関するルール(クリエイターのPCは遅い可能性がある — 以下の手順よりも優先)
novo-projeto.mjsの文字起こしはすでに--rapido(軽量モデル、カット選択のみ)。clean.mp4の再文字起こし(キャプション用)は高精度モデルを使用 — カットのバージョンごとに1回実行し、調整のたびには実行しない。- すべての接合箇所は1回の呼び出し(1回のモデルロード)で確認:
$K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 --janelas t1,t2,…(時間はcleanのタイムライン上)。決して1ウィンドウずつ実行しない。 - ラフ画全体をレンダリングしてフレームを確認しない。代わりに
$K --em video-projects/<slug> hyperframes snapshot --at t1,t2,… -o snapshotsを使用(要素の変更ごとに1回)してPNGを確認。スナップショットが正しくなってから、動画を1回レンダリングする。 変更が要求された場合のみ再レンダリング。 - raw.mp4 / clean.mp4 のエンコーダーは自動選択(NVIDIA / Intel / AMD / Apple、それ以外はCPU)。変更しない。
- 各時間のかかる手順の前に、何を実行中で数分かかる可能性があるかを、短いポルトガル語の行で1つ警告すること(「動画を文字起こし中 — お使いのPCでは数分かかる場合があります」)。待機中にフリーズしているように見えないようにするため。
フロー(すべてのコマンドはランチャー $K 経由)
M=.claude/skills/_motor · K = videos-opusスキルのランチャー: "<VO>\bin\node.exe" "<VO>\scripts\video.mjs" kit (<VO> はvideos-opusスキルのフォルダ(このガイドを読むよう指示した SKILL.md がある場所))。これによりポータブルプログラムがパスに追加され、キットの作業フォルダで実行されます($K pasta で確認可能;プロジェクトは <pasta>\video-projects\<slug> に配置)。$K --em <subpasta> … はそのサブフォルダ内で実行。npx、Python、生の node は使用禁止:すべて $K 経由で実行。
- プロジェクト作成+高速文字起こし:
$K node $M/novo-projeto.mjs "<video>" <slug> .claude/skills/estilo-celular→video-projects/<slug>/内にassets/raw.mp4(1080×1920, 30 fps)、assets/raw.json、assets/palavras.txt、 フォント、src/index.template.htmlが作成。slugは短く、小文字、ハイフン区切り(promo-engrene)。 - フレーミング: rawのコンタクトシートスナップショットを撮る(
$K --em video-projects/<slug> ffmpeg -i assets/raw.mp4 -vf "fps=1/4,scale=180:-1,tile=12x1" -frames:v 1 assets/contato.png) そして確認: 頭のてっぺんとあごの位置はどこか。要素はy≈100から頭のてっぺんの間に配置; キャプションはあごの下 → プロジェクトルートにreel.jsonを書く:{"capTop": <px>}(デフォルト1380)。 - カット選択:
assets/palavras.txtを読み、assets/keeps.jsonを書く ({"fps":30,"keeps":[{"from":0,"to":9.38,"why":"…"}]})。各whyはポルトガル語で何を残したかとその理由を説明。 - カット:
assets/内で:$K --em video-projects/<slug>/assets node ../../../$M/cortar.mjs→clean.mp4+edit-decisions.json。 - 確認: プロジェクトルートで:
$K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 assets/transcript.json --nomes "<プロフィール用語>"。 繰り返しや単語の欠落がある場合は手順3に戻る。聞き間違えられた単語はassets/caption-fixes.json({"cloud":"Claude"})。$K --em video-projects/<slug> ffmpeg -i assets/clean.mp4 -af silencedetect=noise=-30dB:d=0.25 -f null -→ 無音が残っていてはいけない。 - スクリーンショット: プロフィールの
pasta_printsから画像をリスト(新しい順)し、使用前に各候補を実際に確認。ffmpegでassets/prints/に切り抜き(-vf crop=w:h:x:y)、出典をassets/prints/ORIGEM.mdに記録。 適切なスクリーンショットがない場合は、どの画面があればよいかを伝え、スクリーンショットなしで進める(後で調整として依頼可能)。決してスクリーンショットを捏造しない。 - 合成:
src/index.template.htmlを編集 — 要素はELEMENTOSブロックに、タイミングはTEMPOSブロックに。 タイミングは$K --em video-projects/<slug> node ../../$M/ancoras.mjs "frase" "outra frase"(プロジェクトルート)から取得し、話されている単語に合わせる。カット編集のみ。 - 組み立て+チェック:
$K --em video-projects/<slug> node ../../$M/montar.mjs→$K --em video-projects/<slug> hyperframes lint→ 各要素の切り替え時のスナップショット ($K --em video-projects/<slug> hyperframes snapshot --at …)を撮り確認: 顔が隠れていないか、テキストが読めるか、スクリーンショットがタイトルと揃っているか。 その後、レンダリングして納品(ランチャー経由、キットの作業フォルダで):$K node $M/renderizar.mjs <slug>— ロックを確認、バックグラウンドでレンダリング、検証、自動でprontos/にコピー。出力3 = まだレンダリング中:$K node $M/renderizar.mjs <slug> --esperarを実行してPRONTOと出るまで待つ。決して$K --em video-projects/<slug> hyperframes renderを直接実行したり、手動でprontos.mjsを実行しない。 - 納品: ポルトガル語で短く回答: 動画の場所、カットした内容、使用したスクリーンショット、不明点。 決して公開したり送信したりしない。
納品後の調整
「価格の部分を削除」 → keeps.json を編集、手順4〜5を繰り返し、ancoras.mjs で該当部分以降のすべてのタイミングを再計算し、手順8を繰り返す。「キャプションを下げて」 → reel.json を編集し、手順8を繰り返す。
「スクリーンショットを交換」 → 手順6〜8のみ。クリエイターが変更を依頼していない部分をゼロからやり直さない。