KRCL Law Firm - 30th Year Retreat Video
- nathansheppar8
- Oct 14, 2024
- 2 min read
Updated: Oct 15, 2024
I had a great time working on a corporate video for the law office of Kane Russell Coleman Logan (KRCL) to celebrate their 30th anniversary retreat. I added my own flair with a Perry Mason-inspired section (check it out at 2:50), and to my surprise, the video included cameos from Leslie Jordan and Alfonso Ribeiro!
The project was a combination of motion graphics and video editing.
Here's a view of the timeline:


One of the more challenging aspects was animating the clock arms. It took a custom expression setup to manage the arms’ growth and rotation smoothly. This required three null objects: one for the center and two for the endpoints of the long and short arms. Getting everything to work seamlessly was a tricky technical challenge, but the end result was definitely worth it.
nullLayerNames = ["Line 2: Path 1 [1.1.0]","Line 2: Path 1 [1.1.1]"];
origPath = thisProperty;
origPoints = origPath.points();
origInTang = origPath.inTangents();
origOutTang = origPath.outTangents();
getNullLayers = [];
for (var i = 0, il = nullLayerNames.length; i < il; i++){
try{
getNullLayers.push(effect(nullLayerNames[i])("ADBE Layer Control- 0001"));
} catch(err) {
getNullLayers.push(null);
}}
for (var i = 0, il = getNullLayers.length; i < il; i++){
if (getNullLayers[i] != null && getNullLayers[i].index != thisLayer.index){
origPoints[i] = fromCompToSurface(getNullLayers[i].toComp(getNullLayers[i].anchorPoint));
}}
createPath(origPoints,origInTang,origOutTang,origPath.isClosed());
Here's a breakdown of how it works: 1. Variable Definitions:
• nullLayerNames: An array containing the names of null layers that will be used to modify the shape’s path points.
• origPath: Retrieves the original path of the shape layer (i.e., its points, tangents, and whether it’s closed).
• origPoints, origInTang, origOutTang: Extract the original points and tangents (both in and out) of the shape’s path.
2. Find Null Layers:
• The loop (for loop) checks the nullLayerNames array to locate the layers that control the path’s points. Using the effect(nullLayerNames[i])("ADBE Layer Control-0001"), it retrieves these null layers, and any errors (if a layer isn’t found) are handled to ensure that the script doesn’t break.
3. Modify the Points:
• Another loop goes through the list of null layers. If a null layer is valid (exists and isn’t the current shape layer itself), it updates the corresponding point in origPoints by calculating the world-space position of the null layer’s anchor point (toComp(getNullLayers[i].anchorPoint)) and converting it to the shape’s surface coordinates (fromCompToSurface()).
4. Update Path:
• After updating the necessary points with the positions of the null layers, the createPath() function recreates the path with the modified points, using the original tangents (origInTang and origOutTang) and ensuring the path remains closed or open as initially defined.
Comments