PSDをコンポジションとして読み込み、そのレイヤー素材を読み込んだコンポと同じプロジェクト階層へ移すスクリプトです。
旧コードのキャンセル後の処理継続と、同名の既存フォルダを削除する処理を修正しました。
2026年10月15日、Windows 11 Pro・After Effects 26.5 Build 89で、2レイヤーのPSDの読み込み、同名の既存フォルダの保持、キャンセル、1回の取り消しを確認しました。
検証素材はPhotoshop 27.11.0で作った640×360px・RGB/8bitのPSDです。実案件では別名保存したプロジェクトから試し、レイヤー効果やマスクを含む素材は表示を個別に照合してください。
変更する範囲と読み込み形式
ImportAsType.COMPを指定し、PSDをコンポジションとして読み込みます。
レイヤーサイズを保持するCOMP_CROPPED_LAYERSとは異なります。
読み込み前の全アイテムIDと読み込み後のソースIDを比べ、今回追加された直接参照のFootageItemだけを移します。
Photoshopのレイヤーグループは入れ子のコンポジションとして読み込まれるため、このコードではグループ内の素材まで再帰的に取り出しません。
グループを含むPSDで素材が読み込みフォルダに残っても、成功メッセージの移動数だけで素材の欠落とは判断せず、入れ子のコンポを開いて内容を確認してください。
コードには既存アイテムの削除やPSDへの書き込みはありません。今回の実機検証では、同名の既存フォルダと、その中のコンポジションのID・親フォルダが変わらないことを確認しました。
読み込み時に作られたフォルダは、空になっても残します。
「レイヤー」フォルダを作らない設定ではありません。
| 操作 | 対象 | 結果 |
|---|---|---|
| ファイル選択をキャンセル | なし | 読み込みも整理もしない |
| PSD読み込みに成功 | 新規素材のみ | 読み込んだコンポと同じ階層へ移動 |
| 同名の既存フォルダがある | 既存アイテム | 削除・移動しない |
| 途中で失敗 | 今回の読み込み・移動 | 一部が残る場合あり。取り消して確認 |
修正版スクリプト
次のコードをUTF-8のテキストとしてimport-psd.jsxに保存します。
/* Import PSD as a composition; move only new direct footage sources. */
(function () {
var project = app.project;
if (!project) { alert("プロジェクトを開いてください。"); return; }
var file = File.openDialog("レイヤーを持つPSDを1つ選択してください");
if (!file) return;
if (!file.exists || !/\.psd$/i.test(file.name)) {
alert("存在する.psdファイルを選択してください。"); return;
}
var before = {}, options, imported, moved = 0;
try {
options = new ImportOptions(file);
if (!options.canImportAs(ImportAsType.COMP)) {
alert("このPSDをコンポジションとして読み込めません。標準の読み込みで確認してください。"); return;
}
options.importAs = ImportAsType.COMP;
options.sequence = false;
for (var i = 1; i <= project.numItems; i++) before["id_" + project.item(i).id] = true;
} catch (error) { alert("読み込み前の確認に失敗しました。\n" + error.toString()); return; }
app.beginUndoGroup("PSDをコンポジションとして読み込み");
try {
imported = project.importFile(options);
if (!(imported instanceof CompItem) || before["id_" + imported.id]) {
throw new Error("新規コンポジションを取得できませんでした。");
}
// Move only newly imported direct sources, identified by Item.id.
// Retain importer-created folders; never remove a project item.
var sources = [], seen = {};
for (var n = 1; n <= imported.numLayers; n++) {
var source = imported.layer(n).source;
if (!(source instanceof FootageItem)) continue;
var key = "id_" + source.id;
if (before[key] || seen[key]) continue;
seen[key] = true; sources.push(source);
}
for (var j = 0; j < sources.length; j++) {
sources[j].parentFolder = imported.parentFolder;
moved++;
}
alert("コンポジション「" + imported.name + "」を読み込み、新規素材" + moved + "個を同じ階層へ移しました。空のフォルダは残します。");
} catch (error) {
alert("処理が途中で止まりました。一部の読み込み・移動が残る場合があります。編集メニューで取り消して確認してください。\n" + error.toString());
} finally { app.endUndoGroup(); }
}());
2レイヤーのPSDで実行する手順
自作の練習用PSDに「赤い四角」と「青い四角」の2レイヤーを作り、保存します。
既存プロジェクトは番号を付けて別名保存してから使います。
practice.psdで既存素材の保護を確かめる場合は、あらかじめ「practice レイヤー」フォルダを作り、その中に既存コンポジションを置いて所在を記録します。フォルダ名は言語やPSD名で変わるため、標準読み込み時の名前に合わせてください。
After Effectsで「ファイル」→「スクリプト」→「スクリプトファイルを実行」を選び、import-psd.jsxを実行します。
ファイル選択で練習PSDを指定してください。
成功メッセージのコンポ名と新規素材数を確認し、読み込んだコンポを開きます。
2つの色とレイヤー数、新規素材の所在、既存フォルダ内の素材が維持されていることを照合します。
PSDの構成によって読み込み結果は異なるため、素材数を常に2個とは断定しません。
Windows実機で確認した結果
RedとBlueの2レイヤーを持つpractice.psdを読み込みました。成功メッセージは「新規素材2個」。コンポジションと2つの素材がルート階層に並び、読み込み時のフォルダは空のまま残りました。コンポを開くと赤と青の四角が表示され、タイムラインも2レイヤーでした。

