Communitygithub.com

ascii-video

ASCIIビデオ:動画/音声をカラーASCII MP4/GIFに変換します。

ascii-video とは?

このスキルは、任意の動画、音声、画像、または生成入力を、カラーASCII文字アニメーション(MP4、GIF、画像シーケンス)に変換する本格的なプロダクションパイプラインです。ビデオからASCIIへの変換、音声反応型ミュージックビジュアライザー、生成ASCIIアートアニメーション、ハイブリッドビデオ+音声反応、テキスト・歌詞オーバーレイ、リアルタイム端末レンダリングなど、6つの動作モードをサポートします。各プロジェクトは単一の自己完結型Pythonスクリプトとして実装され、GPUは不要です。パイプラインはINPUT→ANALYZE→SCENE_FN→TONEMAP→SHADE→ENCODEの6段階で構成され、各シーンに独自のエフェクト、パレット、カラー戦略、シェーダーを適用することで、視覚的に魅力的な出力を実現します。Claude Code、Cursor、CodexなどのAIエージェントに最適で、開発者がスクリプトを生成し、クライアント用のカスタムASCIIビデオを制作するために使用します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/David2024patton/custom-skills-public/tree/main/skills/creative/ascii-video

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

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

ドキュメント

ASCIIビデオプロダクションパイプライン

使用するタイミング

ユーザーが以下のリクエストをする場合に使用します:ASCIIビデオ、テキストアートビデオ、ターミナルスタイルビデオ、キャラクターアートアニメーション、レトロテキストビジュアライゼーション、ASCIIのオーディオビジュアライザー、動画のASCIIアート変換、マトリックス風エフェクト、またはアニメーションASCII出力全般。

中身

ASCIIアートビデオのプロダクションパイプライン — あらゆるフォーマットに対応。動画/音声/画像/生成入力をカラーASCIIキャラクタービデオ出力(MP4、GIF、画像シーケンス)に変換します。以下をカバー:ビデオ→ASCII変換、音声反応型ミュージックビジュアライザー、生成ASCIIアートアニメーション、ハイブリッドビデオ+音声反応、テキスト/歌詞オーバーレイ、リアルタイム端末レンダリング。

クリエイティブスタンダード

これは視覚芸術です。ASCII文字が媒体であり、映画が基準です。

コードを一行書く前に、創造的なコンセプトを明確にしてください。ムードは?どんな視覚的なストーリーを語るのか?このプロジェクトを他のASCIIビデオと違うものにするのは何か?ユーザーのプロンプトは出発点です — 文字通りの転写ではなく、創造的な野心で解釈してください。

初回レンダリングでの優れた品質は絶対条件です。 出力は修正ラウンドを必要とせず、視覚的に印象的でなければなりません。何かが汎用的で、平面的で、「AIが生成したASCIIアート」のように見えるなら、それは間違いです — 出荷前に創造的コンセプトを再考してください。

参照語彙を超えてください。 参照のエフェクトカタログ、シェーダープリセット、パレットライブラリは出発点の語彙です。プロジェクトごとに、新しいパターンを組み合わせ、修正し、発明してください。カタログは絵の具のパレットです — あなたが絵を描きます。

積極的に創造的になってください。 必要とされる場合は、スキルの語彙を拡張してください。参照にビジョンに必要なものがなければ、それを構築してください。ユーザーが依頼しなかったが、感謝するであろう視覚的瞬間を少なくとも1つ含めてください — トランジション、エフェクト、作品全体を引き上げる色の選択。

技術的な正確さよりも、まとまりのある美学。 ビデオ内のすべてのシーンは、統一された視覚言語 — 共有された色温度、関連する文字パレット、一貫した動きの語彙 — によって結びついている必要があります。すべてのシーンがランダムに異なるエフェクトを使っている技術的に正しいビデオは、美学的な失敗です。

密度が高く、階層的で、考慮されていること。 すべてのフレームが鑑賞に値するものであること。決してフラットな黒背景にしてはいけません。常にマルチグリッド構成。常にシーンごとのバリエーション。常に意図的な色。

モード

モード入力出力参照
ビデオ→ASCIIビデオファイルソース映像のASCII再現references/inputs.md § ビデオサンプリング
音声反応音声ファイル音声特徴によって駆動される生成ビジュアルreferences/inputs.md § 音声解析
生成なし(またはシードパラメータ)手続き型ASCIIアニメーションreferences/effects.md
ハイブリッドビデオ + 音声音声反応オーバーレイ付きASCIIビデオ両方の入力参照
歌詞/テキスト音声 + テキスト/SRT視覚効果付きタイミングテキストreferences/inputs.md § テキスト/歌詞
TTSナレーションテキスト引用 + TTS APIタイプされたテキストによるナレーション付き証言/引用ビデオreferences/inputs.md § TTS統合

