Lightroomの書き出し後処理でNode.jsを使う方法やshebang の書き方について

Lightroomの出力設定である「書き出し設定」では、画像透かし処理やリサイズなどの設定を行う事ができます。ただ、この項目で設定できる範囲外のことを行おうとすると、なかなか自由度が少ないのがデメリットです。

develop or drink ?
 develop or drink ?  photo by tea ©

そこで、今回はLightroomからNode.jsを使って、独自の処理を行う手順を調べてみました。手順は簡単にまとめると次の通りです。

  1. コードを書く
  2. コード先頭にシェバンを書く
  3. LightroomのExport Actionフォルダーにコピー
  4. スクリプトのパーミッションを変更
  5. Lightroomの書き出し設定でスクリプトを選択
  6. Lightroomから画像書き出し、スクリプトを実行させる

当記事では、上記2〜5の手順を詳しく見ていきたいと思います。

Ads

目次

LightroomからNode.jsを使うにはシェバンを理解する

ライトルームからNode.jsなどのスクリプトを実行するには、プログラムをインタープリターで呼び出す必要があるようです。その具体的方法としては、プログラムにシェバン(shebang)を一行目に記述します。

シェバンは実行するプログラムの場所を示す#!で始まるファイルパスの事です。

例えば、今回のようにnode.jsを使う場合には$ which nodeコマンドで、nodeのファイルパスを予め調べておきます。

bash
1
2
$ which node
/Users/****/.nvm/versions/node/v4.3.0/bin/node

続いて、下記のようにwhichコマンドで取得したパスをnode.jsのコードの一行目に、記述していきます。

index.js
1
2
#!/Users/****/.nvm/versions/node/v4.3.0/bin/node
console.log("Hello World !!");

なお注意点になりますが、Lightroomからは#!/usr/bin/env nodeという指定ができないので、nodeのパスを直接記述する必要があるようです。

Export Actionにコピーする

上記のコードが記述できたら、LightoomのExport Actionフォルダーにコピーします。

1
~/Library/Application Support/Adobe/Lightroom/Export Actions

スクリプトの実行権限(パーミッション)を変更する

続いて、コピーしたnode.jsのファイルのパーミッションを変更します。パーミッションの変更にはchmodコマンドを使います。

bash
1
2
3
4
$ cd ~/Library/Application Support/Adobe/Lightroom/Export Actions
$ chmod +x index.js
$ ./index.js
$ Hello World !!

パーミッションの変更後、index.jsを実行して結果が表示されれば準備完了です。

Lightroomの書き出しでindex.jsを設定

最後に、Lightroomの書き出し設定 > 後処理(Ctrl+Shift+E)の書き出し後ダイアログで作成したindex.jsを選択しておきます。

これで、Lightroomの画像書き出し後に、node.jsが処理されます。

Lightroomから渡ってきたファイルを取得する

Lightroomから渡ってきた画像のファイルパスを取得するには、process.argvを使います。

以下のコードでは、Lightroomから渡ってきたファイルパスをデスクトップに書き出す処理の例です。

index.js
1
2
3
4
5
6
7
8
9
10
11
12
#!/Users/****/.nvm/versions/node/v4.3.0/bin/node

var filePath = "";
var fs = require("fs");

for(var i=2; i<process.argv.length; i++){
filePath += ( i>2 ? "\n" : "" ) + process.argv[i];
}

fs.writeFile('/Users/xxxx/Desktop/lightroom-exported-iamge-path.txt', filePath , function (err) {
if(err) console.log(err);
});

このようなコードを応用して、画像処理などをされてみてはいかがでしょうか? ただ、Lightroomからshebangを呼び出す際、様々な制約があるのでMac OSXユーザーならばAutomatorから呼び出す方法のが良いかもしれないと思いました。

参考記事

下記の記事を参考にさせていただきました。

氾濫原
Lightroomでwebpの一発書きだし

Lightroomからnode.jsを使う方法が解説されている

iTest (サイテスト) ブログ
CLIに目覚めた!Node.jsで作るコマンドラインツール

Node.jsのシェバン指定方法や権限変更方法、スクリプトとして実行する方法が解説されている

Ads
Ads

Ads

プロフィール

gravatar
tea

ゆるふわポートレートや自然風景をのんびり撮影しています。その他の趣味は音楽制作とメダカの鑑賞。 詳細