Create a New Shape Layer
- Open After Effects and create a new composition.
- Go to Layer > New > Shape Layer.
Add a Path to the Shape Layer
- With the shape layer selected, open its Contents panel (by clicking the arrow in the Timeline).
- Click the “Add” button and choose “Path” (or “Add > Path” if not present). This creates a new path that you can modify with an expression.
Add Expression Controls for Custom Parameters
You’ll need to create several controls to tweak the organic line’s behavior with noise.
- With your shape layer selected, go to Effect > Expression Controls > Slider Control. Add sliders for the following parameters and rename them exactly as shown:
- Length (Total length of the line in pixels)
- Points (Number of vertices along the line; minimum of 2)
- Noise Amp X (Noise amplitude along the X axis)
- Noise Amp Y (Noise amplitude along the Y axis)
- Noise Freq (Noise frequency multiplier)
- Seed (A numerical seed for initializing randomness)

- Next, add a Dropdown Control for orientation:
Go to Effect > Expression Controls > Dropdown Menu Control and rename it to “Line Orientation”.
In the dropdown’s settings, make sure to set the first item to “Horizontal” and the second item to “Vertical”. (Internally, these will correspond to values 0 and 1.)
Apply the Expression to the Path Property - Expand the shape layer’s Contents > Path.
- Alt-click (Windows) or Option-click (Mac) on the stopwatch icon next to the Path property.
- Paste the following expression (formatted in a markdown code block below) into the expression editor.
JavaScript
// Expression for a shape layer's Path property to create a single, organic line with noise.
// Slider/Dropdown Controls:
// "Length" - Total length of the line (in pixels)
// "Points" - Number of vertices along the line (minimum of 2)
// "Noise Amp X" - Noise amplitude along the X axis
// "Noise Amp Y" - Noise amplitude along the Y axis
// "Noise Freq" - Noise frequency multiplier
// "Seed" - Seed value for noise randomness
// "Line Orientation" - Dropdown: 0 for Horizontal, 1 for Vertical
var length = effect("Length")("Slider");
var numPoints = Math.max(effect("Points")("Slider"), 2);
var noiseAmpX = effect("Noise Amp X")("Slider");
var noiseAmpY = effect("Noise Amp Y")("Slider");
var noiseFreq = effect("Noise Freq")("Slider");
var seed = effect("Seed")("Slider");
var orientationVal = effect("Line Orientation")("Dropdown").value; // Read dropdown value
var lineOrientation = parseInt(orientationVal, 10); // Convert to an integer
seedRandom(seed, true);
var vertices = [];
var inTangents = [];
var outTangents = [];
for (var i = 0; i < numPoints; i++){
// Calculate a percentage t along the line (0 to 1)
var t = i / (numPoints - 1);
// For a horizontal base line centered at (0,0)
var baseX = -length / 2 + t * length;
var baseY = 0;
// Apply noise along each vertex using the noise() built-in
var nX = noise([t * noiseFreq, time]) - 0.5;
var nY = noise([time, t * noiseFreq]) - 0.5;
// Calculate offsets based on amplitude sliders
var offsetX = nX * noiseAmpX;
var offsetY = nY * noiseAmpY;
// Setup final vertex coordinates based on the dropdown selection.
var x, y;
if (lineOrientation === 0){
// Horizontal: t mapped to X axis
x = baseX + offsetX;
y = baseY + offsetY;
} else if (lineOrientation === 1){
// Vertical: swap the roles. t mapped to Y axis.
x = baseY + offsetX;
y = -length / 2 + t * length + offsetY;
} else {
// Default to horizontal, in case of an unexpected value:
x = baseX + offsetX;
y = baseY + offsetY;
}
vertices.push([x, y]);
inTangents.push([0, 0]);
outTangents.push([0, 0]);
}
createPath(vertices, inTangents, outTangents, false);
- Scrub through the timeline to see the line evolve over time as the noise function updates.
- Adjust the slider values:
Change the “Length” to increase or decrease the overall size of your line.
Modify “Points” to add more or fewer vertices, which will affect how detailed the noise distortion appears.
Tweak “Noise Amp X” and “Noise Amp Y” to control the magnitude of distortion in horizontal and vertical directions.
Alter “Noise Freq” to change how rapidly the noise fluctuates.
Use “Seed” to vary the randomness or lock it to a specific state.
- Switch the “Line Orientation” dropdown between Horizontal and Vertical to see how the base line orientation changes.
Fine-Tuning and Experimentation - You can keyframe any of the controls to animate changes over time. For example, animate “Noise Amp” values to have the line become more turbulent or calm during your animation.
- If you want to further enrich the organic look, consider editing the noise function or introducing multiple noise layers by adding extra calculations (as demonstrated in the advanced organic shape expression tutorial).

You can download project file from: