mcp-after-effects

by Dakkshin
// applyEffectTemplate.jsx // Applies predefined effect templates to layers function applyEffectTemplate(args) { try { // Extract parameters var compIndex = args.compIndex || 1; // Default to first comp var layerIndex = args.layerIndex || 1; // Default to first layer var templateName = args.templateName; // Name of the template to apply var customSettings = args.customSettings || {}; // Optional customizations if (!templateName) { throw new Error("You must specify a templateName"); } // Find the composition by index var comp = app.project.item(compIndex); if (!comp || !(comp instanceof CompItem)) { throw new Error("Composition not found at index " + compIndex); } // Find the layer by index var layer = comp.layer(layerIndex); if (!layer) { throw new Error("Layer not found at index " + layerIndex + " in composition '" + comp.name + "'"); } // Template definitions var templates = { // Blur effects "gaussian-blur": { effectMatchName: "ADBE Gaussian Blur 2", settings: { "Blurriness": customSettings.blurriness || 20 } }, "directional-blur": { effectMatchName: "ADBE Motion Blur", settings: { "Direction": customSettings.direction || 0, "Blur Length": customSettings.length || 10 } }, // Color correction effects "color-balance": { effectMatchName: "ADBE Color Balance (HLS)", settings: { "Hue": customSettings.hue || 0, "Lightness": customSettings.lightness || 0, "Saturation": customSettings.saturation || 0 } }, "brightness-contrast": { effectMatchName: "ADBE Brightness & Contrast 2", settings: { "Brightness": customSettings.brightness || 0, "Contrast": customSettings.contrast || 0, "Use Legacy": false } }, "curves": { effectMatchName: "ADBE CurvesCustom", // Curves are complex and would need special handling }, // Stylistic effects "glow": { effectMatchName: "ADBE Glow", settings: { "Glow Threshold": customSettings.threshold || 50, "Glow Radius": customSettings.radius || 15, "Glow Intensity": customSettings.intensity || 1 } }, "drop-shadow": { effectMatchName: "ADBE Drop Shadow", settings: { "Shadow Color": customSettings.color || [0, 0, 0, 1], "Opacity": customSettings.opacity || 50, "Direction": customSettings.direction || 135, "Distance": customSettings.distance || 10, "Softness": customSettings.softness || 10 } }, // Common effect chains "cinematic-look": { effects: [ { effectMatchName: "ADBE Curves", settings: {} // Would need special handling }, { effectMatchName: "ADBE Vibrance", settings: { "Vibrance": 15, "Saturation": -5 } }, { effectMatchName: "ADBE Vignette", settings: { "Amount": 15, "Roundness": 50, "Feather": 40 } } ] }, "text-pop": { effects: [ { effectMatchName: "ADBE Drop Shadow", settings: { "Shadow Color": [0, 0, 0, 1], "Opacity": 75, "Distance": 5, "Softness": 10 } }, { effectMatchName: "ADBE Glow", settings: { "Glow Threshold": 50, "Glow Radius": 10, "Glow Intensity": 1.5 } } ] } }; // Check if the requested template exists var template = templates[templateName]; if (!template) { var availableTemplates = Object.keys(templates).join(", "); throw new Error("Template '" + templateName + "' not found. Available templates: " + availableTemplates); } var appliedEffects = []; // Apply single effect or multiple effects based on template structure if (template.effectMatchName) { // Single effect template var effect = layer.Effects.addProperty(template.effectMatchName); // Apply settings for (var propName in template.settings) { try { var property = effect.property(propName); if (property) { property.setValue(template.settings[propName]); } } catch (e) { $.writeln("Warning: Could not set " + propName + " on effect " + effect.name + ": " + e); } } appliedEffects.push({ name: effect.name, matchName: effect.matchName }); } else if (template.effects) { // Multiple effects template for (var i = 0; i < template.effects.length; i++) { var effectData = template.effects[i]; var effect = layer.Effects.addProperty(effectData.effectMatchName); // Apply settings for (var propName in effectData.settings) { try { var property = effect.property(propName); if (property) { property.setValue(effectData.settings[propName]); } } catch (e) { $.writeln("Warning: Could not set " + propName + " on effect " + effect.name + ": " + e); } } appliedEffects.push({ name: effect.name, matchName: effect.matchName }); } } return JSON.stringify({ status: "success", message: "Effect template '" + templateName + "' applied successfully", appliedEffects: appliedEffects, layer: { name: layer.name, index: layerIndex }, composition: { name: comp.name, index: compIndex } }, null, 2); } catch (error) { return JSON.stringify({ status: "error", message: error.toString() }, null, 2); } } // Get arguments passed from Node.js process var args; try { args = JSON.parse($.getenv("args")); } catch (e) { args = {}; } // Run the function and write the result var result = applyEffectTemplate(args); // Write the result so it can be captured by the Node.js process $.write(result);
ID: bs9g9p44kv