Marketing agencies deal with an unusually wide variety of file formats. Clients deliver source files in Photoshop (PSD), Illustrator (AI), or Keynote. Video assets need to be MP4 for one platform, WebM for another, GIF for email. Photos arrive as RAW from shoots, HEIC from phones, and TIFF from photographers. Every handoff involves a format conversion step — and not every team member has Photoshop or Premiere just to do a format conversion.

Format friction in agency workflows

Agencies handle format conversion at multiple points in every project:

  • Client deliverables — source files in PSD, AI, or INDD need to become web-ready formats (JPG, PNG, WebP) without requiring a full creative suite to perform the conversion. The account manager who needs to send a quick preview shouldn't need Photoshop installed.
  • Video asset preparation — clients provide video in whatever their camera or phone produces (MOV, MKV, HEVC). Web needs MP4 (H.264). Social platforms have different aspect ratio and format requirements. Video format conversion is constant.
  • Email marketing assets — email clients have strict file size and format requirements. PNG screenshots need to be under 1MB JPG. GIF animations need to be generated from video clips. WebP isn't universally supported in email, so conversion to JPG is needed.
  • Deck production — PPTX presentations for client review and campaign planning need to be PDF for clean, consistent rendering across devices. Clients with different PowerPoint versions shouldn't see layout shifts.
  • CDN optimization — images uploaded to the agency's CMS or CDN need to be in modern formats (WebP, AVIF) for performance. Raw uploads from clients in PNG or TIFF need to be converted before deployment.

Common format pairs in marketing agencies

The conversion routes marketing agencies hit most:

  • PSD → JPG / PNG / WebP — export Photoshop designs for web delivery without opening Photoshop
  • PNG → WebP / AVIF — convert design assets to modern formats for CDN performance
  • JPG → WebP — bulk convert photography and product images for web optimization
  • PPTX → PDF — client-facing decks, strategy presentations, and campaign proposals
  • MP4 → GIF — create animated previews for email, Slack, or social media from video clips
  • MOV → MP4 — normalize iPhone/Mac video exports to web-standard MP4
  • HEIC → JPG — convert iPhone photos from shoots or client-provided content
  • GIF → MP4 / WebM — convert animated GIFs to video for social platform upload (smaller file, better quality)
  • SVG → PNG — render vector logos for use in contexts that don't support SVG
  • DOCX → PDF — creative briefs, SOWs, and reports for client delivery

The browser tool: fast, no-install asset conversions

PSD → PNG, PNG → WebP, SVG → PNG, and most image conversions run entirely in the browser at changethisfile.com — no upload for most image routes. For account managers or coordinators who need to do a quick format conversion and don't have design software installed, this is the right tool.

Video conversions require server-side processing — MP4 → GIF, MOV → MP4 involve FFmpeg on the server. Files are uploaded, converted, and auto-deleted.

The browser tool is the right choice for:

  • One-off asset conversions during review cycles
  • Account managers who need to prep a preview without design software
  • Quick format checks before committing to an API integration

API integration for agency asset pipelines

The endpoint is POST https://changethisfile.com/v1/convert. Source format auto-detected from filename. No SDK to install. Get a free API key.

Convert a PSD to WebP for web delivery

curl -X POST https://changethisfile.com/v1/convert \
  -H "Authorization: Bearer ctf_sk_your_key" \
  -F "file=@hero_banner.psd" \
  -F "target=webp" \
  --output hero_banner.webp

Generate a GIF preview from a video clip

curl -X POST https://changethisfile.com/v1/convert \
  -H "Authorization: Bearer ctf_sk_your_key" \
  -F "file=@product_demo.mp4" \
  -F "target=gif" \
  --output product_demo.gif

Batch convert campaign images to WebP