| 確認項目 | 実測結果 |
|---|---|
| コンポと素材の寸法 | コンポもRed/Blueのソースも640×360px。各四角の160×160pxには切り詰められない |
| 既存フォルダの保護 | 同名フォルダが2個並ぶ。既存ID=1、内部コンポID=2・親ID=1を維持 |
| 追加される項目 | 2項目から6項目へ。コンポ1、素材2、空フォルダ1を追加 |
| 1回の取り消し | Ctrl+Zで元の2項目へ戻り、既存IDと親フォルダを維持 |
| ファイル選択のキャンセル | 掲載コードの選択ダイアログを閉じても2項目のまま |
同名フォルダが2個見えても、読み込み失敗ではありません。今回のコードは空フォルダを削除しない設計です。また、各レイヤーを絵の外周で切り詰めたい場合は、本稿のCOMP指定とは目的が異なります。
失敗時の切り分けと戻し方
PSD以外、存在しないファイル、コンポジション形式に対応しないPSDは読み込み前に中止します。
標準のファイル読み込みで同じPSDを開けるか確認してください。
レイヤーが1枚に統合される場合は、Photoshopの「イメージ」→「モード」で、PSDがRGBカラーまたはグレースケールになっているか確認してください。
AdobeのPSD読み込み資料では、CMYKやLabなどのPSDはレイヤーを分けたコンポジションではなく、統合画像として読み込まれると説明されています。
色モードを変更して試すときは元PSDを残し、複製を別名保存してから表示と色を照合してください。
成功後に「編集」メニューで直前の処理を1回取り消し、新規コンポ・素材・読み込みフォルダが戻り、既存素材が維持されているか確認します。
途中のエラーでは読み込みや移動が一部残る場合があります。
取り消した後も期待した状態にならなければ、保存した別名プロジェクトを開き直してください。
今回確認したのは、グループ・マスク・レイヤー効果のない2枚のピクセルレイヤーです。レイヤー効果、色管理の厳密な一致、マスク、PSD更新時の追従、別バージョン・macOSは未検証です。
途中で読み込みが失敗した場合の部分復元は今回再現していません。成功時に1回で取り消せた結果を、すべての失敗に一般化しないでください。
参考資料と関連記事
ImportOptions.importAs・canImportAs、Project.importFile、Item.id・parentFolderを参照しました。
資料確認日:2026年10月3日。
APIの参照先はコミュニティ管理のAfter Effects Scripting Guideです。
GitHubに残る旧実装は本稿の修正版と同期していません。
今回の練習では本稿のコードを使ってください。
関連記事
PSD読み込み、リンク修復、プロジェクト内の素材整理は目的が異なります。
旧GitHub実装は本稿の修正版と同期していません。





