Agency asset management has one constant: the file you received is never the format you need. A client sends a PSD; you need PNG for the developer. The print shop wants PDF/X; you have a PowerPoint. The client wants a GIF of the brand video; you have an MP4. Most of these conversions are two-minute tasks that somehow eat twenty minutes once you've tracked down the right tool, remembered the right export settings, and decompressed the archive the client sent.
ChangeThisFile is built for exactly this — fast, format-specific conversions in the browser with no account needed for most tasks.
Format problems agencies deal with every day
These are the actual friction points in agency asset workflows:
- Client-supplied files in the wrong format — HEIC from iPhones, PSD when you need PNG, DOCX briefs that need to become PDF sign-offs
- Print-to-digital hand-offs — CMYK TIFF to RGB JPEG for web, high-DPI print PDFs to compressed web PDFs
- Video repurposing — cut a full-resolution MOV down to MP4 for email, WebM for web embed, GIF for Slack
- Presentation format hand-offs — PPTX to PDF for sharing with clients who don't have PowerPoint
- Social media format requirements — JPEG/PNG at the right dimensions for each platform, WebP for Google ads
- Archive delivery — ZIP up final deliverables for client handoff, or extract assets from a client-supplied RAR
- Font format conversion — TTF to WOFF2 for web use, OTF to TTF for clients who need it
Format pairs agencies convert most often
Specific pairs that come up in agency workflows:
- PSD → PNG / JPG — flatten Photoshop files for delivery or web use (client-side, files stay local)
- HEIC → JPG — normalize iPhone photos from clients before editing or uploading
- PPTX / PPT → PDF — share presentations with clients who can't open PowerPoint
- MOV / MP4 → MP4 / WebM / GIF — transcode or repurpose brand video for different channels
- AI / EPS → PNG / SVG — convert Illustrator files for web handoff (LibreOffice engine)
- TIFF → JPG / PNG — compress large print images for web or email use
- SVG → PNG — render vector assets at specific dimensions for social posts
- RAR / 7Z → ZIP — repackage client-supplied archives in a universally openable format
- DOCX → PDF — finalize client deliverables and proposals as non-editable PDFs
The browser tool for everyday conversions
For one-off conversions, changethisfile.com is the fastest path. Drop the file, pick the target format, download. No account, no signup.
Image conversions (PSD, HEIC, TIFF, SVG, PNG, JPG, WebP, GIF) run entirely in the browser — files never leave your device. This matters for client files with NDAs: nothing is uploaded, nothing is stored.
Document and video conversions (PPTX, DOCX, MOV, MP4) upload to the server for processing and are auto-deleted after conversion. The transfer is encrypted.
Batch conversions in the browser
The converter accepts multiple files. Drop a batch of HEIC photos and they all convert to JPG in one operation. For larger batches or recurring workflows, the API is more practical.
Automating recurring format workflows with the API
If you're doing the same conversion every week — repurposing brand video, normalizing client photo deliveries, generating PDF sign-offs — automate it. The API is free for 1,000 conversions/month. Get a key (no card needed).
import requests
from pathlib import Path
CTF_API_KEY = "ctf_sk_your_key_here"
def batch_heic_to_jpg(input_dir: str, output_dir: str) -> list[str]:
"""Convert all HEIC files in a directory to JPG."""
in_dir = Path(input_dir)
out_dir = Path(output_dir)
out_dir.mkdir(parents=True, exist_ok=True)
converted = []
for heic_file in sorted(in_dir.glob("*.heic")):
with open(heic_file, "rb") as f:
resp = requests.post(
"https://changethisfile.com/v1/convert",
headers={"Authorization": f"Bearer {CTF_API_KEY}"},
files={"file": f},
data={"source": "heic", "target": "jpg"},
timeout=30,
)
resp.raise_for_status()
out_path = out_dir / heic_file.with_suffix(".jpg").name
out_path.write_bytes(resp.content)
converted.append(str(out_path))
print(f"Converted: {heic_file.name} → {out_path.name}")
return converted
results = batch_heic_to_jpg("./client-photos", "./client-photos-web")
print(f"Done: {len(results)} files converted")
Code example: video-to-GIF for Slack and social
A common agency task: extract a short clip from a brand video and convert to GIF for use in Slack previews, email, or social posts.
import requests
from pathlib import Path
CTF_API_KEY = "ctf_sk_your_key_here"
def mp4_to_gif(mp4_path: str, output_path: str) -> str:
"""Convert MP4 clip to GIF."""
with open(mp4_path, "rb") as f:
resp = requests.post(
"https://changethisfile.com/v1/convert",
headers={"Authorization": f"Bearer {CTF_API_KEY}"},
files={"file": f},
data={"source": "mp4", "target": "gif"},
timeout=120,
)
resp.raise_for_status()
Path(output_path).write_bytes(resp.content)
return output_path
# Also useful: mp4 → webm for web embeds
def mp4_to_webm(mp4_path: str, output_path: str) -> str:
with open(mp4_path, "rb") as f:
resp = requests.post(
"https://changethisfile.com/v1/convert",
headers={"Authorization": f"Bearer {CTF_API_KEY}"},
files={"file": f},
data={"source": "mp4", "target": "webm"},
timeout=120,
)
resp.raise_for_status()
Path(output_path).write_bytes(resp.content)
return output_path
GIF files from video are processed by FFmpeg server-side. For best results, keep source clips under 10 seconds. Longer clips produce GIFs that are too large to share via Slack or email.
Pricing for agency usage
| Plan | Conversions/month | Price | Right for |
|---|---|---|---|
| Free | 1,000 | $0 | One-off jobs, small agencies, browser tool for most tasks |
| Hobby | 10,000 | $29/mo | Regular batch workflows, 5-10 client projects active at once |
| Startup | 50,000 | $99/mo | High-volume agencies, automated pipelines, large client rosters |
Most agencies doing occasional batch conversions find the free tier sufficient. The Hobby plan at $29/mo covers agencies with regular weekly automation scripts.
FAQ
Are client files uploaded to your servers?
Image conversions (HEIC, PSD, TIFF, PNG, JPG, etc.) run entirely in the browser — files never leave the device. Document and video conversions (DOCX, PPTX, MP4, MOV) upload to our servers for processing and are auto-deleted immediately after conversion. No file content is logged or retained.
What's the file size limit?
Browser tool and free API tier: 25MB per file. This covers most design assets and short video clips. For large video files (HD recordings, full-length brand videos), use the Hobby plan or above which has higher size limits.
Can I convert AI (Adobe Illustrator) files?
Yes — AI and EPS files convert to PNG, JPG, SVG, and PDF via the LibreOffice engine. Results vary depending on the complexity of the file. Test with a representative sample first.
Does the converter handle multi-page PDFs?
Yes. PDF to JPG/PNG produces one image per page returned as a ZIP. PDF to DOCX attempts content extraction. For presentation-quality PDF exports, PPTX → PDF via LibreOffice produces better results than PDF round-trips.
Can I automate ZIP packaging for client deliverables?
Not directly — the API converts format pairs, it doesn't bundle files. For ZIP packaging, use Python's built-in zipfile module after conversion. The API does support archive extraction and re-archiving (ZIP ↔ 7Z ↔ TAR, etc.).
How do I convert PPTX to PDF?
Drop the PPTX at changethisfile.com/pptx-to-pdf or use the API with source=pptx&target=pdf. LibreOffice handles the conversion server-side, preserving layout including most custom fonts.
Related guides
Format-specific guides for common agency tasks: