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
48 lines
1.4 KiB
React
48 lines
1.4 KiB
React
/*
|
|
* 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();
|
|
}
|
|
})();
|