SyntaxHighlighter

2013年10月11日金曜日

$gui handler 改

ネットにあったものをローカル環境に合わせた

set cut_paste_input [stack 0]
version 7.0 v5
push $cut_paste_input
NoOp {
 name dollarGuiHandler
 selected true
 xpos 0
 hide_input true
 addUserKnob {20 dollarGuiHandler l "\$gui handler"}
 addUserKnob {1 list -STARTLINE}
 addUserKnob {26 line l "" +STARTLINE}
 addUserKnob {22 addAllToList l "add all to list" T "for n in nuke.allNodes():\n    n.setSelected(False)\n\nfor n in nuke.allNodes():\n    if n.Class() == 'VectorBlur':\n        n.setSelected(True)\n    elif n.Class() == 'ZDefocus2':\n        n.setSelected(True)\n    else:\n        n.setSelected(False)\n        \nlist = nuke.thisNode()\['list'].value()\nprint list\n\nfor i in nuke.selectedNodes():\n    if i.name() in list:\n        pass\n    else:\n        list = list + i.name() + '\\n'\nnuke.thisNode()\['list'].setValue(list)\n\nfor n in nuke.allNodes():\n    n.setSelected(False)" +STARTLINE}
 addUserKnob {22 addToList l "add to list" -STARTLINE T "list = nuke.thisNode()\['list'].value()\nfor i in nuke.selectedNodes():\n    if i.name() in list:\n        pass\n    else:\n        list = list + i.name() + '\\n'\nnuke.thisNode()\['list'].setValue(list)"}
 addUserKnob {22 clearList l "clear list" -STARTLINE T "nuke.thisNode()\['list'].setValue('')"}
 addUserKnob {22 highlightList l "highlight List" -STARTLINE T "for n in nuke.allNodes():\n    n.setSelected(False)\nfor n in nuke.allNodes():\n    for nn in nuke.thisNode()\['list'].value().split('\\n'):\n        if n.name()==nn:\n            n.setSelected(True)"}
 addUserKnob {22 changeNodeColor l "change node color" -STARTLINE T "for n in nuke.allNodes():\n    n.setSelected(False)\nfor n in nuke.allNodes():\n    for nn in nuke.thisNode()\['list'].value().split('\\n'):\n        if n.name()==nn:\n            n.setSelected(True)      \nnukescripts.color_nodes()"}
 addUserKnob {22 setDollerGui l "set \$gui" T "for n in nuke.allNodes():\n    n.setSelected(False)\nfor n in nuke.allNodes():\n    for nn in nuke.thisNode()\['list'].value().split('\\n'):\n        if n.name()==nn:\n            n.setSelected(True)\n            nuke.selectedNode()\['disable'].setExpression('\$gui')\n            n.setSelected(False)\n    else:\n        n.setSelected(False)" +STARTLINE}
 addUserKnob {22 removeDollerGui l "remove \$gui" -STARTLINE T "for n in nuke.allNodes():\n    for nn in nuke.thisNode()\['list'].value().split('\\n'):\n        if n.name()==nn:\n            n.setSelected(True)\n            nuke.selectedNode()\['disable'].clearAnimated() \n            nuke.selectedNode()\['disable'].setValue(0)\n            n.setSelected(False)\n    else:\n        n.setSelected(False)"}
}

2013年9月11日水曜日

メモ_nuke

Guildarts Newsからのコピペ

[Nuke Tips] 特定のフレーム間でのみノードを無効にしたい場合 ノードのDisableの所にエクスプレッションをこんなかんじinrange(frame, 3, 15)
にかくとそのフレーム間でのみ無効になり、ノードに黒い線が一本引かれます。

[Nuke Tips] よくAEとかPhotoshopと全く同じレイヤーのブレンドモードができるかきかれるのですが UpdateからPSDMerge node 使うとできます。

2013年7月11日木曜日

outRangeHandler

set cut_paste_input [stack 0]
version 7.0 v5
StickyNote {
 inputs 0
 name StickyNote1
 label outRangeHandler
 note_font "Helvetica Bold Bold Bold Bold Bold Bold Bold Bold Bold"
 note_font_size 12
 note_font_color 0xff
 selected true
 xpos -29
 ypos -248
 addUserKnob {20 User l outRangeHandler}
 addUserKnob {1 list}
 addUserKnob {26 line l "" +STARTLINE}
 addUserKnob {22 addAllToList l "add all to list" T "for n in nuke.allNodes():\n    n.setSelected(False)\nfor n in nuke.allNodes('Read'):\n    n.setSelected(True)\nlist = nuke.thisNode()\['list'].value()\nfor i in nuke.selectedNodes():\n    if i.name() in list:\n        pass\n    else:\n        list = list + i.name() + '\\n'\nnuke.thisNode()\['list'].setValue(list)\nfor n in nuke.allNodes('Read'):\n    n.setSelected(False)" +STARTLINE}
 addUserKnob {22 addToList l "add to list" T "list = nuke.thisNode()\['list'].value()\nfor i in nuke.selectedNodes():\n    if i.name() in list:\n        pass\n    else:\n        list = list + i.name() + '\\n'\nnuke.thisNode()\['list'].setValue(list)" +STARTLINE}
 addUserKnob {22 clearList l "clear list" -STARTLINE T "nuke.thisNode()\['list'].setValue('')"}
 addUserKnob {22 highlightList l "highlight list" -STARTLINE T "for n in nuke.allNodes():\n    if n.name() in nuke.thisNode()\['list'].value():\n        n.setSelected(True)\n    else:\n        n.setSelected(False)"}
 addUserKnob {22 changeNodeColor l "change node color" -STARTLINE T "for n in nuke.allNodes():\n    if n.name() in nuke.thisNode()\['list'].value():\n        n.setSelected(True)\n    else:\n        n.setSelected(False)        \nnukescripts.color_nodes()"}
 addUserKnob {6 beforeIO l before +STARTLINE}
 addUserKnob {4 choiceBeforeMethod l "" -STARTLINE M {hold loop bounce black "" "" "" ""}}
 choiceBeforeMethod black
 addUserKnob {6 afterIO l after -STARTLINE}
 addUserKnob {4 choiceAfterMethod l "" -STARTLINE M {hold loop bounce black ""}}
 choiceAfterMethod black
 addUserKnob {22 setOutRangeType l "set out range type" -STARTLINE T "befIO = nuke.thisNode()\['beforeIO'].value()\nprint befIO\n\nif befIO == True:\n\tbeforeMeth = nuke.thisNode()\['choiceBeforeMethod'].value()\n\tif beforeMeth == \"hold\":\n\t\tbeforeMeth = 0\n\t\tprint beforeMeth\n\t\tfor n in nuke.allNodes():\n    \t\t\tif n.name() in nuke.thisNode()\['list'].value():\n        \t\t\tn\['before'].setValue(beforeMeth)\n\telif beforeMeth == \"loop\":\n\t\tbeforeMeth = 1\n\t\tprint beforeMeth\n\t\tfor n in nuke.allNodes():\n    \t\t\tif n.name() in nuke.thisNode()\['list'].value():\n        \t\t\tn\['before'].setValue(beforeMeth)\n\telif beforeMeth == \"bounce\":\n\t\tbeforeMeth = 2\n\t\tprint beforeMeth\n\t\tfor n in nuke.allNodes():\n    \t\t\tif n.name() in nuke.thisNode()\['list'].value():\n        \t\t\tn\['before'].setValue(beforeMeth)\n\telif beforeMeth == \"black\":\n\t\tbeforeMeth = 3\n\t\tprint beforeMeth\n\t\tfor n in nuke.allNodes():\n    \t\t\tif n.name() in nuke.thisNode()\['list'].value():\n        \t\t\tn\['before'].setValue(beforeMeth)\n\nafIO = nuke.thisNode()\['afterIO'].value()\nprint afIO\n\nif afIO == True:\n\tafterMeth = nuke.thisNode()\['choiceAfterMethod'].value()\n\tif afterMeth == \"hold\":\n\t\tafterMeth = 0\n\t\tprint afterMeth\n\t\tfor n in nuke.allNodes():\n    \t\t\tif n.name() in nuke.thisNode()\['list'].value():\n        \t\t\tn\['after'].setValue(afterMeth)\n\telif afterMeth == \"loop\":\n\t\tafterMeth = 1\n\t\tprint afterMeth\n\t\tfor n in nuke.allNodes():\n    \t\t\tif n.name() in nuke.thisNode()\['list'].value():\n        \t\t\tn\['after'].setValue(afterMeth)\n\telif afterMeth == \"bounce\":\n\t\tafterMeth = 2\n\t\tprint afterMeth\n\t\tfor n in nuke.allNodes():\n    \t\t\tif n.name() in nuke.thisNode()\['list'].value():\n        \t\t\tn\['after'].setValue(afterMeth)\n\telif afterMeth == \"black\":\n\t\tafterMeth = 3\n\t\tprint afterMeth\n\t\tfor n in nuke.allNodes():\n    \t\t\tif n.name() in nuke.thisNode()\['list'].value():\n        \t\t\tn\['after'].setValue(afterMeth)"}
 addUserKnob {41 bookmark_1 l bookmark T StickyNote1.bookmark}
}

2013年7月9日火曜日

メモ_配列の場合の表記

for b in  nuke.allNodes('Transform'):
    b.knob('center').setValue((640,512))

for b in  nuke.allNodes('Crop'):
    b.knob('box').setValue((((0,-10,1280,1034))))

sn = nuke.selectedNodes()
for n in sn:

    n.knob('box').setValue((((0,0,1280,1024))))

- pass the value argument as a tuple: 

nuke.toNode("Transform1").knob("center").setValue((0, 1080)) 

- or set the value for each index separately 

nuke.toNode("Transform1").knob("center").setValue(0,0) 
nuke.toNode("Transform1").knob("center").setValue(1080,1) 


2013年7月4日木曜日

開いてるファイル セキュリティの警告の消し方

[開いてるファイル - セキュリティの警告]
[発行元:不明な発行元]
[種類:ショートカット]
Windows7-Shortcut
これを表示させない方法がこちら。
1. [ローカルグループポリシーエディター]を起動:gpedit.msc
2. [ユーザーの構成] [管理用テンプレート] [Windowsコンポーネント] [添付ファイルマネージャー]
[危険度の低いファイルの種類の一覧] を開く
Dangerfiles-01
3. [有効] にして .exe 拡張子を追加
Dangerfiles-02
これでいちいちメッセージに応答することなくアプリを起動できる。

メモ_番号歯抜けでも連番ファイルを順に読み込む

importFile()を使ってimportOptions.forceAlphabetical を true にすると番号歯抜けでも順に読み込める

2013年6月27日木曜日

フッテージのドライブレター変更

var numItems = app.project.numItems;

for(i = 1; i <= numItems; i++) {
    if(app.project.item(i).typeName == "フッテージ") {
        if( !app.project.item(i) ) continue;
        var cItem = app.project.item(i).file;
        if( !cItem ) continue;
        var cItemPath = cItem.path;
        var cItemName = cItem.name;
        //拡張子
        var fooPattern = /(.+)(\.[^.]+$)/;
        var tExt = cItemName.match(fooPattern)[2];
        var cItemExt = tExt;
        //alert (cItemExt);
        //alert (cItemName);
        var psdExt = "psd"
        var cItemFullPath = cItemPath + "/" + cItemName;
        // 置換処理++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        var rFilePath = cItemPath.replace(/y/, "x");
        // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        var rFileFullPath = rFilePath + "/" + cItemName;
        //alert (rFileFullPath)
        var cItemMainSource = app.project.item(i).mainSource;
        var cFrameRate = cItemMainSource.conformFrameRate;
        var dFrameRate = cItemMainSource.displayFrameRate;
        var nFrameRate = cItemMainSource.nativeFrameRate;
        //alert (cFrameRate +"_"+ dFrameRate +"_"+ nFrameRate);
       if( cItemMainSource.isStill == true ) {
           if ( cItemExt == ".psd" ){
               //alert ("psdファイルはスキップします")
               }
           else if ( cItemExt == ".PSD" ){
               //alert ("PSDファイルはスキップします")              
               }
           else{
           var cFootageImageName = (rFileFullPath);
           var cFootageImageName = decodeURI(cFootageImageName);
           //alert (cFrameRate +"_"+ dFrameRate +"_"+ nFrameRate);
           //alert (cFootageImageName , "イメージ")
           app.project.item(i).replace(new File(cFootageImageName));
                }
           }
       else{
           if( cFrameRate == 0 ){
               var cFootageMsName = (rFileFullPath);
               var cFootageMsName = decodeURI(cFootageMsName);
               //alert (cFrameRate +"_"+ dFrameRate +"_"+ nFrameRate);
               //alert (cFootageMsName , "ムービかサウンド")
               app.project.item(i).replace(new File(cFootageMsName));
               }
               else{
                   var cFootageSeqName = (rFileFullPath);
                   var cFootageSeqName = decodeURI(cFootageSeqName);
                   //alert (cFrameRate +"_"+ dFrameRate +"_"+ nFrameRate);
                   //alert (cFootageSeqName , "連番イメージ")
                   try{
                   app.project.item(i).replaceWithSequence(new File(cFootageSeqName),false);
                   } catch(err) {
                       var msg = cFootageSeqName + "はファイルが無いようです";
                       alert(msg);
                    }
                }
            }
        }
    }


alert ("ドライブレターの変更終了")

2013年6月24日月曜日

フッテージをローカルにコピー

//今日の日時示
var now = new Date();
var year = now.getYear(); // 年
var month = now.getMonth() + 1; // 月
var day = now.getDate(); // 日
var hour = now.getHours(); // 時
var min = now.getMinutes(); // 分
var sec = now.getSeconds(); // 秒

if(year < 2000) { year += 1900; }

// 数値が1桁の場合、頭に0を付けて2桁で表示する指定
if(month < 10) { month = "0" + month; }
if(day < 10) { day = "0" + day; }
if(hour < 10) { hour = "0" + hour; }
if(min < 10) { min = "0" + min; }
if(sec < 10) { sec = "0" + sec; }

var batRcopyDir = "c:\\aeBat\\rcopy\\";
var dateDir = year +"_"+  month  + "_" + day;
var curTime = hour + "_" + min;

Folder(batRcopyDir + dateDir).create();

//rcopyのオプションとbatの変数
var copyOpt = '/S /TS /TEE /ETA /R:0 /XD old tmp temp *ログ /XF log.txt Thumbs.db /XO /NP /LOG+:C:%homepath%\\roboCopyLog\\%yy%%mm%%dd%\\log"_%tt%_%ff%_%bb%".txt';
var batTitle = "@title rcopyToX" 
var batPause = "@pause"
var batYyyy = "@set yyyy=%date:~0,4%"
var batYy = "@set yy=%date:~2,2%"
var batMm = "@set mm=%date:~5,2%"
var batDd = "@set dd=%date:~8,2%"
var batTt = "@set tt=%time:~0,2%"
var batFf = "@set ff=%time:~3,2%"
var batBb = "@set bb=%time:~6,2%"

var batRcopyLogDir = '@mkdir C:%homepath%\\roboCopyLog\\%yy%%mm%%dd%'
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
var aepFullFileName = app.project.file.name;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
var batRcopyEnv = batTitle +" "+aepFullFileName +"_"+ "Footages" + "\n" + batPause + "\n" + batYyyy + "\n" + batYy + "\n" + batMm + "\n" + batDd + "\n" + batTt + "\n" + batFf + "\n" + batBb + "\n" + batRcopyLogDir;

alert (copyOpt);
alert (batRcopyEnv);

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

var rcopy = "robocopy";
var randnum = Math.floor( Math.random() * 100000 );

var aepFileName = aepFullFileName.replace(aepExtension,"")
var batRcopyFile = new File(  batRcopyDir + dateDir + "\\"+ "rcopy" +"_" + aepFileName +"_" + curTime +"_"+ randnum + ".bat");

batRcopyFile.open("w");
batRcopyFile.writeln(batRcopyEnv)

// 置換対象文字列
var numItems = app.project.numItems;
//myArray = new Array(numItems);
for(i = 1; i <= numItems; i++) {
    if(app.project.item(i).typeName == "フッテージ") {
        if( !app.project.item(i) ) continue;
        var cItem = app.project.item(i).file;
        if( !cItem ) continue;
        //alert (cItem);
        var cItemPath = cItem.path;
        var cItemName = cItem.name;
        var cItemStr = String (cItem);
        var cItemPathStr = String (cItemPath);
        var cItemNameStr = String (cItemName);
        // 置換処理
        var cItemPathStr = cItemPathStr.replace(/\/y\//g, "y:\\");
        var cItemPathStr = cItemPathStr.replace(/\//g, "\\");
        var dFilePathStr = cItemPathStr.replace(/y:\\/g, "x:\\");
        //alert (cItemPathStr);
        //alert (dFilePathStr);
        var copyFootage = (rcopy +" "+ cItemPathStr +" "+ dFilePathStr +" "+ copyOpt)
        batRcopyFile.writeln(copyFootage)
        }
    }
batRcopyFile.writeln(batPause)
batRcopyFile.close();

batRcopyFile.execute();

2013年6月14日金曜日

GUIからaerender

//今日の日時示
var now = new Date();
var year = now.getYear(); // 年
var month = now.getMonth() + 1; // 月
var day = now.getDate(); // 日
var hour = now.getHours(); // 時
var min = now.getMinutes(); // 分
var sec = now.getSeconds(); // 秒

if(year < 2000) { year += 1900; }

// 数値が1桁の場合、頭に0を付けて2桁で表示する指定
if(month < 10) { month = "0" + month; }
if(day < 10) { day = "0" + day; }
if(hour < 10) { hour = "0" + hour; }
if(min < 10) { min = "0" + min; }
if(sec < 10) { sec = "0" + sec; }

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
var curTime = hour + "_" + min;
var batDir = "c:\\aeRenderBat\\";
var dateDir = year +"_"+  month  + "_" + day;

Folder( batDir + dateDir ).create();

//var aeVersion = app.version;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

str = app.buildName
nStr = str.substring(0,4)
//alert (nStr)
if (nStr == 10.0) {
    nStr = "CS5"
    alert(nStr)    
    }else if (nStr == 10.5){
        nStr = "CS5.5"
        alert(nStr)
        }else if (nStr == 11.0){
            nStr = "CS6"
            alert(nStr) 
            }else{
                alert (バージョンを確認してください)
                }
            
var randnum = Math.floor( Math.random() * 100000 );
var aeRender = '"C:\\Program Files\\Adobe\\Adobe After Effects '+ nStr +'\\Support Files\\aerender.exe"';
var projectFile = app.project.file.absoluteURI;
var aepExtension = ".aep"
var aepFullFileName = app.project.file.name;
var aepFileName = aepFullFileName.replace(aepExtension,"")
var proj =  "-project";
var batFile = new File(  batDir + dateDir + "\\"+ "aerender" +"_" + aepFileName +"_" + curTime +"_"+ randnum + ".bat");

//alert (aeRender+ proj + projectFile);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
batFile.open("w");
batFile.writeln('title' + " " + 'AfterEffects' + " " + nStr + " " + 'rendering' + " " + aepFullFileName)
batFile.writeln( aeRender + " " + '-mem_usage 10 20'  + " " +  proj  + " " + projectFile)
batFile.close();

batFile.execute();
//

2013年6月13日木曜日

プロジェクトファイルからレンダリングのアウトプットを設定

var aepFullFileName = app.project.file.name;
var aepExtension = ".aep";
var aepFileName = aepFullFileName.replace(aepExtension,"");
var arrAep = aepFileName.split("_");
var arrEnd = arrAep.length -1;
var aepPath = app.project.file.path;
var vDir = arrAep[arrEnd];
var arrEnd = arrAep.length -1;
var imgDir = "images";
folderObj = new Folder(app.project.file.path +"/"+ imgDir +"/"+ vDir);
folderObj.create();
var fileNameSet = "[projectName]_[####].[fileExtension]";
alert("レンダリングのアウトプットを設定します");
var curRnedSet = app.project.renderQueue.item(1).outputModule(1);
curRnedSet.applyTemplate("hoge");
curRnedSet.file = new File(app.project.file.path +"/"+ imgDir +"/"+ vDir +"/"+  fileNameSet );
alert ("設定しました");

2013年5月31日金曜日

任意の値のタイムオフセット

メモ
after effectsの
valueAtTimeをnukeでは以下のようにみたい
parent.Transform.translate.x(frame -2)
frameの後にオフセットしたい値を記入

2013年3月19日火曜日

aeのコマ打ちスクリプト


■メモ

var fps = 24;
var key_index = 1;
var layObj = app.project.activeItem.selectedLayers[0];

layObj.timeRemapEnabled = false;
layObj.timeRemapEnabled = true;

var trStrValue = layObj.timeRemap.keyValue(1);
var trEndValue = layObj.timeRemap.keyValue(2);

var iPoint = app.project.activeItem.selectedLayers[0].inPoint*fps;
var oPoint = app.project.activeItem.selectedLayers[0].outPoint*fps;

var koma = eval(prompt("何コマ打ち?",2));
var duration = trEndValue*fps;

for (var i = 0; i <= duration;){
        layObj.timeRemap.setValueAtTime((i+iPoint)/fps, (i)/fps);
layObj.timeRemap.setInterpolationTypeAtKey(key_index, KeyframeInterpolationType.HOLD);
i += koma;
key_index++;
        }

2013年2月12日火曜日

コマンドラインレンダー時のみ適用


コマンドラインレンダー時のみ適用 
↓をエクスプレッションで追加
$gui

guiの時はOffのままでレンダーなので要注意!

set cut_paste_input [stack 0]
version 6.3 v8
push $cut_paste_input
add_layer {velocity velocity.X velocity.Y velocity.Z}
VectorBlur {
 channels rgba
 uv velocity
 scale 10
 name VectorBlur1
 selected true
 xpos -5077
 ypos 1541
 disable {{"\$gui"}}
}