Figment.so
Mac hostingWebsite hostingGuidesHow to usePricing

Run After Effects Batch Scripts on a Rented Mac

Short answer: for CPU-heavy compositions (text, shapes, basic effects), request the i3 Mac at $49/month as an overnight batch host. For GPU-accelerated effects (Element 3D, Maxon tools, Metal-accelerated AE effects) or ARM-native plug-ins, request an M-series plan from $95/month — the specific chip, RAM and disk come back on the quote, not from the catalogue. The $29 virtual Intel macOS plan is a real macOS desktop on Linux/KVM with no GPU acceleration and no audio stack, so it is a poor host for AE renders that lean on either. Adobe's aerender flags used below are documented at helpx.adobe.com — Automated rendering and network rendering; confirm them against aerender -help on the exact AE build installed on your rental.

If an overnight motion piece ties up your workstation while you still need the same machine for client reviews, moving the queue onto a rented Mac is the mechanical fix. The rest of this guide is the batch script, the queue hygiene it depends on, and the plan sizing that fits the work.

aerender vs. the GUI Render Queue

aerender is the command-line tool that ships with After Effects. It launches a headless AE instance and processes queue items or named compositions from a project file. Because it runs without the GUI it can be driven from a shell script, logged to a file, and started from a terminal that you then disconnect from.

The GUI Render Queue itself is not single-item — once you click Render it processes every queued output in order within one session. What aerender adds is scripted invocation, a clean exit from a shell, a parseable text log, and no modal dialogs blocking progress. For a two-hour overnight batch those are the things that matter.

FeatureGUI Render Queueaerender CLI
Requires open AE windowYesNo
Multi-composition queue in one sessionYes, processes all queued items in orderYes, same project queue
Scriptable in shell pipelinesNoYes
Parseable text logPartial (Info panel)Yes, via -log or stdout
Suited to unattended / overnight runsFragile (GUI focus, dialogs)Yes

The binary sits beside the AE application; the folder name tracks the installed year:

/Applications/Adobe\ After\ Effects\ 2024/aerender

Run aerender -help on the rental first. Flag names and defaults do change between AE versions, and the installed year on the rental may not match your workstation.

Preparing the Project for Headless Render

Before uploading, run File → Dependencies → Collect Files in After Effects. This copies the project and every referenced asset into one folder with relative paths that resolve on another machine. Skip it and aerender will either stop on missing footage (the default) or — with -continueOnMissingFootage — render placeholder color bars where your footage should be. Neither is a client deliverable.

Pre-flight checklist:

  • Run Collect Files; leave "Reduce Project" off if you need every comp.
  • Open the collected copy once on your workstation and confirm the render queue items point at relative paths inside the collected folder.
  • Confirm that every Output Module and Render Settings template referenced by your queue exists in the collected project. These templates can live in the workstation's AE preferences rather than inside the project, so a queue that renders fine locally can break on a fresh install. If in doubt, re-save a fresh built-in template inside the project.
  • Confirm every third-party plug-in is licensed on the rented Mac. Plug-in licensing is separate from the Creative Cloud subscription.
  • Remove queue items you do not want rendered, or note their indices for -rqindex.

Move the collected folder to the rental through a cloud location you sign in to on the rental itself (Dropbox, Drive or an S3 bucket you own). The $29 VM is reached through a browser console in your Figment account; it is not a verified file-upload or clipboard channel, so authenticate to a bucket from inside the guest and pull the files that way. Physical Intel and M-series access methods are stated in the quote for that specific machine — do not assume they match the VM's path.

The aerender Batch Script

Install jq before using this example; it is not included with macOS. This unexecuted script renders every item already in the project's render queue, writes a log, parses the log for Adobe's known failure markers (aerender has a long-standing habit of exiting 0 even when it logged errors), and posts one Slack notification. Treat it as a starting point and dry-run it against a small test project before trusting it on client work.

#!/usr/bin/env bash
# aerender-batch.sh — verify on your rental before scheduling.
set -euo pipefail

AE_VERSION="${AE_VERSION:-2024}"
AERENDER="/Applications/Adobe After Effects ${AE_VERSION}/aerender"
PROJECT_PATH="${PROJECT_PATH:?set PROJECT_PATH to your .aep}"
LOG_DIR="${LOG_DIR:-$HOME/ae-logs}"
WEBHOOK_FILE="${WEBHOOK_FILE:-$HOME/.slack_webhook}"

mkdir -p "$LOG_DIR"
LOG_FILE="$LOG_DIR/render_$(date +%Y%m%d_%H%M%S).log"
HOST_SHORT="$(hostname -s)"

notify() {
  local msg="$1"
  [[ -r "$WEBHOOK_FILE" ]] || { echo "notify: no webhook file" >&2; return 0; }
  local url body
  url="$(cat "$WEBHOOK_FILE")"
  # Build JSON with jq so a hostname containing quotes or backslashes
  # can never produce a malformed body.
  body="$(jq -nc --arg t "$msg" '{text:$t}')" \
    || { echo "notify: JSON creation failed" >&2; return 0; }
  # --fail returns non-zero on HTTP errors; --max-time bounds the call so
  # a slow Slack never stalls the finished render.
  curl --fail --silent --show-error --max-time 10 \
       -H 'Content-type: application/json' \
       -X POST -d "$body" "$url" >/dev/null \
    || echo "notify: slack post failed, continuing" >&2
}

echo "=== aerender start $(date -u +%FT%TZ) on ${HOST_SHORT} ===" | tee "$LOG_FILE"
notify "AE batch started on ${HOST_SHORT}"

# Default behaviour: fail on missing footage. Opt in to placeholders only
# when color bars for missing assets are genuinely acceptable.
set +e
"$AERENDER" -project "$PROJECT_PATH" >>"$LOG_FILE" 2>&1
AE_RC=$?
set -e

# aerender has historically returned 0 even after logging failures.
# Treat the log as the source of truth.
if grep -Eq 'aerender ERROR|Failed to render|Could not find source file|rendering stopped' "$LOG_FILE"; then
  notify "AE batch FAILED on ${HOST_SHORT} — see ${LOG_FILE}"
  exit 1
fi
if [[ "$AE_RC" -ne 0 ]]; then
  notify "AE batch exited ${AE_RC} on ${HOST_SHORT}"
  exit "$AE_RC"
fi

notify "AE batch exited without detected errors on ${HOST_SHORT}; inspect outputs before delivery."

Flag notes, cross-checked against Adobe's aerender reference linked at the top:

  • With no -comp and no -rqindex, aerender renders every item already in the project's render queue in order.
  • -continueOnMissingFootage is omitted by default in this script. That is intentional: a missing asset should stop the batch and surface in the log rather than ship as placeholder color bars. Add the flag only when you genuinely want placeholder output.
  • -comp "Main_1080p" -output "$HOME/out/Main_[####].png" renders a single named composition; -rqindex 1 targets a specific queue entry.
  • -s and -e override start/end frames; omit them to keep each comp's work area.

The pattern scan is a diagnostic aid, not a complete output validator. Inspect the expected files, duration and representative frames before accepting the batch. A Slack post failure never masks a render failure here — the notifier returns zero regardless, and the render result (log parse + exit code) is the signal that drives the script's exit status.

Running the Batch Without Leaking Your Webhook

Use the remote-access method stated in your physical Mac quote. In Terminal, run chmod +x aerender-batch.sh. Run the secret-entry block below in Bash (/bin/bash); its read options differ from zsh.

Store the Slack webhook URL without putting its value in shell history or displaying it on screen:

umask 077
IFS= read -rs -p "Slack webhook URL: " WEBHOOK && echo
printf '%s\n' "$WEBHOOK" > "$HOME/.slack_webhook"
unset WEBHOOK

read -rs reads silently with no echo. umask 077 restricts a newly created file; run chmod 600 "$HOME/.slack_webhook" as well if the file already existed. The example passes the URL to curl, where it can be visible to a local process inspector during the request. Use this only in your own trusted guest account; use your secret manager for a multi-user runner. Confirm with ls -l ~/.slack_webhook that the mode is -rw-------, then move on.

Launch the job and detach it from the terminal:

export PROJECT_PATH="$HOME/projects/MyMotionProject/MyMotionProject.aep"
# Replace the path and AE_VERSION with the actual installed project and app.
export AE_VERSION="2024"
nohup ./aerender-batch.sh >/dev/null 2>&1 &
disown
echo "PID $!"

A short note on what nohup actually buys you. It prevents a SIGHUP when the controlling terminal closes, which is enough to survive closing the browser console tab. It does not guarantee the process survives a guest restart, a managed suspend by the host, or a macOS user logout — on macOS a logout or reboot ends user processes, and system-managed sleep is a separate concern. Keep the macOS user session signed in while the render runs. A per-user LaunchAgent can also end at logout; do not treat it as a guarantee. Closing the browser console is distinct from logging out of macOS. caffeinate can prevent idle sleep while the user session is active, but it does not disable screen locking or prevent an administrative restart.

Reconnect any time and tail the log:

tail -f ~/ae-logs/render_*.log

Picking the Figment Plan for Your Composition

A short cost worksheet; bring your plug-in list and your longest-comp render time:

ScenarioPlanMonthlyTwelve months
CPU-only text/shape overnight batchesi3 Mac$49 (request)$588
GPU/Metal effects, ARM-native plug-insM-series (entry)from $95 (request)from $1,140
Managed: one M-series Mac, CI setup, backups, monitoring, 30 min/mo supportManaged Build Mac$249$2,988
Intel toolchain evaluation, no GPU/audio$29 virtual Intel macOS$29$348

For an M-series sanity check against a comparable rental, MacStadium's pricing page lists the M4.S (M4 10-core, 16 GB RAM, 256 GB SSD) at $149/month and the M2.S (M2 8-core, 8 GB RAM, 256 GB SSD) at $109/month, with support, bandwidth and a dedicated IP included and a published 99.99% uptime target. Figment's $95 is an M-series entry price; the exact chip, RAM and disk are stated in your quote, so compare the returned configuration against MacStadium's named row rather than assuming equivalent hardware. For a job that is mostly CPU-bound text and shape work, the i3 Mac at $49/month beats both on headline price; for GPU effects on M-series silicon, decide on the quoted configuration, not the entry number.

The $29 virtual Intel macOS runs a real macOS desktop, useful for Intel-compatible toolchains — Apple's porting guide says Intel Macs must use Xcode 26 or an earlier release. AE renders that lean on Metal GPU or the audio stack belong on a physical Mac.

One last Adobe note: a single-user Creative Cloud subscription may be activated on two machines but may not be used on both at the same time. Quit After Effects on your workstation before launching it on the rental, or add a seat. Plug-in licences are separate; move or purchase them per your vendor's terms.

Ready to size a plan? Start a rental at /mac-hosting/start and include the composition count, the longest expected comp render, the plug-in list and whether GPU-accelerated effects are in the stack. The returned quote will state the exact M-series configuration when that tier is the right fit.

Related reading:


Subscribe for Figma design and website publishing guides.


Figment.so

Contact

Twitter

Website pricing

Compute index

About

Privacy

Terms