スタック

プロジェクトごとに単一の自己完結型Pythonスクリプト。GPU不要。

レイヤーツール目的
コアPython 3.10+, NumPy数学、配列演算、ベクトル化エフェクト
信号SciPyFFT、ピーク検出(音声モード)
画像Pillow (PIL)フォントラスタライズ、フレームデコード、画像I/O
ビデオI/Offmpeg (CLI)入力デコード、出力エンコード、音声多重化
並列concurrent.futuresバッチ/クリップレンダリング用Nワーカー
TTSElevenLabs API(オプション)ナレーションクリップ生成
オプションOpenCVビデオフレームサンプリング、エッジ検出

パイプラインアーキテクチャ

すべてのモードは同じ6段階のパイプラインに従います:

INPUT → ANALYZE → SCENE_FN → TONEMAP → SHADE → ENCODE
  1. INPUT — ソースマテリアル(ビデオフレーム、音声サンプル、画像、または何もなし)をロード/デコード
  2. ANALYZE — フレームごとの特徴(音声帯域、ビデオ輝度/エッジ、動きベクトル)を抽出
  3. SCENE_FN — シーン関数がピクセルキャンバス(uint8 H,W,3)をレンダリング。_render_vf() + ピクセルブレンドモードを介して複数の文字グリッドを合成。references/composition.md 参照
  4. TONEMAP — パーセンタイルベースの適応明るさ正規化。references/composition.md § 適応トーンマップ 参照
  5. SHADE — ShaderChain + FeedbackBuffer による後処理。references/shaders.md 参照
  6. ENCODE — 生のRGBフレームをffmpegにパイプしてH.264/GIFエンコード

クリエイティブディレクション

美的次元

次元オプション参照
文字パレット密度ランプ、ブロック要素、記号、スクリプト(カタカナ、ギリシャ文字、ルーン文字、点字)、プロジェクト固有architecture.md § パレット
色戦略HSV、OKLAB/OKLCH、離散RGBパレット、自動生成ハーモニー、モノクロ、色温度architecture.md § 色システム
背景テクスチャサイン場、fBMノイズ、ドメインワープ、ボロノイ、反応拡散、セルオートマトン、ビデオeffects.md
主要エフェクトリング、スパイラル、トンネル、渦巻き、波、干渉、オーロラ、火、SDF、ストレンジアトラクターeffects.md
パーティクルスパーク、雪、雨、バブル、ルーン文字、軌道、群れボイド、フローフィールドフォロワー、軌跡effects.md § パーティクル
シェーダームードレトロCRT、クリーンモダン、グリッチアート、シネマティック、ドリーミー、インダストリアル、サイケデリックshaders.md
グリッド密度xs(8px) から xxl(40px)、レイヤーごとに混合architecture.md § グリッドシステム
座標空間デカルト、極座標、タイル、回転、魚眼、メビウス、ドメインワープeffects.md § 変換
フィードバックズームトンネル、虹色の軌跡、幽霊のようなエコー、回転曼荼羅、色進化composition.md § フィードバック
マスキング円、リング、グラデーション、テキストステンシル、アニメーションアイリス/ワイプ/ディゾルブcomposition.md § マスキング
トランジションクロスフェード、ワイプ、ディゾルブ、グリッチカット、アイリス、マスクベースのリビールshaders.md § トランジション

セクションごとのバリエーション

ビデオ全体で同じ設定を使ってはいけません。各セクション/シーンごとに:

  • 異なる背景エフェクト(または2〜3を合成)
  • 異なる文字パレット(ムードに合わせる)
  • 異なる色戦略(または最低でも異なる色相)
  • シェーダー強度を変える(ピーク時はより多くのブルーム、静かな時はより多くのグレイン)
  • 異なるパーティクルタイプ(パーティクルがアクティブな場合)

プロジェクト固有の発明

すべてのプロジェクトで、以下を少なくとも1つ発明してください:

  • テーマに合ったカスタム文字パレット
  • カスタム背景エフェクト(既存のビルディングブロックを組み合わせ/修正)
  • カスタムカラーパレット(ブランド/ムードに合った離散RGBセット)
  • カスタムパーティクル文字セット
  • 新しいシーントランジションまたは視覚的瞬間

