This is a user manual for the Plainly Videos App.


Plainly is software for automated video creation. This wiki should provide you with guidance on all parts of our product. Three main parts are:

  • Templates: these are the video templates that you will use as a base for your renders. You can either use custom projects or pre-made Plainly designs.

  • Setup: if you are using a custom template, you will need to set it up in Plainly. This step is done after you your custom template in Adobe After Effects. This step takes only a few minutes, and it’s done completely through our Web App.

  • Rendering: you can render videos in multiple ways, using our Web App, the batch render function or our API. All rendering is done in the cloud, and you can set up webhooks in order to distribute videos further automatically.

Video Tutorials

We created this documentation also in a video format, everything you read here can also be found in the video tutorial library. This is being constantly updated. See the library here.


Designs are pre-made projects created by the Plainly team. We created these so you can get started asap, without the need to create custom projects. They have the same functionality as the custom projects, and you can render them in the same way as custom projects (single render, batch render, API render).

You can see related API docs for designs here.

You can use these freely with any Plainly subscription without any limitations. Most of them have multiple formats and multiple colors pre-defined but you can also add custom colors throughout the render form.

If you wish to create templates for Plainly, or you want to send a template request, send an email to

Custom projects

Custom projects are video templates that you create in Adobe After Effects.

How to create custom projects

There are no special requirements when creating a custom project. You can create it as you would normally create a video in After Effects. We have best practices that you can follow, but other than that you have full control over the template.

  • Maximum length and dimensions of the template are determined by your subscription.

  • You can use whatever fonts you like.

  • You can use 3D layers and any After Effects native effect.

  • You can’t use paid plugins.

Adding a custom project to Plainly

After your finish creating your template in After Effects, and you want to add it to Plainly, the first step is to properly package it:

  1. Go to File > Dependencies > Collect Files

  2. Go to the folder where you collected the After Effects files and also copy the font files you used in the project inside.

  3. Select the font files, the .aep and the (Footage) folder and create a .zip archive

This is how a proper .zip looks:


After you create the .zip you need to go to Custom Projects > Upload New and the upload window will open. Make sure that you correctly select the version of After Effects that you used.

A few challenges you might face:
1. Template too big - in order to minimize your template size, make sure to check the section below on optimizing After Effects file. You can also use proxy files if you are using high quality MOVs, or link them as a static parameter.
2. Fonts not displaying - Make sure to include the font files in your zip!


After the upload, Plainly will take a second to analyze your project.

You should then create your templates and add parameters. Templates are a subcategory of a project, and you can have as many templates as you wish in one custom project. The reason why templates exist is to allow you to have multiple variations (for example multiple formats) of one video under one project.

To create a template go to the project page and click on the “Add new” button.


This will open up the parametrization window. In the parametrization window, you will see all of the available layers you can make dynamic. Right now we support dynamic text, video, audio, images and colors. To create a parameter (dynamic layer):

  1. Click on the layer you want to make dynamic

  2. Select static or dynamic

  3. If it’s static, add the new value.

  4. If it’s dynamic add the display name and the parameter name.

Go through the list of layers, and make the ones you want to change every render dynamic.


You can also add scripts to layers, scripts are a way to add even more dynamic features to your template.


Scripts are features that you can add to certain layers that will make your project even more dynamic. To add them, click on the “Scripting” tab in the parametrization step. Here’s an overview of all scripts (sorted from the most used to the least used by our users):

  • Crop - this script will crop the parent composition of the layer based on that layer. This is the most useful script because it allows you to have one layer that controls the final duration of the video. For example, you can have a background video that’s dynamic. You can apply the crop script to that video and the final, output video will be the same duration of the background video. Otherwise, the output video will always stay the same duration as it was set in the template.

Make sure that the asset you’re using in the template is longer than any asset that will be swapped out. The crop script won’t work if the placeholder asset is shorter than the one you’re swapping it out for.
  • Shift in - this script will shift a layer to start at the start/end point of another layer. This is a great script if you for example have a background video (with variable length) and an outro. In order for the outro to start at the end of the background video you will apply the shift in script to the outro layer and pin it to the endPoint of the background video.

  • Spread layers - Another useful script that allows you to have a dynamic number of layers that get shown depending on the input. Imagine a slide show with 10 images. In the final workflow, you want to be able to send anywhere from 5 to 10 images in your render call. You can add the spread layers script to the main comp, and Plainly will (depending on the number of images you pass) turn off the layers that don’t have any input, and extend the rest of the layers to fill out the composition.

  • Shift out - does the same thing as shift in just with the end of the layer.

  • Extend - this will extend the out point of your layer (the ending) to the end of the parent composition.

  • Stretch - this will stretch the layer based on an in/out point of another layer.

  • Trim in/out - this will trim the layer based on another layer in the same composition.

A key thing to point out is that scripts are executed in the order that you set them up in the parameterization step.

For example, sometimes you want to apply the shiftIn before the crop script (just think for a second how would you do this if you were doing it manually, and then apply scripts in the same way). This is really important because not applying them in the correct order can cause unwanted results.

Scripts can also be applied to compositions.

A few challenges you might face:
1. Output video does not look good - Check the order in which you applied the scripts, also make sure that you didn’t add too many scripts. One or two scripts is often enough. Failed renders
Two failed renders in a row - Make sure that you didn’t add duplicate scripts.
3. The project must contain an .aep file in the ZIP root folder. - This error comes up when you compress the folder, and not the contents of the folder.

Template editing

If you finish your setup (create templates & parameters), start rendering and notice a mistake you can easily update the template without the creation of a new project. Go to your After Effects project, do your edits and click on the “Edit” button on the project page. This will open the same upload form as you saw during the initial upload. Make sure that you select the right version of After Effects.

It’s important to note that you can’t delete any parametrized layers, or edit their names if you want the edit to work. Once we create the map of the dynamic parameters, we expect to see the same map during the upload of the edited project.

If you delete, change sources, or change the names of parametrized layers make sure that you also edit the template. Delete the parametrized layers that you changed, save the template, and then add them again.

A challenge you might face:
Failed renders - If you changed any layer names or source files in your After Effects project this will cause failed renders. To fix, delete the parametrization, save the template and add parametrized layers again. Also, double check the version of After Effects and make sure that you correctly marked the version during the reupload.

After Effects best practices

After Effects templates for custom have no special requirements, you can simply create your template as you would create any video. We do however have best practices that help you get the best output. These best practices involve formatting of text, formatting of images, proper naming structure, and similar.

If you have any questions, feel free to contact us at

Naming Layers

Custom projects often have a lot of layers. In order to be as efficient as possible during setup, you can put a prefix in the layer when naming layers that should be dynamic. This way you can find them easily in Plainly during the parametrization.

Make sure that you didn’t add any non-English characters to layer/file names. This will cause failed renders.


To easily find the rendering compositions in the setup process, make sure that you add a prefix (.ie “render_”) to make your life easier.

Text auto-scale

Depending on what type of text are you using in the template (paragraph or point) you can add the following expressions in order to achieve auto scaling. When added, the text will automatically scale based on the input, and a defined bounding box.

Paragraph text

If your templates use big lines of text, you are probably using paragraph text (text that is bounded by an area) and it probably goes into multiple lines. Create an area that the text should fill, and find a reasonable amount of characters that you think will cover all use cases. If you know all use cases that are then the best-case scenario because you can plan and design accordingly.

Your best chances in keeping this controlled are limiting the number of characters that the user inputs. This is not enforced in any way in After Effects, you just need to provide the number of max amount of characters that each layer can take and notify the user.

In order to keep the text centered at all points, apply the following expression to the anchor point of that text layer.

top = sourceRectAtTime().top;
left = sourceRectAtTime().left;
x = left + (sourceRectAtTime().width/2);
y = top + (sourceRectAtTime().height/2);
Point text

If your text is in one line, that means that you’re probably using point text. Point text is very easy to manage, as you can add a simple expression that will automatically scale the size of the text based on the input. Simply create a solid layer named “boundingbox” which will serve as the borders for your text.

If the text goes beyond the borders of this text, it will start scaling down. After you create the solid layer, add the following expression to the scale property of your text layer.

text_width = thisLayer.sourceRectAtTime(time).width;
text_height = thisLayer.sourceRectAtTime(time).height;
rect_height = thisComp.layer("boundingbox").height*thisComp.layer("boundingbox").scale[1]/100-2;
rect_width = thisComp.layer("boundingbox").width*thisComp.layer("boundingbox").scale[0]/100-2;
sTemp = Math.min(rect_width/text_width*100, rect_height/text_height*100);
s = Math.min (100,sTemp);

If you have multiple text layers in the same comp that need automatic scaling, make sure to create multiple bounding boxes, and change their names in the expression above.

Text background

If your paragraph text has a colored background and you want the background to scale with text, make sure to apply the following expressions:

To the text anchor point

yPos = thisLayer.sourceRectAtTime(time).height / 2;
[0, yPos]

To the Rectangle Path/Size of the shape that’s serving as the background

subText = thisComp.layer("name_of_our_text_layer");
textWidth = subText.sourceRectAtTime(time).width + 70;
textHeight = subText.sourceRectAtTime(time).height + 70;
[textWidth, textHeight]

70 is the padding - you can adjust it manually.

Images / Videos

One of the biggest issues when creating templates is scaling images and videos. In a perfect world, all images/videos are the same dimensions but this usually is not the case. Luckily you can get auto-scaling assets in After Effects.

First off, all images/videos that are going to be dynamic have to be in their own compositions. These compositions will serve as a “container” for the image/video. Don’t add any effects, keyframes or anything to the image/video inside of the composition, add everything to the composition itself.

The size of the “container” composition should be the maximum size you want the image/video to be.

We need to add the Scale to Comp effect on each image/video. This effect will automatically scale the image/video according to its container comp.

Download the image from this link. Install the preset and apply the effect to every dynamic image/video.

When you apply it, you will have a couple of options in your "Effect Controls" panel, make sure to check the first box, and apply an expression to the second checkbox:

If Composition is Vertical:

img = thisLayer;
imgHeight = img.width;
imgWidth = img.height;
if (imgWidth > 2*imgHeight) {100}
else if (imgWidth <= imgHeight) {100}
else {0}

If Composition is Horizontal:

img = thisLayer;
imgWidth = img.width;
imgHeight = img.height;
if (imgWidth > 2*imgHeight) {100}
else if (imgWidth <= imgHeight) {100}
else {0}
If Composition is square: Just check first 2 boxes (fit and fill), there’s no need for any expression.

Color control

If you want to dynamically swap a color of a solid layer, we support that out of the box. Just upload your project, make your solid dynamic and you will be able to control its colors.

If you want to dynamically swap out colors of other layers (such as shape, text or similar) you will have to set up a color-control layer. This is a text layer in After Effects that will hill hold the HEX value of the color.

Start by adding a new text layer, and type in the hex code of the color (without the #). Then, go to the layer which you will re-color and add the following expression to its color property:

function hexToColor(theHex) {
    var r = theHex >> 16;
    var g = (theHex & 0x00ff00) >> 8;
    var b = theHex & 0xff;
    return [r/255,g/255,b/255,1]
hexToColor("0x" +comp("control_comp").layer("color_primary").text.sourceText);

Make sure that you reference the right comp and the right layer! You can have as many dynamic colors as you wish, just make sure to create a text layer for each color.

If the layer you want to re-color doesn’t have a color property, you can add a fill effect and then apply the expression to the color property of that fill effect.

Optimizing the After Effects project

  1. Pre-render as much as possible - pre-rendering is the most useful technique for lowering render times. Make sure to pre-render all layers that are using effects, or that are slowing down the preview in After Effects. Also, pre-rendering image sequences will make sure that your project can be under our upload limit. Simply isolate the layers you want to pre-render one by one, and render them out as an mp4. If you have layers with transparency, add a green screen as a background, and key out that green screen in the template.
    For example: If you use any of Trapcode plugins; pre-compose it; render that composition as a .mp4 sequence and turn off the original layer. You just pre-rendered a composition.
    This is a huge boost to your render times because AE doesn’t have to calculate heavy layers with complex effects or plugins on it, it just plays a .mp4 video.

  2. Use as few effects and plugins as possible - Effects destroy render times. If speed is important to you, try lowering the amount of the effects/plugins to a minimum, or if it’s possible don’t use them at all.

  3. Use as few expressions as possible - Expressions are also a killer for render times. Especially very complex expressions. After Effects needs to calculate the expression you set every frame, and if it’s a big one you bet it will slow down your renders.

  4. Resize all of the assets in the comp - If you use large assets, they will also affect the render time. Try cropping all of the assets in your composition to the right dimensions, instead of using a 4k image or video in a 720p composition.

  5. Cut down resolution if you don’t need it - If you are posting to social media, there is no need to use 2k or 4k videos. Research the best dimensions for videos and cut down the resolution if you see that your videos are too big.

  6. Optimize your pre-comps - Before finalizing your project, check all pre-comps just to make sure that you don’t have unnecessary files in there. It’s very easy to overlook objects off-screen which will increase your render times. Check everything, clean up, and optimize.

Only available on certain Plainly subscription plans.

Sharing links enable you to have static, non-changeable, links for videos rendered in your projects. Since every video rendered has it’s own unique link where it can be downloaded, this feature enables you to have a single link for each project and template. Sharing can operate in two modes:

  1. Automatic latest promotion - this mode will always promote the latest successfully rendered video for the given template to the shared link automatically.

  2. Manual promotion - you explicitly select videos you want to promote to the shared link.

You can enable sharing by clicking on the Enable sharing button in the project details page. Sharing can be enabled only for the complete project and will affect all templates. The sharing link for each template can be found in the template details page.

Please not that sharing links will become nonfunctional if:

  • Sharing is disabled for a project, or a project is deleted

  • A template is deleted (only affects a link for that single template)

Sharing is currently only supported for the .mp4 video format.


Rendering is a process of sending data to Plainly and exporting a new instance of a template you set up. There are a few ways you can do this.

Single render

If you want to quickly render out a single video, you can do that through the rendering form in our app. Simply go to the template you want to render, click on the “Render” button in the top right and fill out the parameter fields.

Once you fill out the parameters, and click render that will send one render request to Plainly, and your render will appear in the “Renders” tab (which you can access from the sidebar).

Batch render

If you want to send a batch of requests to Plainly, but don’t want to use our API you can do this with the batch render. All you have to do is create a CSV with all variations you want to render. Create one column for one parameter, and each row will be a new render.

Once again, go to the render form, and click on the “Batch render” button on the top. Upload your CSV, map columns to parameters, and click render. This will instantly send a request for as many renders as you have rows.

Tweet To Video

We call tweet-to-video a mini-app. These mini-apps are a collection automations that we created in order to help you get one-click automatic rendering. To use tweet-to-video simply go to the “Designs” tab, find a Twitter template, click render and paste the URL to your tweet.

Plainly will take the data it needs from that tweet, add it into the template and render a video.


Plainly’s API is how you can get the most out of our tool. It’s a powerful API that allows rendering of huge volumes. You can do that with batch rendering, but with the API you have the ability to create even more robust workflows.

Almost all actions you do within our web app can be done through the API. This means that you can set up templates, get render info, and of course render videos through the API.

It’s an easy to use Rest API and you can see the documentation on this link.

Asset handling

Any assets you’re sending to Plainly have to be stored on the cloud, and during the rendering you will be providing a link to that asset. This link has to be public, or signed and if you are not sure if it’s going to work, the easiest way to check is to open the single render form and paste the link in a parameter field.

Plainly will do the asset validation process, and if this is a valid link it wil tell you.

If you create renders with the render form, you can also use our native file upload system. This will allow you to upload files from the local machine, but this system is not available with the API or batch rendering.

We can take Google Drive and Dropbox links but only if you are providing us with the right link. You can get these links by using the Google Drive or Dropbox APIs, just pasting a link that you see in the browser won’t work.

Here are the relevant API docs from Google and Dropbox to see how to get valid links.

Advanced rendering options

Advanced rendering options are accessed through the top right button in the render form. These options allow you to set up different output formats, add a webhook or export thumbnails.

Render formats

We support multiple rendering formats such as MP4, GIF or MOV. Keep in mind that changing the rendering format might cause longer render times or unwanted render results. MP4 is the safest rendering format and it will produce the best results.

You can also play with the encoding parameters. We use FFmpeg for the video encoding, and if you are an advanced user that wants to play around with this you can simply add the parameters that you want to use. This will also affect render times and output results.

Thumbnails export

If you enable this option, Plainly will not only export the video but also thumbnails which you can use as a poster on social media. All you have to do is specify the frequency at which you want to get thumbnails and Plainly will provide them alongside the final video to you.


If you get a failed render, which can happen for a lot of reasons we provided you with a simple and quick way to rerender the video, without sending the data again.

You can either render again or re-submit a render through our web app. The render again option will just reuse the same values for parameters…re-submitting a render will reuse the parameters, webhook and advanced rendering options.

You can also resubmit the render using our API, check the relevant docs here.

Analysis Issues

A lot of analysis fails are caused by the same things that cause failed renders. I would suggest that you take a look at the section below and troubleshoot. When troubleshooting I would mainly focus on unsupported file types and using non-English letters in the asset file names.

Wrong After Effects version

Many analysis failures are attributable to the same factors that lead to unsuccessful renders. To address this, it is recommended to review the section below and conduct troubleshooting. The focus should primarily be on unsupported file formats and the utilization of non-English characters in asset file names.

Rendering Issues

The stability of our platform is one of our main focuses, but still, bugs will happen from time to time. These bugs happen mostly when you are using a custom project and in the form of failed renders.

Here’s a list of things you can try to do in order to fix this:

First off, try re-rendering again.

Issues with a project that was already set up and working.

If you’re experiencing failed render with a project that you already set up you probably changed something and used the "Edit" project button. These issues appear when you change a layer that was parametrized. If you use the "Edit" project button, Plainly expects no changes when it comes to parametrized layers. You can change the source file, their animation and similar but you can’t delete them or change them. If you do, however, delete or change those layers you need to delete them from the parametrized layers list and save the template again. If you change a name of a parametrized layer, delete it from the parametrized layers list, save the template and add the parametrization to the layer again.

Using non-English characters in names

Right now we only support English characters. If you have non-English characters in your asset names, or any file you upload to Plainly you will probably get a failed analysis or render.

Applying duplicate scripts

When applying scripts, make sure that you don’t apply duplicate scripts to the same layer.

Wrong After Effects version

Sometimes, even if the analysis goes through that doesn’t exclude the option that you selected wrong After Effects version. Double check that you selected the correct AE version during project upload.

Using unsupported asset files

Adding unsupported asset files in your After Effects project, or sending them during render will always cause a failed render. As a rule of thumb, make sure you’re using .jpg / .png / .mp4 / .mov / .mp3 and .wav files. These are enough to cover all your needs.

Audio not playing properly

If you’re experiencing issues with audio, try using .wav files instead of .mp3.

Using Illustrator / Photoshop files

It’s always a good idea to convert any Illustrator / Photoshop files into .png and .jpg.

Fonts not showing

If you don’t see your fonts in the final render, double check if you added the right font files in your .zip during the custom project upload.

AE effects causing issues

In very rare occasions, a certain AE effect will cause issues. If you went through the whole list from above, and you are still experiencing failed renders or analysis you probably have a certain AE effect in your custom project that’s causing an issue. Go through your project, turn off effects and troubleshoot them one by one.

If you read this whole list, and none of this applies, reach out to us at and we’ll help you out!