空のキューと出力予定を確認して2状態を書き出す練習
2026年10月3日確認:最初はDRY_RUN = trueで出力予定だけを表示します。
所有の練習コピーでPracticeSwitchコンポにヌルCtrlを置き、チェックボックス制御のエフェクト名をToggleにします。
チェックはキー・式のない0/1にし、元の状態を記録してください。
1秒程度のPracticeRenderコンポに色付きソリッドを置き、不透明度へ下の式を設定します。
チェックOFFで0、ONで100になることを手動で確認してから書き出しへ進みます。
練習用のレンダリング項目で設定を確認し、レンダリング設定をPractice Render、MOVを出力する出力モジュール設定をPractice MOVという名前で保存します。
テンプレートを手動で作るには、「編集」→「テンプレート」→「レンダリング設定」を開きます。
「新規」で練習用のレンダリング設定を指定して「OK」を選び、名前をPractice Renderにします。
続いて「編集」→「テンプレート」→「出力モジュール」の「新規」で、下記のQuickTime・Apple ProRes 422・RGBを設定します。
「OK」を選び、テンプレート名をPractice MOVにします。
このメニュー手順はAdobeのテンプレート作成資料で2026年10月26日に確認し、今回は実機で試していません。
テンプレート保存に使った練習項目をキューから外し、既存の本番項目を含めず空のキューで試してください。
2026年10月16日の確認では、レンダリング設定の「最良設定」と出力モジュールの「高品質」をもとに、Practice RenderとPractice MOVを保存しました。
Practice MOVの形式はQuickTime、形式オプションはApple ProRes 422、チャンネルはRGBです。
テンプレートの保存はスクリプトで行い、設定の中身を画面で確かめました。

下のコードをrender-toggle.jsxとしてUTF-8で保存し、プロジェクトパネルでPracticeRenderだけを選択して実行します。
出力先には既存の空フォルダを選び、OFF.movとON.movの2つの予定、選択数、テンプレート名を確認します。
初期状態ではチェック変更・キュー追加・レンダリングを行いません。
所有の練習コピーで設定を確認した後、DRY_RUN = falseへ変更して実行する手順です。
OFFの処理完了を待ち、完了状態を確認してからONを開始します。
2つの状態を同時にキューへ積むと、共通チェックの値を最後の状態で評価するため、順番を分けます。
既存項目があるキュー、複数の同名制御、キーや式のあるチェック、空でないフォルダ、同名出力がある場合は開始しません。
テンプレート不在・途中停止・レンダリングエラーの場合は次の状態へ進まず、作ったキュー項目だけを外し、元のチェック値へ戻す処理を試みます。
復元自体が失敗した場合はその内容を表示するので、元の値と空キューを手動で照合してください。
出力ファイルには連番を付け、日本語などのコンポ名はファイル名部分をアンダースコアへ置き換えます。
テンプレートをMOV以外にした場合の拡張子変更や連番画像の出力には、この例をそのまま使わないでください。
書き出された映像や途中のファイルはCtrl+Zでは消えません。
OFF/ONの映像内容、ファイルの再生、元のチェック状態、キューを確認し、途中ファイルは確認用に残してください。
コードはJavaScriptの構文・模擬APIと保存したAPI資料で確認しています。
2026年10月13日にAfter Effects 26.5.0で撮影した画面で、チェックのオン・オフによる矩形の表示の切り替えと、2本のH.264書き出しの完了を確認しました。
ただし、この画面は記事のスクリプトの実行結果として確認したものではありません。
記事のスクリプトをAfter Effectsで実行した結果は、スクリプトの下の「After Effects 26.5で記事のスクリプトを実行した結果(2026年10月16日)」にまとめています。
| 入力・条件 | 操作・結果 | 確認する点 |
|---|---|---|
| DRY_RUN = true | 予定表示のみ | チェック・キューを変更しない |
| DRY_RUN = false | OFF完了後にON | 既存キューは拒否 |
| 途中失敗・復元 | 次の状態へ進まない | 元のチェックとキューを照合 |
仕様の照合には、コミュニティで保守されているRenderQueue API参照、RenderQueueItem API参照、OutputModule API参照を参照しました。
2026年10月3日:出力予定の確認、空キュー、OFF完了後のON実行、元のチェック状態への復元を含む例へ改修しました。
チェックボックス制御の切り替えに合わせて複数パターンをレンダリングする方法をまとめました。
スクリプトでチェック状態を切り替えながら、レンダリングキューの処理を自動化します。
例えば、チェックボックス制御で切り替えたいレイヤーの不透明度に、下記のエクスプレッションを設定します。
comp("PracticeSwitch").layer("Ctrl").effect("Toggle")(1) == 1 ? 100 : 0;
これでチェックボックスのオン・オフに応じて表示を切り替えられます。
手動で切り替えずに2パターンの書き出しを一括で実行するため、スクリプトを作成しました。
チェックのオンとオフで、表示がどう変わるかを撮影しました。
2026年10月13日にAfter Effects 26.5.0(日本語表示)で撮影した画面です。
レイヤー「CheckboxController17852」のエフェクト「ShowBox」で、「チェックボックス」にチェックを入れると、オレンジの矩形([OptionalBox17852])が表示されました。

チェックを外すと、矩形は表示されず、背景だけになりました。

この画面は、本文のPracticeSwitch・Ctrl・Toggleとは名前が違います。
コンポジションは、チェックありの「CheckboxOn17852」と、チェックなしの「CheckboxOff17852」の2つです。
チェックボックスを切り替えて2通りレンダリングするスクリプト
(function () {
var DRY_RUN = true; // First check the plan. Set false only in your practice copy.
var RENDER_TEMPLATE = "Practice Render", OUTPUT_TEMPLATE = "Practice MOV";
var project = app.project;
if (!project) { alert("Open a practice project."); return; }
var queue = project.renderQueue, comps = [], files = [], created = [], i, j;
if (queue.rendering || queue.numItems !== 0) { alert("Use an empty, idle render queue."); return; }
if (!project.selection.length || project.selection.length > 5) { alert("Select 1 to 5 compositions in the Project panel."); return; }
for (i = 0; i < project.selection.length; i++) {
if (!(project.selection[i] instanceof CompItem)) { alert("Select compositions only."); return; }
comps.push(project.selection[i]);
}
var controlComp = null, controlLayer = null, effect = null, matches = 0;
for (i = 1; i <= project.numItems; i++) {
var item = project.item(i);
if (item instanceof CompItem && item.name === "PracticeSwitch") { controlComp = item; matches++; }
}
if (matches !== 1) { alert("Use exactly one PracticeSwitch comp."); return; }
matches = 0;
for (i = 1; i <= controlComp.numLayers; i++) {
if (controlComp.layer(i).name === "Ctrl") { controlLayer = controlComp.layer(i); matches++; }
}
if (matches !== 1 || controlLayer.locked) { alert("Use one unlocked Ctrl layer."); return; }
var effects = controlLayer.property("ADBE Effect Parade"); matches = 0;
if (effects) {
for (i = 1; i <= effects.numProperties; i++) {
if (effects.property(i).name === "Toggle") { effect = effects.property(i); matches++; }
}
}
if (matches !== 1 || effect.matchName !== "ADBE Checkbox Control") { alert("Use one Toggle Checkbox Control."); return; }
var checkbox = effect.property("ADBE Checkbox Control-0001");
if (!checkbox || checkbox.numKeys !== 0 || checkbox.expression !== "" || (checkbox.value !== 0 && checkbox.value !== 1)) {
alert("Use a static 0/1 checkbox without an expression."); return;
}
var folder = Folder.selectDialog("Choose an existing empty practice output folder");
if (!folder) { return; }
if (!folder.exists || folder.getFiles().length !== 0) { alert("Choose an empty folder."); return; }
var plan = [];
for (i = 0; i < comps.length; i++) {
var stem = (i + 1) + "_" + comps[i].name.replace(/[^A-Za-z0-9_-]/g, "_");
files[i] = [new File(folder.fsName + "/" + stem + "_OFF.mov"), new File(folder.fsName + "/" + stem + "_ON.mov")];
for (j = 0; j < 2; j++) {
if (files[i][j].exists) { alert("Output already exists."); return; }
plan.push(files[i][j].fsName);
}
}
if (DRY_RUN) {
alert("Plan only: no checkbox change, queue addition or render.\nTemplates: " + RENDER_TEMPLATE + " / " + OUTPUT_TEMPLATE + "\n" + plan.join("\n")); return;
}
if (queue.rendering || queue.numItems !== 0) { alert("Queue changed. Stop and review."); return; }
var original = checkbox.value, cleanupErrors = [], completed = 0;
function contains(values, target) {
for (var k = 0; k < values.length; k++) { if (values[k] === target) { return true; } }
return false;
}
function removeCreated() {
for (var k = created.length - 1; k >= 0; k--) {
try { created[k].remove(); } catch (error) { cleanupErrors.push(error.toString()); }
}
created = [];
}
try {
for (j = 0; j < 2; j++) {
checkbox.setValue(j);
for (i = 0; i < comps.length; i++) {
if (files[i][j].exists) { throw new Error("Output appeared; refusing overwrite."); }
var rq = queue.items.add(comps[i]); created.push(rq);
var om = rq.outputModule(1);
if (!contains(rq.templates, RENDER_TEMPLATE) || !contains(om.templates, OUTPUT_TEMPLATE)) {
throw new Error("Save the named render and MOV output templates first.");
}
rq.applyTemplate(RENDER_TEMPLATE); om.applyTemplate(OUTPUT_TEMPLATE);
om = rq.outputModule(1); om.file = files[i][j]; rq.render = true;
}
// render() returns after the queue finishes. Do not queue both states together.
queue.render();
for (i = 0; i < created.length; i++) {
if (created[i].status !== RQItemStatus.DONE) { throw new Error("Render stopped or failed; do not start the next state."); }
}
completed++; removeCreated();
if (cleanupErrors.length) { throw new Error("Queue cleanup failed; inspect the queue."); }
}
} catch (error) { alert("Stopped: " + error.toString() + "\nInspect and keep any partial practice output."); }
finally {
try { checkbox.setValue(original); } catch (error) { cleanupErrors.push("Checkbox restore: " + error.toString()); }
removeCreated();
if (cleanupErrors.length) { alert("Manual restoration needed:\n" + cleanupErrors.join("\n")); }
}
alert("Completed states: " + completed + " of 2. Check both files and the restored checkbox. Rendered files cannot be undone with Ctrl+Z.");
})();
参考:http://compojigoku.blog.fc2.com/blog-entry-18.html
After Effectsのほかの操作は、まとめからご覧いただけます。

旧実装の参考コードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。
レンダリングや書き出しを速くする方法は、ほかにもまとめています。




2つの状態の書き出し結果です。
レンダーキューには、CheckboxOff17852とCheckboxOn17852の2項目が並び、ステータスはどちらも「完了」でした。
レンダリング設定は「最良設定」、出力モジュールは「H.264」で、出力先はCheckboxOff17852.mp4とCheckboxOn17852.mp4、レンダリング時間はどちらも2秒でした。

この2本を読み込んで並べたコンポジション(RenderedVariants17852)では、オレンジの矩形が写っているのは、片方の動画だけでした。
画面の書き出しはH.264のmp4で、本文のスクリプトが使うMOV出力のテンプレート「Practice MOV」とは違います。
この画面だけでは、記事のスクリプトの動作は確認できません。
記事のスクリプトで確かめた結果は、次のとおりです。
After Effects 26.5で記事のスクリプトを実行した結果(2026年10月16日)
Windows 11 Pro(10.0.26200)のAfter Effects 26.5.0(Build 89、日本語表示)で確かめました。
PracticeRenderは640×360、24fps、1秒で、青い背景の上にオレンジの四角を置き、四角の不透明度に記事の式を付けました。
PracticeSwitchのCtrlにあるToggleは、キーと式のない、オンの状態から始めました。
練習用のプロジェクトとコンポジションの準備は、スクリプトで行いました。
まず、記事のコードを書き換えずに、DRY_RUN = trueのまま実行し、出力先の空フォルダを画面のダイアログで選びました。
通知には「Plan only: no checkbox change, queue addition or render.」と、2つのテンプレート名、1_PracticeRender_OFF.movと1_PracticeRender_ON.movの保存先が表示されました。
実行の前後で、出力先のフォルダは空のまま、チェックはオン、レンダーキューは0件で、不透明度の式や値も変わりませんでした。
次に、DRY_RUNだけをfalseに変えたコピーを実行し、別の空フォルダを選びました。
コードはOFFの書き出しが終わってからONを始める作りで、通知には「Completed states: 2 of 2.」と表示されました。

書き出された2本は、どちらもQuickTimeのApple ProRes 422で、640×360、24fps、1秒(24フレーム)でした。
全フレームを取り出して調べると、OFFは24フレームとも青い背景だけで、ONは24フレームとも中央にオレンジの四角がありました。
ProResは圧縮するため、画素が完全に同じとは言えませんが、After Effectsでコンポジションの1フレームを保存した見本の画像との色の差は、各色255段階のうち最大3でした。

書き出しのあと、チェックは実行前と同じオンで、レンダーキューは0件に戻っていました。
ただし、元の値がオンで、最後に書き出す状態もオンなので、元の値へ戻す処理が働いたかどうかは、この確認では見分けられません。
保存したプロジェクトを開き直しても、チェック、レンダーキュー、不透明度、書き出した2本の読み込みは同じでした。
スクリプトはコマンドから実行したため、「ファイル」メニューから実行する操作は確認に含めていません。
コンポジションを2つ以上選んだとき、アニメーションや音声のある素材、長い尺は、確かめていません。
テンプレートが無いとき、空でないフォルダ、制御の名前の重複、キーや式のあるチェック、途中の停止やレンダリングエラー、元の値へ戻せなかったときの動きも、確かめていません。
Ctrl+Zでの取り消し、Mac、ほかのバージョン、MOV以外の形式も、確かめていません。
よくある質問:After Effectsでチェックボックスを切り替えて2通りレンダリングするとき
チェックボックスの切り替えで、2通りのレンダリングを自動でできますか?
スクリプトでチェック状態を切り替えながら、レンダリングキューの処理を自動化できます。チェックボックス制御で切り替えたいレイヤーの不透明度に、記事のエクスプレッションを設定すると、チェックボックスのオン・オフに応じて表示を切り替えられます。
最初に、何を試せばよいですか?
最初はDRY_RUNをtrueにして、出力予定だけを表示します。所有の練習コピーで、PracticeSwitchコンポにヌルCtrlを置き、チェックボックス制御のエフェクト名をToggleにします。チェックはキー・式のない0/1にし、元の状態を記録してください。チェックOFFで0、ONで100になることを手動で確認してから書き出しへ進みます。
練習の準備として、何を用意しますか?
1秒程度のPracticeRenderコンポに色付きソリッドを置き、不透明度へ記事の式を設定します。レンダリング設定をPractice Render、MOVを出力する出力モジュール設定をPractice MOVという名前で保存し、テンプレート保存に使った練習項目をキューから外して、既存の本番項目を含めず空のキューで試してください。
スクリプトは、どう実行しますか?
記事のコードをrender-toggle.jsxとしてUTF-8で保存し、プロジェクトパネルでPracticeRenderだけを選択して実行します。出力先には既存の空フォルダを選び、OFF.movとON.movの2つの予定、選択数、テンプレート名を確認します。初期状態ではチェック変更・キュー追加・レンダリングを行いません。確認後、DRY_RUNをfalseへ変更して実行します。
OFFとONを、同時にキューへ積んでもよいですか?
積まないでください。2つの状態を同時にキューへ積むと、共通チェックの値を最後の状態で評価するため、順番を分けます。記事のスクリプトは、OFFの処理完了を待ち、完了状態を確認してからONを開始します。
スクリプトが開始しないのは、なぜですか?
既存項目があるキュー、複数の同名制御、キーや式のあるチェック、空でないフォルダ、同名出力がある場合は開始しません。空のキューと空のフォルダで試してください。
2026年10月16日に、レンダーキューに練習用の項目を1件残したまま記事のコードを実行すると、「Use an empty, idle render queue.」と表示されて止まりました。
残した項目、チェックの値、不透明度の式は、実行の前後で変わりませんでした。
項目を1件残す準備は、スクリプトで行いました。
ほかの止まる条件は、確かめていません。

途中で失敗したときは、どうなりますか?
テンプレート不在・途中停止・レンダリングエラーの場合は、次の状態へ進まず、作ったキュー項目だけを外し、元のチェック値へ戻す処理を試みます。復元自体が失敗した場合はその内容を表示するので、元の値と空キューを手動で照合してください。書き出された映像や途中のファイルはCtrl+Zでは消えません。
このスクリプトは、実機で確認済みですか?
2026年10月16日に、Windows 11 Pro(10.0.26200)のAfter Effects 26.5.0(Build 89、日本語表示)で、記事のコードを実行して確かめました。
DRY_RUN = trueでは予定だけが表示され、チェック、レンダーキュー、出力先のフォルダは変わりませんでした。
DRY_RUNだけをfalseにしたコピーでは、OFFとONの2本が書き出され、四角はONの映像にだけ写っていました。
書き出しのあと、チェックはオン、レンダーキューは0件でした。
確かめたのは、コンポジション1つ、静止したソリッド、1秒、ProRes 422のMOVの場合です。
途中で失敗したときの動き、Ctrl+Zでの取り消し、Mac、ほかのバージョン、メニューからの実行は、確かめていません。
出力ファイルには連番を付け、日本語などのコンポ名はファイル名部分をアンダースコアへ置き換えます。
テンプレートをMOV以外にした場合の拡張子変更や連番画像の出力には、この例をそのまま使わないでください。