カタログから選ぶだけではダメです。カタログは語彙です — あなたが詩を書きます。

ワークフロー

ステップ 1: クリエイティブビジョン

コードの前に、創造的なコンセプトを明確にしてください:

  • ムード/雰囲気: 視聴者は何を感じるべきか?エネルギッシュ、瞑想的、混沌、エレガント、不気味?
  • 視覚的ストーリー: 映像の中で何が起こるか?緊張を高める?変容?溶解?
  • 色の世界: 暖色/寒色?モノクロ?ネオン?アースカラー?支配的な色相は?
  • 文字テクスチャ: 高密度データ?まばらな星?有機的な点?幾何学的なブロック?
  • これを他と違うものにするもの: このプロジェクトをユニークにするものは何か?
  • 感情の弧: シーンはどのように進行するか?エネルギーで始まり、クライマックスに向かい、解決する?

ユーザーのプロンプトを美的選択にマッピングしてください。「チルなローファイビジュアライザー」には「グリッチサイバーパンクデータストリーム」とはまったく異なるすべてが必要です。

ステップ 2: 技術設計

  • モード — 上記6つのモードのうちどれか
  • 解像度 — ランドスケープ 1920x1080(デフォルト)、ポートレート 1080x1920、スクエア 1080x1080 @ 24fps
  • ハードウェア検出 — コア/RAMを自動検出し、品質プロファイルを設定。references/optimization.md 参照
  • セクション — タイムスタンプをシーン関数にマッピング。各シーンに独自のエフェクト/パレット/色/シェーダー設定
  • 出力形式 — MP4(デフォルト)、GIF(640x360 @ 15fps)、PNGシーケンス

ステップ 3: スクリプトの構築

単一のPythonファイル。コンポーネント(参照付き):

  1. ハードウェア検出 + 品質プロファイル — references/optimization.md
  2. 入力ローダー — モード依存; references/inputs.md
  3. 特徴アナライザー — 音声FFT、ビデオ輝度、または合成
  4. グリッド + レンダラー — ビットマップキャッシュ付きマルチ密度グリッド; references/architecture.md
  5. 文字パレット — プロジェクトごとに複数; references/architecture.md § パレット
  6. 色システム — HSV + 離散RGB + ハーモニー生成; references/architecture.md § 色
  7. シーン関数 — 各関数が canvas (uint8 H,W,3) を返す; references/scenes.md
  8. トーンマップ — 適応明るさ正規化; references/composition.md
  9. シェーダーパイプライン — ShaderChain + FeedbackBuffer; references/shaders.md
  10. シーンテーブル + ディスパッチャー — 時間 → シーン関数 + 設定; references/scenes.md
  11. 並列エンコーダー — ffmpegパイプを使用したNワーカークリップレンダリング
  12. メイン — 完全なパイプラインを調整

ステップ 4: 品質検証

  • まずテストフレーム: フルレンダリングの前に、主要なタイムスタンプで単一フレームをレンダリング
  • 明るさチェック: すべてのASCIIコンテンツで canvas.mean() > 8。暗い場合はガンマを下げる
  • 視覚的一貫性: すべてのシーンが同じビデオに属しているように感じられるか?
  • クリエイティブビジョンチェック: 出力はステップ1のコンセプトと一致しているか?汎用的に見える場合は、やり直す

重要な実装ノート

明るさ — tonemap() を使用し、線形乗算は避ける

これは#1の視覚的問題です。黒背景のASCIIは本質的に暗いです。canvas * N 乗算は決して使用しないでください — ハイライトがクリップされます。適応トーンマップを使用してください:

def tonemap(canvas, gamma=0.75):
    f = canvas.astype(np.float32)
    lo, hi = np.percentile(f[::4, ::4], [1, 99.5])
    if hi - lo < 10: hi = lo + 10
    f = np.clip((f - lo) / (hi - lo), 0, 1) ** gamma
    return (f * 255).astype(np.uint8)

パイプライン: scene_fn() → tonemap() → FeedbackBuffer → ShaderChain → ffmpeg

シーンごとのガンマ: デフォルト 0.75、ソラリゼーション 0.55、ポスタリゼーション 0.50、明るいシーン 0.85。暗いレイヤーには screen ブレンド(overlay ではない)を使用します。

フォントセルの高さ

macOS Pillow: textbbox() は間違った高さを返します。font.getmetrics() を使用します: cell_height = ascent + descent。references/troubleshooting.md を参照してください。

ffmpegパイプデッドロック

長時間実行されるffmpegで stderr=subprocess.PIPE を決して使用しないでください — 64KBでバッファがいっぱいになりデッドロックします。ファイルにリダイレクトしてください。references/troubleshooting.md を参照してください。

フォントの互換性

すべてのUnicode文字がすべてのフォントでレンダリングされるわけではありません。初期化時にパレットを検証してください — 各文字をレンダリングし、空白の出力をチェックしてください。references/troubleshooting.md を参照してください。

クリップごとのアーキテクチャ

セグメント化されたビデオ(引用、シーン、チャプター)の場合、並列レンダリングと選択的再レンダリングのために、各セグメントを個別のクリップファイルとしてレンダリングします。references/scenes.md を参照してください。

パフォーマンス目標

コンポーネント予算
特徴抽出1-5ms
エフェクト関数2-15ms
文字レンダリング80-150ms(ボトルネック)
シェーダーパイプライン5-25ms
合計~100-200ms/フレーム

参照

ファイル内容
references/architecture.mdグリッドシステム、解像度プリセット、フォント選択、文字パレット(20+)、色システム(HSV + OKLAB + 離散RGB + ハーモニー生成)、_render_vf() ヘルパー、GridLayerクラス
references/composition.mdピクセルブレンドモード(20モード)、blend_canvas()、マルチグリッド構成、適応 tonemap()、FeedbackBuffer、PixelBlendStack、マスキング/ステンシルシステム
references/effects.mdエフェクトビルディングブロック:値フィールドジェネレーター、色相フィールド、ノイズ/fBM/ドメインワープ、ボロノイ、反応拡散、セルオートマトン、SDF、ストレンジアトラクター、パーティクルシステム、座標変換、時間的一貫性
references/shaders.mdShaderChain、_apply_shader_step() ディスパッチ、38シェーダーカタログ、音声反応スケーリング、トランジション、ティントプリセット、出力形式エンコード、端末レンダリング
references/scenes.mdシーンプロトコル、Renderer クラス、SCENES テーブル、render_clip()、ビート同期カット、並列レンダリング、デザインパターン(レイヤー階層、方向性アーク、視覚的メタファー、構成技法)、すべての複雑さレベルの完全なシーン例、シーンデザインチェックリスト
references/inputs.md音声解析(FFT、帯域、ビート)、ビデオサンプリング、画像変換、テキスト/歌詞、TTS統合(ElevenLabs、音声割り当て、音声ミキシング)
references/optimization.mdハードウェア検出、品質プロファイル、ベクトル化パターン、並列レンダリング、メモリ管理、パフォーマンス予算
references/troubleshooting.mdNumPyブロードキャストの落とし穴、ブレンドモードの落とし穴、マルチプロセッシング/ピクル化、明るさ診断、ffmpegの問題、フォントの問題、よくある間違い

クリエイティブ・ダイバージェンス(ユーザーが実験的/創造的/ユニークな出力を求める場合のみ使用)

ユーザーが創造的、実験的、驚きのある、または型にはまらない出力を求める場合は、最適な戦略を選択し、コードを生成する前にそのステップを検討してください。

  • 強制結合 — ユーザーが分野横断的なインスピレーションを求める場合(「有機的に見せて」、「工業的な美学」)
  • 概念ブレンディング — ユーザーが2つのものを組み合わせることを指定する場合(「海と音楽の出会い」、「宇宙+書道」)
  • 斜め戦略 — ユーザーが最大限にオープンな場合(「驚かせて」、「今まで見たことのないものを見せて」)

強制結合

  1. 視覚目標とは無関係なドメインを選ぶ(気象システム、微生物学、建築、流体力学、織物)
  2. その中核的な視覚的/構造的要素をリストアップする(侵食 → 漸進的なリビール;有糸分裂 → 分割複製;織物 → 連動パターン)
  3. それらの要素をASCII文字とアニメーションパターンにマッピングする
  4. 統合する — キャラクターグリッドで「侵食」や「結晶化」はどのように見えるか?

概念ブレンディング

  1. 2つの異なる視覚的/概念的領域を特定する
  2. 両方のコア属性を抽出する(形、動き、色、リズム、質感)
  3. それらの属性をブレンドして新しいハイブリッドを作り出す
  4. 結果として生じる視覚言語をASCIIとアニメーションの語彙に変換する

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル