Kitsuで新しいショーやシーンを作るのにフォームをクリックして回り、アセットリストを作り直し、アーティストを1人ずつ割り当てる必要があるなら、オンボーディングは不足しています。
こうした手作業のオーバーヘッドは、すぐに積み上がります。制作が変わるたびに同じセットアップ儀式が繰り返され、クルーのオンボーディングはコピペ合戦になり、各ステップごとに何かが壊れる別のチャンスが増えていきます。スタジオ規模では、この摩擦が本当の時間・本当の金銭・本当の正気をコストとして奪います。
最も速いスタジオは、Kitsuを単に使うだけではありません。パイプラインに組み込みます。制作データベースのように扱い、新しいショー、ショット、または部署が“日”ではなく“分”でオンラインになれるよう、クリーンで構造化されたスタジオデータを投入します。パイプラインは複製され、チームは自動的に紐づけられ、Kitsuはボトルネックではなくエンジンになります。
この記事では、CSVファイルとKitsuのPython API(Gazu)を使って、まさにそれを実現するための実務的で制作実証済みのワークフローを分解していきます。制作オンボーディングのセットアップ作業を“消す”ために、どのように自動化するかを説明します。
このガイドで紹介している例の統合の完全なソースコードは、GitHubで確認できます:
🔗 https://github.com/cgwire/blog-tutorials/tree/main/import-spreadsheet-to-kitsu
インポートできるもの
実際の制作では、データの大部分がいくつかの繰り返しパターンに分類され、どれも自動化に向いています:
- アーティスト - あなたのクルーはどこか別の場所にすでに存在しています。HRシート、給与計算のエクスポート、Notionのテーブルなどです。そこには通常、Animator、TD、Supervisorのような役割とともに、名前やメールアドレスが含まれています。Kitsuでユーザーを手作業で再作成する代わりに、そのリストを1回のパスでインポートすれば、1日目の前にチームを準備できます。
- アセット - キャラクター、プロップ、環境……命名規則に従うものなら、簡単に自動化できます。
CHAR_RobotA、PROP_Sword_01、ENV_CityBlockのようなエントリが入ったCSVは、数秒でKitsu内の完全にセットされたアセットリストへと変換でき、パイプラインが期待するのとまったく同じ形に整理されます。 - タスク - タスクもまた、手作業のセットアップが特に痛む領域です。モデリング、リギング、サーフェシング、アニメーション……こうしたタスクタイプは、ショーごとに頻繁に変わることはありません。タスクを一括でインポートすれば、すべてのアセットに適切なタスクリスト(スタック)を自動的に紐づけたり、UIで何百行もクリックする代わりに、アーティストや部署を事前に割り当てたりできます。
基本を超えて、Kitsuが理解するあらゆる制作向けデータをインポートできます。シーケンス、ショット、エピソード、さらには“制作全体”までも可能です。これにより、過去のショーの構造をそのまま複製したり、同じレイアウトと命名規則で新しいシーズンを立ち上げたりするのが簡単になります。
ほとんどのスタジオは、すでにこれらをスプレッドシートに保存しています。そのスプレッドシートをデータソースとして扱い、Kitsuへ直接投入し、自動化にセットアップ作業を任せましょう。
KitsuのUIは基本的なスプレッドシートのインポートに対応していますが、スクリプトはそれをはるかに超えます。KitsuのPython API(Gazu)なら、Notionからタスクを同期する、アセットトラッカーをミラーする、スケジュールが変わったらタスクリストを再生成する、といった一連の自動化をつなげられます。

1. CSVパーサー
最初のステップは、スタジオデータの読み取り方を標準化することです。CSVは理想的です。制作側が編集しやすく、スクリプト側が解析しやすいからです。
このチュートリアルではシンプルさのためにアーティストのデータモデルに焦点を当てますが、Googleドライブに保存したアセットや、Trelloのタスクでも同様のことができます。
def load_csv(file_path: Path) -> pd.DataFrame: """Load a CSV file into a pandas DataFrame.""" return pd.read_csv(file_path)
def parse_artists(df: pd.DataFrame) -> ListDict: """ Expected columns: - email - first_name - last_name - role """ return df.to_dict(orient="records")
load_csvは、生のCSVファイルをPythonが扱える形に変える入口です。pandasを使ってディスクからファイルを読み取り、DataFrameを返します。これにより、Kitsuへ送信する前にフィルタリング、検証、変換が可能な、構造化された“表のような表現”になります。
parse_artistsは、アーティストデータを表すDataFrameを受け取り、各行をアーティストのメール、名前、役割を含む辞書へと変換します。これらの辞書のリストを返すことで、KitsuまたはGazuに直接渡してユーザーを一括で作成できる、API向けのデータが生成されます。アーティストを1人ずつ追加する必要はありません。
たとえば、Google SheetsからクルーリストをエクスポートするTVアニメ制作スタジオなら、それを単にCSVとして保存すれば済みます。制作はデータの管理を保持しつつ、TDは各ショーごとにフォーマット変更を依頼されることなく取り込みを自動化できます。
2. Kitsu認証
何かをアップロードする前に、Kitsuインスタンスに対して認証する必要があります:
gazu.set_host("http://localhost/api")
user = gazu.log_in("admin@example.com", "mysecretpassword")
実際には、スタジオは自動化のために専用のパイプラインアカウントまたは管理者アカウントを使うことがよくあります。これにより権限の問題を避けられ、スクリプトがデータを作成・変更するときも監査ログをきれいに保てます。
ローカルでのテスト用には、「kitsu-docker」のインストールを使うのがおすすめです。
3. データの読み込み
オンボーディング時に、アーティストは通常最初のボトルネックになります。メールを集めて招待を送り、タスクへ割り当てる必要があります……それらの作成を自動化すれば、制作コーディネーターが手作業で費やす何時間もの作業を削減できます。
def upload_artists(artists: ListDict): """ Create artists if they do not already exist. """ existing_users = { user"email": user for user in gazu.person.all_persons() }for artist in artists: if artist["email"] in existing_users: print(f"Artist exists: {artist['email']}") continue gazu.person.new_person( artist["first_name"], artist["last_name"], artist["email"], ) print(f"Created artist: {artist['email']}")
この関数は、アーティストの辞書リストを受け取り、重複を避けながらKitsuへ同期します。
まずKitsuに対して既存ユーザーをすべて問い合わせ、メールをキーにしたルックアップテーブルを作成します。これにより、アーティストがすでに存在するかを高速に確認できます。
次に、入力されたアーティストデータを順に処理し、各エントリについてメールをルックアップと照合します。マッチが見つかればスクリプトは作成をスキップし、そのアーティストがすでに存在することをログに記録します。マッチが見つからなければ、Gazu APIを使ってアーティストの名前とメールからKitsuに新しいユーザーを作成し、確認メッセージを出力します。
この結果、再実行しても安全な“冪等(べきとう)”なインポートステップになります。新しいアーティストは追加され、既存のアーティストはそのまま変更されません。
長尺映画の立ち上げ段階では、制作側がHRデータから数百人のアーティストを1分もかからずにインポートできるでしょう。遅れて参加するスタッフは、CSVを更新してスクリプトを再実行するだけで追加でき、ユーザーの重複や手作業の確認は不要になります。
4. すべてをつなぐ
メインの入口では、すべてをひとまとめにします:
if name == "main": gazu.set_host("http://localhost/api") user = gazu.log_in("admin@example.com", "mysecretpassword")artists_df = load_csv(Path("artists.csv")) artists = parse_artists(artists_df) upload_artists(artists)
このブロックは、ファイルが直接実行されたときにのみ動作します。別のモジュールにインポートされた場合は動きません。
認証後、artists.csvをpandasのDataFrameに読み込み、parse_artistsでそれらの行をアーティスト辞書のリストへ変換し、名前によってKitsu内の既存の制作を取得します。
最後に、準備されたデータを反復してKitsuでアーティストアカウントを作成する役割を担うupload_artistsを呼び出します。UIの手作業なしで、制作オンボーディングの自動化ステップが完了します。
実際には、スタジオはこれらのスクリプトをパイプラインのツールと一緒にバージョン管理します。新しいショーはチェックリストではなく、再現可能なコマンドになります。
これで、Kitsuのダッシュボードにログインし、最終結果を確認できます:

対応するGithubリポジトリをご覧ください。ニーズに合わせて簡単にフォークして使える、動く例があります!
結論
最良の形では、Kitsuの自動化によってテクニカルディレクターが、制作が生まれるプロセスの主導権を取り戻せます。パイプラインがクリーンなデータから自分自身を生成できるなら、オンボーディングは“面倒な作業”でなくなります。アーティスト、アセット、タスクをKitsuに直接インポートすることで、冗長な作業を排除し、人為的なミスを減らし、制作オンボーディングを予測可能にします。このアプローチは、小規模チームから複数ショーを抱えるスタジオまでスケールします。
インポートパイプラインをさらに面白くするために、追加できる機能は次のとおりです:
- 役割に基づいてタスクをアーティストへ自動割り当てする
- 制作管理のために部署を入力する
- 予算の制約にもとづいて、初期見積と各部署のカレンダーを生成する
- スクリプトを各ショットのブレイクダウンリストに変換し、それを使ってアセットを事前生成する
このリストはまだ続けられますが、とにかく小さく始めてみてください!


