Communitygithub.com

Papermorph

参考PDFからアニメーション付き・ナレーション入り・インタラクティブなWebブックを作成・編集します。物語やジョーク、おとぎ話から動く紙人形劇の絵本を作成し、アイデアや書籍についてのナレーション付きドキュメンタリー、縦型ショート動画、スクロールに応じて絵が変わるスクロールストーリー、年ごとに歴史が展開する探索可能な地図などを生成します。

Papermorph とは?

Papermorphは、1つのエンジンで3つのティア(レッスン、絵本、フィルム)のWebブックを生成するAIエージェントスキルです。教科書PDFからは各章がアニメーションとナレーションで構成されるレッスンフィルムを、物語やおとぎ話からはコードまたは画像モデルで描かれた紙人形劇の短編映画を、そして書籍やアイデアからはパブリックドメイン画像や地図を駆使したナレーション付きドキュメンタリーや縦型ショート動画を作成します。すべての出力はSVGステージ(1600×900または縦型ショート用に900×1600)とプレーヤーで構成され、「ビート」と呼ばれる単位でナレーションクリップとタイミングアクションがペアリングされます。品質基準は「生きている(動きに重みとタイミングがある)」「構図が整っている(テキストと図が一体で読める)」「真実である(動き、ラベル、数値が常に一致する)」「滑らか(Firefoxでもスタッターしない)」の4つです。このスキルはClaude Code、Cursor、CodexなどのAIエージェント上で動作し、ユーザーとの対話からスタイル設定(style.json)を決定し、それを基に各チャプターを生成・レビューします。

対応~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/DozenTwelve/Papermorph/tree/HEAD/.claude/skills/papermorph

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

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

ドキュメント

Papermorph は何をしますか?

Papermorphは、1つのエンジンで3つのティアのブックを作成します。

  • レッスン(教科書PDFから):各章は短いアニメーションレッスンフィルムで、図が説明を担い、ナレーションがそれを語り、図の中でクイックチェックと練習が行われます。
  • 絵本(物語、ジョーク、おとぎ話から):コードで描かれたり画像モデルでペイントされた紙人形が舞台の前で演じる短編フィルムで、声、効果音、音楽が付きます。
  • フィルム(書籍、アイデア、またはユーザーの主張から):パブリックドメインの画像、言葉、地図を声の動きに合わせて動かすナレーション付きドキュメンタリー、および3分未満で1つのポイントを伝える縦型ショート動画。

すべてはSVGステージ(1600×900、ショートの場合は900×1600)とプレーヤーで構成されます。ビートはナレーションクリップとタイミングアクションをペアリングします。良いとは、生きている(物事が重みとタイミングを持って動作・変化する)、構図が整っている(各瞬間が1つの絵として読め、テキストはそれが指すものの隣にある)、真実である(動き、ラベル、数値が常に一致する)、滑らか(Firefoxを含め、スタッターなく再生される)ことを意味します。