for IMG in campaign-assets/*.png; do
  BASE=$(basename "$IMG" .png)
  curl -sX POST https://changethisfile.com/v1/convert \
    -H "Authorization: Bearer $CTF_API_KEY" \
    -H "Idempotency-Key: campaign-q2-${BASE}" \
    -F "file=@${IMG}" \
    -F "target=webp" \
    -o "campaign-assets/webp/${BASE}.webp"
done

Code example: bulk asset conversion for CDN upload

Agency CMS upload pipeline: accept any image format from clients, convert to WebP for CDN, return the optimized URL. No SDK — plain requests and fetch.

import requests
from pathlib import Path
from uuid import uuid4

CTF_API_KEY = "ctf_sk_your_key_here"

# Formats that benefit from WebP conversion for web delivery
WEB_CONVERT = {".png", ".jpg", ".jpeg", ".psd", ".tiff", ".tif", ".bmp", ".heic"}

def prepare_for_cdn(file_path: Path, project_slug: str) -> tuple[bytes, str]:
    """Convert creative asset to WebP for CDN storage."""
    ext = file_path.suffix.lower()

    if ext not in WEB_CONVERT:
        return file_path.read_bytes(), file_path.name

    with open(file_path, "rb") as f:
        resp = requests.post(
            "https://changethisfile.com/v1/convert",
            headers={
                "Authorization": f"Bearer {CTF_API_KEY}",
                "Idempotency-Key": f"{project_slug}-{file_path.stem}",
            },
            files={"file": (file_path.name, f)},  # source auto-detected
            data={"target": "webp"},
            timeout=30,
        )
    resp.raise_for_status()
    return resp.content, file_path.stem + ".webp"

# Process a client's asset delivery folder
asset_dir = Path("./client-assets/q2-campaign/")
for asset in sorted(asset_dir.iterdir()):
    if asset.is_file():
        data, out_name = prepare_for_cdn(asset, "q2-campaign")
        out_path = asset.parent / "cdn-ready" / out_name
        out_path.parent.mkdir(exist_ok=True)
        out_path.write_bytes(data)
        print(f"{asset.name} → {out_name} ({len(data):,} bytes)")

JavaScript fetch version:

const WEB_CONVERT = new Set(['.png', '.jpg', '.jpeg', '.psd', '.tiff', '.tif', '.bmp', '.heic']);

async function prepareForCdn(fileBuffer, filename, projectSlug) {
  const ext = filename.slice(filename.lastIndexOf('.')).toLowerCase();
  if (!WEB_CONVERT.has(ext)) return { data: fileBuffer, filename };

  const form = new FormData();
  form.append('file', new Blob([fileBuffer]), filename); // source auto-detected
  form.append('target', 'webp');

  const resp = await fetch('https://changethisfile.com/v1/convert', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.CTF_API_KEY}`,
      'Idempotency-Key': `${projectSlug}-${filename.replace(/\.[^.]+$/, '')}`,
    },
    body: form,
  });
  if (!resp.ok) throw new Error(`${resp.status}: ${await resp.text()}`);
  return { data: Buffer.from(await resp.arrayBuffer()), filename: filename.replace(/\.[^.]+$/, '.webp') };
}

curl one-liner:

curl -sX POST https://changethisfile.com/v1/convert \
  -H "Authorization: Bearer $CTF_API_KEY" \
  -F "file=@campaign_hero.psd" \
  -F "target=webp" \
  -o campaign_hero.webp

Pricing for agency scale

PlanConversions/monthPriceFits
Free1,000$0Freelancer or small agency evaluation
Hobby10,000$29/moSmall agency with a few active clients
Startup50,000$99/moMid-size agency with active campaign production
Scale500,000$499/moLarge agency or automated asset pipeline serving multiple brands
Growth5,000,000$1,999/moAgency platform, DAM integration, or multi-brand enterprise asset pipeline

A campaign producing 200 web assets plus 20 video previews and 30 document conversions is around 250 conversions — well within free for one campaign, Hobby for ongoing production. An agency running automated pipelines for multiple brands needs Startup or Scale.

FAQ

Does PSD → WebP flatten all layers?

Yes — PSD conversion flattens the layer stack to a single composite image. If you need specific layer exports or layer comps, that's a Photoshop operation, not a format conversion. The API converts the flattened composite.

Can I convert MP4 to WebM for video backgrounds?

Yes — MP4 → WebM is a supported route. WebM (VP8/VP9 codec) is widely supported in modern browsers and typically smaller than H.264 MP4 at equivalent quality. Use it for web video backgrounds and HTML5 video elements.

What about AI (Illustrator) to SVG or PNG?

AI → PDF and AI → PNG are supported via LibreOffice. AI → SVG round-tripping isn't reliable because the AI format and SVG have different feature sets. For vector-to-web workflows, exporting SVG directly from Illustrator is more reliable than converting.

Are there quality settings for image conversions?

The API uses default quality settings tuned for good output. There are no per-request quality parameters currently. For WebP and JPG, the defaults produce good quality at reasonable file sizes for web use.

Can I automate conversion on S3 upload?

Yes. A Lambda function triggered by S3 PutObject events can call the API to convert and store the result. The async mode with webhook is the right approach for large video files — the Lambda triggers the conversion job, and a webhook notifies your system when done.

Guides for agency asset workflows: