Add motion design skills pack

Installed via npx skills add iart-ai/motion-design-skills. Kept the
project's existing remotion-video skill unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E35uEC1pGu95tUpM4b815L
This commit is contained in:
Claude committed 2026-10-18 21:56:31 +00:00
1 parent 0b42fdeae1
commit d4b3cf1b85
46 files changed
+4384

No files matched your search

@@ -0,0 +1,49 @@
/*
* apply-effect-to-layers.jsx
* Applies an effect (by internal matchName) to every selected layer.
*
* Why matchName: display names are localized and change between AE language
* versions; matchName is stable. Examples:
* "ADBE Gaussian Blur 2" -> Gaussian Blur
* "ADBE Fast Box Blur" -> Fast Box Blur
* "ADBE Tint" -> Tint
* "ADBE Drop Shadow" -> Drop Shadow
* "ADBE Glo2" -> Glow
*
* Usage: select layers in a comp, then File > Scripts > Run Script File...
* Edit EFFECT_MATCHNAME (and the optional parameter block) below.
*/
(function applyEffectToLayers() {
var EFFECT_MATCHNAME = "ADBE Gaussian Blur 2";
var comp = app.project.activeItem;
if (!(comp && comp instanceof CompItem)) {
alert("Open a composition and select one or more layers first.");
return;
}
var sel = comp.selectedLayers;
if (sel.length === 0) {
alert("No layers selected.");
return;
}
app.beginUndoGroup("Apply Effect To Layers");
try {
for (var i = 0; i < sel.length; i++) {
var layer = sel[i];
if (!(layer instanceof AVLayer)) continue; // effects need an AVLayer
var effects = layer.property("ADBE Effect Parade");
if (!effects.canAddProperty(EFFECT_MATCHNAME)) continue;
var fx = effects.addProperty(EFFECT_MATCHNAME);
// --- Optional: set a parameter. Example for Gaussian Blur radius ---
// try { fx.property("Blurriness").setValue(25); } catch (e) {}
}
} finally {
app.endUndoGroup();
}
})();
@@ -0,0 +1,41 @@
/*
* batch-rename.jsx
* Renames the selected layers in the active comp to: baseName_##
* with a zero-padded, incrementing index.
*
* Usage: select layers in a comp, then File > Scripts > Run Script File...
* Edit BASE_NAME, START_INDEX, and PAD below.
*/
(function batchRename() {
var BASE_NAME = "layer"; // base name applied to every selected layer
var START_INDEX = 1; // first number
var PAD = 2; // zero-padding width (2 -> 01, 02 ...)
var comp = app.project.activeItem;
if (!(comp && comp instanceof CompItem)) {
alert("Open a composition and select one or more layers first.");
return;
}
var sel = comp.selectedLayers;
if (sel.length === 0) {
alert("No layers selected.");
return;
}
function pad(n, width) {
var s = String(n);
while (s.length < width) s = "0" + s;
return s;
}
app.beginUndoGroup("Batch Rename Layers");
try {
for (var i = 0; i < sel.length; i++) {
sel[i].name = BASE_NAME + "_" + pad(START_INDEX + i, PAD);
}
} finally {
app.endUndoGroup();
}
})();
@@ -0,0 +1,47 @@
/*
* sequential-offset.jsx
* Staggers the selected layers in time so each starts OFFSET_FRAMES after
* the previous one (a "domino" / cascade start), based on the first
* selected layer's start time.
*
* Usage: select layers in a comp, then File > Scripts > Run Script File...
* Edit OFFSET_FRAMES and ORDER below.
*/
(function sequentialOffset() {
var OFFSET_FRAMES = 2; // frames between each layer's start
var ORDER_BY_SELECTION = true; // true = order of selection; false = by current startTime
var comp = app.project.activeItem;
if (!(comp && comp instanceof CompItem)) {
alert("Open a composition and select two or more layers first.");
return;
}
var sel = comp.selectedLayers;
if (sel.length < 2) {
alert("Select at least two layers.");
return;
}
var frameDur = comp.frameDuration; // seconds per frame
var offsetSec = OFFSET_FRAMES * frameDur;
// Build the working order.
var layers = [];
for (var i = 0; i < sel.length; i++) layers.push(sel[i]);
if (!ORDER_BY_SELECTION) {
layers.sort(function (a, b) { return a.startTime - b.startTime; });
}
var base = layers[0].startTime;
app.beginUndoGroup("Sequential Offset");
try {
for (var j = 0; j < layers.length; j++) {
layers[j].startTime = base + (j * offsetSec);
}
} finally {
app.endUndoGroup();
}
})();