画像がどうあるべきかはブックとユーザーに依存するため、作業はstyle.jsonで終わる対話から始まります。これにはユーザーの言葉、選択したルック、声、各ステップを実行するモデル、および後で承認された章が含まれます。すべての章はこれに照らして作成され、各ビートのレイアウトと振り付けは、あなたがこれと承認された章に対して判断します。ユーザーのリクエストはデフォルトを上書きします。説明、例、図面を再作成しますが、ソースPDF、ページ画像、抽出されたテキストは静的出力フォルダ外かつバージョン管理外に保持します(.gitignore:*.pdf、books/*/pages/)。スキルが作成した章は最初のカットであり、公開前にレビューラウンドとユーザーの視聴が行われます。

どのティアか

そのティアの最初のファイルを読み、現在のステップに必要なものだけを読みます。以下のすべてのファイルはここからリンクされており、見つけるために他のファイルは必要ありません。

ユーザーが持ち込むものティア最初に読むファイル次に、ステップに応じて
教科書PDF(コースブックも)レッスンlessons.mdintake.md · authoring.md · diagrams.md(ティア1) · scenes.md(ティア2) · assets.md · maths.md(math.js、数式パーツ、LaTeX) · questions.md · figures.md(読者が操作する図) · checks.md · cover.md · courses.md(引用、問題バンク、SCORM:ブックが要求する場合のみ)
物語、ジョーク、おとぎ話、または絵本のPDF(スキャンされたイラスト付き:stories.md)絵本stories.mdpuppets.md · painting.md(ペイントルック) · listen-and-find.md(幼児向け探し遊びゲーム)
ナレーションフィルムとして説明する書籍、アイデア、または歴史の一節フィルム:ドキュメンタリーfilms.mddocumentary.md
3分未満で1つのポイントを伝える縦型動画(YouTube Shorts、TikTok、Reels)、または長編フィルムの再編集フィルム:ショートfilms.mdshorts.md
フィルムの素材、または主に地図と数値からなるアイデアで、読者が自分のペースでスクロールに応じて絵が変わるページで読むもの(スクロールストーリー)フィルム:スクロールページfilms.mdscroll.md
地図上で年ごとに探検する歴史の一節(変化する国境、移動する人々:1ページ、独自のプレーヤー、エンジンは使用しない)探索ページexplore.md

すべてのティアで共通のコア:

ファイル内容
core/style.mdユーザーへの質問方法、モデルステップ、有料ステップ(キー、価格、台帳、残高)、style.json
core/publish.mdnew_book.py、言語、分数、プレビューと配信、ビデオエクスポート
core/sound.mdナレーションファイル、声、レベル、効果音、音楽、キャプション
core/review.md自分の作品の動きの確認、フレーム、滑らかさ、ディレクターラウンド
core/team.mdサブエージェントによる章の作成、コーディネーター、並列ワーカー
core/engine.mdプレーヤーと描画API、タイミング、カメラ、パフォーマンス、トラップ

books/<book>/style.jsonがまだ存在しない場合は、そのティアのインテークから開始します。既に与えられた回答と承認は再利用します。

リファレンスブック

リファレンスブックは基準です。到達すべきレベルであり、コピーすべきフォーマットではありません。各ブックはPapermorphリポジトリ(https://github.com/DozenTwelve/Papermorph)の`site//フォルダで、https://papermorph.diamonddoge.org//`で提供されているため、そのソースはチェックアウトで読むか、スキルが単独でインストールされている場合はどちらかのアドレスから取得できます。ティアファイルは、特定のステップで開く価値のあるブック内のファイルを指定します。

ティアブック(スラッグ)
レッスンティア1:Elementary Algebra(elementary-algebra)、Math Notebook(math-notebook);ティア2:Science(science);暗いインクのライトボード:physics-notebook
絵本The Little Horse Crosses the River(little-horse)とLittle Red Riding Hood(little-red-riding-hood):すべてコード内、ElevenLabsによる声のキャスト、聞いて探す停止、最新かつ最高基準;Joke Collection(joke-collection):ペイントされたセット、コード内の人形、一連のエピソード;Millions of Cats(millions-of-cats、Wanda Gág、1928):スキャンされたブック自身の画像をセットと人形に活用(棚にはない)
ドキュメンタリーMadness and Civilization(madness、フーコーに基づく、10分)、The Pandemic(pandemic)、Shooting an Elephant(shooting-an-elephant、読者自身が演じるもの)
ショートMadness and Civilizationのショート(madness-shorts;エピソード1『The Ship』が実例)、The Pandemicのショート(pandemic-shorts)

Tulip Mania(tulip-mania)は、これらのファイル以外の助けを一切使わずにスキル単独で作成されたテストフィルムです。ファイルはそこで遭遇した問題を引用しています。

プロジェクトレイアウト

books/<book>/                  プライベート:ソース、style.json、ストーリーボード、アート、review/(ティアファイルがそれぞれのものをリスト)
content/<book>/chNN/           ナレーション.<lang>.jsonと音声キャッシュ
  tools/<book>/                 テスト、音声スクリプト、証拠
site/<book>/                   静的ブック(これのみが配信される)
  index.html                   カバーと目次、またはシリーズページ
  lib/                         エンジン(engine.pyで同期)、lib/book.css(このブックの設定)、ティアのキット、ブック独自の部品
  img/                         ブックの画像
  chNN/index.html、audio/<lang>/   章またはエピソード、そのビートMP3とtimings.js(フィルムと絵本:audio/sfx/、audio/bgm/)

SKILLはこのスキルの絶対フォルダ、<book>はブックスラッグ、<lang>はその主要言語コードです。new_book.pyは任意のティアのブックを開始します(core/publish.md)。

必要なもの:uv、ffmpeg/ffprobe、Edge TTSネットワークアクセス(またはローカルのKokoro)、リポジトリのengine/フォルダが手元にない場合のgithub.comへのengine.py用アクセス、ユーザーが選択した有料ステップのみに使用されるOpenRouterキー(paint.py、eleven.py、video.py;paint_openai.pyはOpenAIキーを使用)、およびPlaywrightブラウザ(uv run --with playwright playwright install chromium firefox;PlaywrightのChromiumが動作しない場合は、CHROMEにインストール済みのChrome、Chromium、Brave、Edgeを設定)。プレビュー:python3 SKILL/scripts/serve.py 8765 site(ブラウザキャッシュなし)。

スクリプト

すべてSKILL/scripts/内にあり、各スクリプトはuv run --with …で実行する際にドキュメント文字列の最初の行に指定されたパッケージを使って--helpを実行すると使用方法を表示します(パッケージなしでも--helpはインポートで停止しません)。

対象スクリプト
全ブックnew_book.py ブックフォルダの開始 · serve.py キャッシュなしプレビュー · engine.py エンジンのブックへの同期 · tts.py ナレーションとワードタイム · eleven.py ElevenLabsからの同機能(有料) · level.py ラウドネス均一化 · lint.py 静的チェック · check.py ChromiumとFirefoxでのページエラー、コンソール警告、ビート長 · shot.py ビートスクリーンショット · strip.py ストーリーボードシートとモーションストリップ · still.py 動きのないストレッチ · playlog.py 画像に対する音とキャプション · perf.py Firefoxフレームタイム · export.py MP4と.srt · sfx.py 合成効果音
レッスンoutline.pyとsplit_pages.py ページマップと章テキスト · check_blank.py 空の開始 · overlap.py テキストを通る矢印 · sprites.py 画像処理ステップ · refs.py 検証済み引用 · items.py 問題バンク · scorm.py LMSパッケージ
絵本mouths.py 口の形 · join.py シーンごとに1クリップ · bake_sets.py セットレイヤー · bake_puppets.py 人形ビットマップ · paint.py / paint_openai.py 画像モデル画像 · painted.py それらをブックに配置 · lift.py スキャンされたブックの画像から切り出した図形、セット、レタリング · cutout.py キーカラー上の画像モデル画像を人形パーツと小道具に切り抜き
探索ページtopo.py Natural Earthからの地図TopoJSON · explore.py 探索可能地図のチェック、ショット、Firefoxタイミング、ナレーションファイル
フィルムcommons.py パブリックドメイン画像と録音、そのライセンス · prep.py プリント、ライン、フルブリード処理 · trace.py 自己描画図形 · video.py 静止画からのクリップ · frames.py 処理済みフレームとしてのクリップ · geo.py Natural Earthからのマップキットデータ · music.py フィルムに合わせてカットされたトラック、声の隙間のベッド、各ラインに対する音楽・ベッド・効果音 · safe.py 縦型フィルムの安全領域外の単語

silence.py、ledger.py(単一のコスト台帳:日付、章、ファイル、モデル、内容、コスト)、browsers.pyは他のスクリプトがインポートするヘルパーです。

コンテキスト

  • メインの会話からユーザーと対話します:インテーク、およびパイロットのすべてのシートと選択。サブエージェントが利用可能な場合、章はチームとして作成され、各ステップはユーザーが選択したモデルで実行され、メインの会話がパイロットのコーディネーターとなります(core/team.md にその許可内容が記載されています)。サブエージェントがない場合は、現在のエージェントで同じステップをファイルベースの状態で実行します。
  • エンジンAPIを使用し、必要に応じて個々の関数を検査します。キットファイルは、完全なソースを指示として読み込むのではなく、コピーします。
  • style.jsonは最新かつ簡潔に保ちます。章の状態、正誤表、履歴フィードバックはchapters.mdとchapters/chNN.mdに保持します。

関連スキル