RAW KINETIQ は何をしますか?
楽曲を入力として、MP4を出力します。パイプラインは既に構築されています。あなたの仕事はそれを実行し、編集者のようにタイミングを確認し、機械が間違えた部分を修正することです。完成したビデオは、すべての単語が歌われた瞬間に正確に配置され、映像が楽曲のエネルギーに合わせて呼吸するように感じられるべきです。
ビデオは楽曲を中心にデザインされ、楽曲がハウススタイルに押し込められることは決してありません。 楽曲が何についてであり、どのように感じられるか、そのジャンルとテンポがすべてを決定します:色、フォント、画面に表示される単語の数、それらが現れて消える方法、配置される場所、カメラがどれだけ強く動くか、背景に何があるか、そしてユーザー自身の画像がどこに配置されるか。選択するためのプリセットはなく、混ぜ合わせるためのツールキット(references/toolkit.md)があるだけです。そして、楽曲にツールキットにないイメージがある場合は、その楽曲のためにそれを作り上げます。2つの楽曲が同じように見えることは決してあるべきではなく、ビデオはYouTubeの他の誰のものとも異なって見えるべきです。創造的になり、リスクを取り、そしてあなたの作品をチェックしてください(ステップ5)。そうすることでリスクが着地します。
ビデオ内で物事が起こるのは、言葉の内容のためです。 背景とタイポグラフィだけが変化するビデオはスライドショーです。ある行が何かを保持するとき、手がそれを保持します。口という言葉が出てくるとき、口が開きカメラがその中に入ります。「すべての出口を知っている」と言うとき、出口標識が横を通過します。これらの瞬間は、あなたがコード(SVGシェイプ、Remotionでアニメーション化。画像ジェネレーターは使いません)で描き、それらの単語にタイミングを合わせます(ステップ4b)。
以下のパス:SKILL = このスキルのフォルダ(${CLAUDE_SKILL_DIR})、PY = setup_env.shが出力するPython(Windowsでは~/.raw-kinetiq/venv/Scripts/python.exe、それ以外では~/.raw-kinetiq/venv/bin/python)。.shスクリプトにはBashツールを使用します(WindowsではGit Bash)。
0. ユーザーから必要なもの
必要なのは楽曲のみです。楽曲(と歌詞があれば)を入手したら、ルックに関する質問を一度だけ、最初に、単一のAskUserQuestion呼び出しで行い、ユーザーが選択して分析中に離れられるようにします。ユーザーのメッセージで既に回答されている質問はスキップします。ユーザーが「とにかくやって」と言った場合、または離れている場合は、デフォルト値を使用し、それを使用したことを伝えます。
| 質問(ヘッダー) | オプション | デフォルト |
|---|---|---|
| フォーマット | 16:9 (1920x1080) (推奨) / 縦型 9:16 (TikTok, Reels, Shorts向け) (1080x1920) / スクエア (1080x1080) | 16:9 |
| 雰囲気 | 楽曲からデザイン (推奨) / 次に、この楽曲自身のイメージから引き出された2〜3の具体的な方向性を平易な言葉で(発熱についての曲の場合:「熱気で震える言葉、汗のように黄色く黒の上に」)。「その他」では、ユーザー自身の言葉で雰囲気を説明させることができます | 楽曲からデザイン |
| オーバーレイ (複数選択) | アーティスト名 (左上) / セクション名 (左下) / タイマー+プログレスバー / BPM+ビートカウンター。質問内で、何も選択しないとクリーンなミュージックビデオになると伝えてください | なし |
| アセット | 「ビデオに使用したい画像(カバーアート、写真、ロゴ、あなたの写真)はありますか?」いいえ、楽曲からデザインします (推奨) / はい、ここに送ります / はい、フォルダ内にあります | いいえ |
回答はnew_project.shのフラグにマッピングされます:--sizeと--overlays artist,section,timer,bpm(選択されたもののみ)。ユーザーが特に要求しない限り、常に60 fps。雰囲気はユーザーの回答に導かれて、あなたがステップ2bでデザインします。
アセットがある場合、 すぐに返信してください:「それらを送ってください(またはフォルダを教えてください)、そしてそれぞれが何か、またはどこに配置したいかについて一言、もし希望があれば。」説明は任意です。すべての画像をReadツールで開き、それが何であるかを自分で確認してください。ステップ2cでそれらを取り込みます。
質問を必要としないその他の入力:
| 入力 | デフォルト |
|---|---|
| 歌詞 | ペーストされたテキスト > ファイルタグ(Sunoが書き込む) > あなたがクリーンアップした文字起こし |
| タイトル / アーティスト | ファイルタグ。タグのタイトルが(例:[Rec] Oct 24 ...のように)ジャンクな場合は、ファイル名を使用します |
| 背景 | auto:シーンがセクションとあなたのデザインに従います |
| エンドカード | 最後の数秒間にタイトル+アーティスト。ユーザーが不要な場合は--no-endcard |
1. セットアップ(マシンごとに1回、その後は即時)
bash SKILL/scripts/setup_env.sh
共有Python環境を作成し(faster-whisper、Demucs、librosa、Pillow。CPUビルド)、そのPythonパスを出力します。Python 3.10以上、Node 18以上、ffmpeg(ffprobeを含む)がPATHに存在する必要があります。不足しているものがあれば、システムソフトウェアを自分でインストールするのではなく、ユーザーにインストールするよう伝えてください。初回実行時は数GBをダウンロードします(今はCPU用torch、WhisperとDemucsのモデルは初回使用時)。
2. 楽曲を分析する(キャッシュされ、バックグラウンドで実行)
プロジェクトフォルダ:ユーザーから指定がない限り、<楽曲のフォルダ>/<楽曲名> lyric video/。ユーザーが歌詞をペーストした場合は、最初に<プロジェクト>/work/lyrics.txtとして保存し、[セクション]タグは保持します。
PY SKILL/scripts/prepare.py "<楽曲>" "<プロジェクト>/work"
3分の曲でCPU上で約8〜10分かかります(Demucs、次にWhisper large-v3を2回)。各ステップはその出力をキャッシュするため、再実行は不足しているものだけを行います。「クリーンな状態から始める」ためにそれらの出力を決して削除しないでください。1つのステップをやり直すには、そのファイルだけを削除してください。以下を出力します:
- 長さ、BPM、小節の長さ(
240 / BPM)、1秒あたりのエネルギー(ドロップはそのジャンプ)、 - ボーカル存在範囲(ギャップ=インストゥルメンタル)、
- 両方のWhisper文字起こし(フルミックス、および分離されたボーカルステム)。
2b. この楽曲のビデオをデザインする
ツールキットではなく、楽曲から始めてください。 まだツールキットを開かないでください。既製の動きのメニューは、すべての楽曲を同じ少数のルックに引き寄せます。最初にこの楽曲が何であるかを考え、それを<プロジェクト>/work/design.mdに書き留めてください:
- 楽曲の概要: 物語、誰が誰に話しているか、場所、時間帯、歌詞が繰り返し戻ってくる物体やイメージ、そしてそれがどのように感じられるか(緊張、優しい、無感覚、反抗的、遊び心、 paranoid)。感情はジャンルよりも動きを決定します。
- 楽曲が生きる世界。 語彙を読んでください。単に物語だけでなく。歌詞の単語は世界に集約され、その集約は、タイトルの日常的な意味よりも頻繁に、楽曲がどこに生きているかを示します。「評決」「証言」「判決」に満ちた曲は法廷に住んでいます。「錨」「漂流」「港」は海に。「バランス」「借り」「利息」は金銭に。次に、タイトルとフックのすべての意味をリストアップしてください。これにはスラングや、ゲーム、映画、スポーツ、サブカルチャーでの言葉の意味も含みます(「ゴースト」は幽霊、あなたの前から消える誰か、そしてゲーマーの用語)。そして、語彙が裏付ける意味を選ぶか、または2つを融合させてください。候補と、なぜその1つを選んだのかを書いてください。
- 中心的なイメージ。 その世界と歌詞自身の言葉から、決してジャンルからではありません。見られていることについての曲:一つずつ灯りがつく窓。時間切れについての曲:フレームを燃え尽きる導火線。
- シグネチャームーブ:言葉自体が何をするか、この楽曲の言葉で。 2つか3つ、それぞれ一文で:単語がどのように現れ、どのように去り、フックが何をするか。それらは中心的なイメージから来ます。発熱についての曲では、単語は熱気で震えて現れ、冷えて静止します。未送信の手紙についての曲では、単語はにじむインクで書かれ、その後ページがそれらを折り畳んでしまいます。テスト: 同じ動きがランダムな他の曲にも合うなら、それはまだシグネチャーではありません。目立つように十分に大きくしてください。1回のコーラスの後、視聴者は言葉が何をしたかを説明できるはずです。ほんの一瞬のヘアライングリントや軽いぼかしは何もないと読まれます。動きにスペースと時間を与え、ピークで大きくし、バースではより控えめにしてください。
あなたはこれらをこの楽曲のエフェクトとして書きます(
video/src/custom、ツールキット「The song's own pieces」)。 - ショットリスト: 各セクションに、そのシーン、カメラ、歌詞レイアウト、パレット、使用する動きを記載。中心的なイメージは、以下のように短編映画のように進化し、各セクションは異なるフレーミングを持ちます。同じビューに新しい色合いや数個のライトを追加するだけでは新しいショットとはみなされません。
- あなたがやらないこと: このジャンルとムードに対して明白であり、あなたが避けている動きを挙げてください。そうすることで、それらに戻ってしまうことを防げます。
- 瞬間が共有する描画スタイル(ステップ4b)、楽曲の世界から。 ネオンラインアート、フラットカットペーパー、インクウォッシュ、設計図線、大胆なシルエット、コミックパネル、ウッドカット。曲全体で1つのスタイルとし、瞬間が1つの映画のように見えるようにします。
それを読むための事実:BPM(ハーフタイムの感覚に注意:140 BPMのトラップビートはしばしば70のように感じられます)、ボーカルの密度(whisper_full.jsonの1秒あたりの単語数:速いラップは短いバーストが必要。遅く持続的な歌声はフレーズを保持できる)、および1秒あたりのエネルギー(それがジャンプする場所でビデオが変化します:バースとは異なる動きをするコーラス、パターンを破るブリッジ、最初のコーラスよりも大きい最後のコーラス)。
次に、references/toolkit.mdを読み、デザインを構築してください:
- 瞬間は、タイムラインが存在した後に描かれます(ステップ4b)が、今計画してください:ストーリーボードがショットリストを形成し、瞬間を中心に構築されたセクションはその後ろでシンプルに保つことができます。
- 最初に楽曲自身のパーツを。 シグネチャームーブを
effectsとして、中心的なイメージをlayersとして(そして瞬間が必要とする場合はラインスタイルをmodesとして)video/src/custom/index.tsxに書きます。楽曲がピークに達する場所(少なくともコーラス)でシグネチャームーブを使用し、それをビデオの中心に保ち、1回限りの使用としないでください。 - ツールキットは脇役です。 その組み込みのエントランス、イグジット、ラインスタイル、レイヤーは、中間の行を運び、シーンを埋めます。多くは以前の曲のために作られました(フォンクトラックのためのスラム、スラッシュ、カット、グリッチ、半分にスライスされたチャント、トンネル)。デフォルトでそれらに手を伸ばすことは、まさに2つのビデオを似せてしまう原因です。組み込みのものは、それが正直にこの曲のイメージに合う場合にのみ使用し、その理由を
design.mdに書いてください。 - パレット: 楽曲の世界またはユーザーの画像からの色。セクションごとのシフトを伴います。すべてを書き留めてください。テーマから始めないでください。
- タイポグラフィ:
display用と対照的なalt用の任意のGoogleフォント。この曲の声に合わせて選んでください。 - カメラ、エネルギー、リアクション: セクションごとの動き、カメラの動きの強さ、ビジュアルがビートまたは声に合わせて脈動するかどうか。
- アセット: ユーザーの各画像がどこに行き、テキストがどのようにそのためのスペースを作るか(2c)。
ビデオはショットの連続であり、決して言葉が載った1つの画像ではありません。 1つの中心的なアイデアは正しいですが、1つの不変のフレームは違います。楽曲を短編映画のように、セクションごとに計画してください:イントロで視聴者は何を見るか、最初のバースがそれをどのようにフレーミングするか、コーラスで何が開かれるか、ブリッジで何が崩れるか、どのように解決するか。中心的なイメージは進化する必要があります:スケール、アングルやカメラワーク、時間帯、パレット、フレーム内のものを変えてください。カスタムレイヤーはセクションとその進行状況を取得するため、異なるセクションで異なるものを表示できます。すべてのコーラスはバースとは明確に異なって見えなければならず、最後のコーラスは最初のものより大きく見えなければなりません。隣接する2つのセクションがシーン、カメラ、レイアウト、パレットを共有している場合は、一方を変更してください。
フレーミングを変えてください。色だけではありません。 1つのカスタムレイヤーが曲全体を支える場合、それに本当のショットを与えてください:異なるカメラ位置(上から、内側から、地上レベル、1つのディテールにクローズ)、異なるスケール、フレーム内の異なる被写体。同じビューを再着色したり、ライトを追加したりすることは、まだ1ショットと読まれます。チェックは、曲のあまりに多くの部分を占めるフレーミングをフラグします(one-shot)。
イメージと一緒に言葉を配置してください。 歌詞がどこに座るかは、デザインの一部です:シーンが表示する表面に、窓に、被写体の隣に、音楽が動くときに新しいスポットに動く各バーストとともに。セクション全体のバーストがまったく同じ場所にある場合、それは字幕です。エフェクトのburstフックは、バーストを任意の場所に移動できます(そのtransform)。
スローは静的ではありません。 柔らかく、ゆっくりとした、または囁くような曲はゆっくり動きますが決して止まりません。カメラがドリフトまたはプッシュし、光が声とともに膨らみ("react": "voice"、ソフトな曲のデフォルト)、シーンはすべてのセクションで変わります。感情を保ち(優しさは優しさのまま)、それでも各セクションを新しい絵にしてください。遅い歌詞に大きく広がる余地を与えてください:一度に少数の単語、大きく設定され、意図を持って配置され、曲全体で同じ行の小さな字幕ではありません。
大胆に:ジャンルを横断して借りてきてください(ブルータリストタイポグラフィのソウルソング、セリフ体のドリルトラック)、リスクを取り、セルフチェック(ステップ5)が着地しないものをキャッチします。また、design.mdがないビデオ(no-design)、組み込みの動きのみを使用するコーラス(no-signature)、以前の曲から借用された組み込み(borrowed)、および組み込みのレイヤーのみで作られた背景(stock-world)をフラグします。
デザインを2つまたは3つの平易な文でユーザーに伝えてください(「見られていることについての曲なので、言葉は夜に窓が一つずつ灯る建物の前に座ります。各単語は歌われるときに窓のように点灯し、コーラスは通りを1つの明るい部屋に暗くします」)。
次に、ビデオプロジェクトをセットアップします(既存のものを再利用します):
bash SKILL/scripts/new_project.sh "<楽曲>" "<プロジェクト>" --size 1920x1080 --fps 60 [--overlays artist,timer] [--no-endcard]
そして、デザインをvideo/src/data/config.jsonに書き込みます(色、フォント、モーション、シーン、アセット)。new_project.shを再実行しても、そこに置いたすべてのものは保持されます。このスキルの古いバージョンで作成されたプロジェクトの場合は、--updateを追加します。これにより、現在のテンプレートコードが入れ替わり、曲のデータ、カスタムパーツ、アセットは保持されます。
2c. ユーザーの画像
PY SKILL/scripts/assets.py "<プロジェクト>" <画像ファイルまたはフォルダ> [--cutout 名前1,名前2 [--person]]
それらをプロジェクトにコピーし(直立、適切なサイズ)、それぞれの形状、明るさ、主な色を出力し、video/public/assets/sheet.pngに書き込みます。シートを見てください。フレーム内で背景なしで立つべき被写体を切り抜きます(--cutout。人物の場合は--personを追加します。そうしないと、モデルが手や顔だけを保持する可能性があります)。シート上のすべての切り抜きを確認してください。エッジが間違っている場合は、他のモデルを試すか、代わりに画像を背景やポスターとして使用してください。
ユーザーが各画像について言ったことを使用し、何も言っていない場合は、あなたが見たものから決定します。曲がそれらを必要とする場所に配置します(ツールキット「アセット」):バースの横に配置されたポートレートの切り抜き、コーラスの背景画像としてのカバーアート、ブリッジのための歌詞の背後にある風景写真。
3. タイムラインを構築する
PY SKILL/scripts/timeline.py "<プロジェクト>"
work/timeline.jsonを出力します。これは、各セクションとその中の各単語またはフレーズをタイムスタンプ、期間、エネルギー、およびそれがバーのどこにあるか(ドラムの強打を予測するため)とともにリストしたものです。本当の仕事は編集です: 各wordオブジェクトは、どの単語がタイミングを外しているかを示します。理由はword:confidence、nonspeech、cutoff、before-beat / after-beatです。以下を修正してください:
- セクションを揃える: 楽器のブレイクの前の
sectionsリストにinstrumentalマークを追加します(例:{ "mark": "instrumental", "at": 23.2 })。ドロップ、ブレイク、アウトロにマークを付けます。チェックで、|instrumental|マークを持つ各セクションが歌詞を表示しないか、過ぎ去るテキストのみを表示することを確認します。instrumentalマークのない楽器セクションは、それでもボーカルが存在しないためタイムライン内で歌詞のギャップとして現れますが、マークはデザインに意図的な休止があることを知らせます。 - 歌詞をきれいにする: 各行の
textを読んでください。Whisperは文末に句点を追加し、語尾を言い換え、歌詞にあるのと同じ単語を繰り返すことがあります。各行が実際の歌詞と一致するようにtextを編集し、元の単語をどこにも変更しないでください(timeline.jsonの変更)。すべての行についてこれを行ってください。歌詞ファイルがある場合は、それを行ごとに比較のために使用してください。 - 単語が存在する場合はそのタイミングを修正する:
wordオブジェクトを調整します。startは単語が始まるときであり、endは次の単語のstartの直前か、その単語の鳴き終わりまでです。before-beat単語は少し遅らせます(約50ms)。キャッチーなフックの頂点にあるバースト単語は少し早く表示します(約30ms、歌詞がすでに発声されているように見えるように)。nonspeechは非常に短いギャップを埋めるノイズまたはアーティファクトです。これは削除するか、非常に弱いアクセントとして短く保ちます。自信が低い単語を聞く必要があれば、design.mdの横にあるディレクトリから楽曲を再生してください。単語をゼロから追加する必要がある場合は、work/lyrics.txtの行から1つのwordオブジェクトをコピーし、そのタイミングを調整してください。新しく追加された単語のpTextは[inserted]にする必要があります。 - 構造を更新する: セクションの境界が間違っている場合は、
sectionsリスト内のstart値とend値を調整してください。複数の隣接するセクションが同じ3語または4語を表示している場合、時にはタイムラインは歌詞が開始されるとすぐに次のセクションへの移行を開始します。セクション内のバーストの配置は、lyrics内のat値とbarAt値によって制御されます。通常、これらは正しいですが、構造が変わった場合は調整してください。
仕事が終わったら、timeline.pyを再度実行してタイムラインを再生成します。これにより編集は保持され、新しい音声分析で更新されるだけです。最初のパスで40のタイミングの問題を見つけた場合、期待してください。徐々に速くなります。
最終的なビデオを品質チェックとして視聴しないでください(Remotion Studioまたはレンダリングを除く)。タイムラインエディタからのテストレンダリングはありません。単語の正確さと正確なタイミングに完全に依存しています。プロセスを信頼し、タイムラインを修正します。
PY SKILL/scripts/timeline.py "<プロジェクト>"
4. ビデオコードを書く
テンプレートはvideo/src/Root.tsxです。コンポーザブル、データ、効果に慣れるために、まずreferences/remotion.mdを読んでください。次に、video/src/を編集してデザインを実装します:
4a. コンフィグのレイアウト
パレット: primary、secondary、accent、highlight、各セクションのsceneにpalette。カスタムレイヤーはaccentにセクション固有のtintも取得できます。シーンがpalette.primaryの色に一致しない色を持っている場合、その色もpalette.customとして含めてください。
フォント: Google Fontsからdisplay(主な歌詞用)とalt(対照的なテキスト、アーティスト名、エンドカード用)。各フォントに対して、そのすべてのウェイトをインポートします:
PY SKILL/scripts/install_fonts.py "<プロジェクト>" display:Outfit alt:Noto+Sans+JP
シーン設定: config.jsonのscenes、各セクションに対して:enter、exit、lineStyle、layout、react("beat"、"voice"、または"none")、camera("drift"、"push"、"bump"、"sway"、"pull"、"none"、またはカスタムカメラワークのためのキーフレームを含む配列)。cameraSkill("hard"、"medium"、"soft"、"static")は各動きの強さを制御します。アセットがある場合、assetsキーの下にそれらの配置を指定します。
4b. 瞬間を描く(カスタムレイヤーとエフェクト)
video/src/custom/index.tsxにいる状態で、ステップ2bで計画した瞬間を書いてください。各瞬間はカスタム<Layer>または<Effect>です。<Effect>は、特定の単語または行に結び付けられたアニメーションを持つことができます。
レイヤーは中央のイメージを駆動します。エフェクトは、それらが取り付けられている単語のstartに現れ、その期間持続します。各エフェクトまたはレイヤーは、config.jsonのscenesの設定に応じてセクションごとに異なる動作をすることができます。
描画のヒント:
- SVGパスを使用して形状を描きます。複雑にしすぎないでください。単純な形状は多くの場合、より大きな影響を与えます。
- Remotionの
useCurrentFrame()とinterpolate()を使用してアニメーション化します。 - カスタムエフェクトの
wordプロップには、その単語のタイミングデータが含まれているため、それと正確に同期できます。 - エフェクトに適切なフォールバックを提供するか、単語がある場合にのみ表示されるようにします。
5. セルフチェック
PY SKILL/scripts/check.py "<プロジェクト>"
典型的な問題をチェックし、各問題をオレンジ(警告)または赤(問題)で一覧表示します。design.mdを読んで自動チェックからの見解を取得し、以下を検証します:
- すべてのセクションにカスタムムーブがある(
no-signature) - デザインに実際のバリエーションがある(
one-shot) - ツールキットが過度に使用されていない(
borrowed) - 瞬間が計画されている(
no-design) - 背景がカスタム画像を持っている(
stock-world)
各赤の問題を修正してください。いくつかはタイムラインの編集の修正であり、いくつかはデザインの改善です。カスタムコードを追加するか、タイムラインを調整するか、デザイン文書を更新するかのいずれかです。最終的なビデオのどの部分でも問題を引き起こす可能性のあるものはスキップしないでください。check.pyが何も赤を返さず、オレンジについてあなたが決定を下すまで、再実行を続けてください。
6. レンダリング
cd "<プロジェクト>/video"
npx remotion render src/index.ts lyricVideo out.mp4
完了したら、ビデオがすべて正しいことを確認するためにそれを視聴してください。すべての単語がタイミング通りで、デザインが一貫して適用され、すべての瞬間が意図したとおりに機能しているかどうか。そうであれば、出力ファイルをユーザーに示してください。そうでなければ、問題を修正して再レンダリングしてください。
そして、<プロジェクト>/out.mp4で終わります。