Wiggle One Axis
Classic wiggle locked to a single axis — the other axis stays exactly where you put it.
Expression Code
// Wiggle One Axis// Apply to Positionfreq = 2; // Wiggles per secondamp = 30; // Wiggle amount in pixelsaxis = 0; // 0 = wiggle X only, 1 = wiggle Y onlyseedRandom(index, true);w = wiggle(freq, amp);if (value.length == 3) {if (axis == 0) {[w[0], value[1], value[2]];} else {[value[0], w[1], value[2]];}} else {if (axis == 0) {[w[0], value[1]];} else {[value[0], w[1]];}}
Apply to Position with Separate Dimensions turned OFF (if Position shows as separate X/Y properties, right-click it and untick Separate Dimensions — the expression errors on the split 1-D properties). Then choose the axis: 0 wiggles horizontally only, 1 vertically only. The wiggle is computed for both axes but only one is used — the other returns the untouched value, so Position keyframes on that axis still play back exactly. Duplicated layers wiggle differently thanks to the index-based seed. 3D layers work automatically — Z is passed through untouched.