Never build an image pipeline again.

Stop wasting weekends configuring AWS S3, CloudFront distributions, Lambda resize workers, and IAM permissions.

Upload any image once. ROC automatically optimizes it, fixes sideways phone uploads, strips private data, and lets you resize it right in the URL. Built for solo developers, agencies, and e-commerce stores.

30 seconds

Zero cloud setup

No AWS IAM, bucket policies, or CORS headaches. One clean API key and you're live in 30 seconds.

?w=300&h=300

Resize right in the URL

Need a new avatar size or product crop? Change the URL query parameter. Never re-process files or touch the database.

85% leaner

Store 5× more images

We store a single WebP master, not 5 duplicate files. Your storage plan stretches further with zero wasted space.

Compare output formats on your own imageRuns in your browser at quality 85. Nothing is uploaded.
Image being converted
sample.pngPreparing sample
WebP
 
 
JPEG
 
 
PNG
 
 

Client-proof optimization on every upload

Whether it's a 15 MB DSLR photo or a messy smartphone screenshot, ROC makes it web-ready before returning your URL.

1

Validate

Accepts JPEG, PNG, WebP & AVIF. Blocks corrupted uploads before anything touches storage.

2

Auto-Orient

Detects phone camera rotation so user uploads never show up sideways on your site.

3

Privacy Shield

Strips hidden camera EXIF data and private GPS location before publishing.

4

Featherlight WebP

Compresses into a single WebP master. Raw 10 MB camera files shrink to ~300 KB with zero visible loss.

Safe replacements

Replacing an avatar or banner? The old image stays live until the new one is safely written, so uploads never break.

100% Storage Freedom

No arbitrary asset counter. You are only billed for actual bytes on disk, so you can upload thousands of images freely.

Instant Edge Delivery

Every image is served with 1-year immutable caching and instant 304 revalidation for lightning-fast page speeds.

Redesign your app without touching your database

Change image dimensions, aspect ratios, or formats right where you write your HTML or CSS.

wh Width and height in pixels (1 to 3840px)
fit cover, contain, inside or fill for responsive crops
q Quality tuning (1 to 100) to optimize mobile file weight
format jpg, png, or webp for legacy clients and emails
# master
roc.phyr.in/:appId/:assetId

# thumbnail
roc.phyr.in/:appId/:assetId?w=320&h=320

# square avatar
roc.phyr.in/:appId/:assetId?w=120&h=120&fit=cover&q=80

# JPEG for email
roc.phyr.in/:appId/:assetId.jpg

Zero variant maintenance

Need a 120px round avatar or a 400px product card? Pass it in the URL. Stored files remain completely untouched.

Faster mobile checkouts

Deliver lightweight thumbnails to mobile shoppers instead of downloading heavy full-resolution hero photos.

Smart edge caching

Each custom width, crop, and format combination is cached at the edge for instant subsequent page loads.

Built for builders who value their time

Whether you are shipping a solo side project, running client sites, or scaling an online store.

Solo Developers & Indie Hackers

You’re building a product, not an infrastructure company. Don't waste your weekend writing Lambda triggers, configuring S3 buckets, and debugging CORS errors. Upload with one POST request, get a CDN URL, and get back to shipping features.

  • One API key and zero cloud DevOps
  • On-the-fly resizing with ?w= and ?h=
  • Predictable flat pricing with no surprise AWS bills

Agencies & Freelancers

Non-technical clients always upload 15 MB uncompressed photos straight from their phone, wrecking page speed and layout grids. ROC automatically compresses, rotates, and serves every client upload so client sites stay blazing fast on Google Lighthouse.

  • Client-proof uploads: photos never show up sideways
  • Clean 100 Google Lighthouse page speed scores
  • Painless client handover without teaching AWS console

E-commerce & Online Stores

Heavy, slow product images kill mobile conversions. With ROC, one product photo powers your entire store: use uniform square crops for catalog grids, high-res zoom for product detail pages, and lightweight thumbnails for cart sliders.

  • Clean, uniform product grids using fit=cover
  • Instant mobile page loads that boost checkout rates
  • Full transparency support for product cutouts with PNG

Product Managers & Fast Teams

Improve Core Web Vitals, reduce bounce rates, and improve SEO rankings without pulling backend engineers away from your product roadmap. ROC delivers production-ready image infrastructure with flat yearly pricing.

  • Unblock your engineering roadmap immediately
  • Modern WebP delivery with automatic browser fallbacks
  • Real-time usage tracking via GET /api/v1/usage

Email Campaigns & Mobile Apps

Many email clients (like Outlook) still don't render modern WebP. Simply append .jpg or ?format=jpg to any asset URL for instant on-the-fly JPEG delivery. For mobile apps, private user GPS location data is automatically stripped on upload.

  • Guaranteed email client compatibility with .jpg
  • Private GPS and camera EXIF data automatically removed
  • Responsive mobile sizes for high-density Retina screens

Why builders switch from AWS S3

S3 and R2 are raw object buckets built for generic data. ROC is a purpose-built image engine that saves you days of DevOps engineering.

ROC AWS S3 Cloudflare R2
Setup Time 30 seconds (1 API key) Hours (IAM, Bucket policies, CORS) Complex (Tokens, buckets, workers)
Image Resizing Instant via URL (?w=300) Write & maintain Lambda@Edge Requires separate paid add-on
Format Optimization Automatic WebP, JPEG, PNG Build your own Sharp pipeline Requires custom worker scripts
Client Upload Protection Auto-orient, compress & strip EXIF None (Stores raw 15 MB files as-is) None (Stores raw 15 MB files as-is)
Billing Predictability Flat yearly plan (Zero surprise bills) Complex multi-metered billing Egress + operation math
Best for Solo devs, agencies & e-commerce General enterprise cloud backups Large-scale unstructured objects

Predictable yearly pricing

Flat storage quota in GB. No surprise bandwidth fees, no per-transformation charges, no egress tax.

Spark

Side projects and early products

₹4,999/year
2 GB storage
  • Resize and convert via URL
  • Upload, replace, delete API
  • Usage endpoint
  • Asset dashboard
Get API key
Popular

Aura

Production apps

₹7,499/year
5 GB storage
  • Resize and convert via URL
  • Upload, replace, delete API
  • Usage endpoint
  • Asset dashboard
Get API key

Crown

Image-heavy products

₹9,999/year
10 GB storage
  • Resize and convert via URL
  • Upload, replace, delete API
  • Usage endpoint
  • Asset dashboard
Get API key
Add-on: ₹100 per additional 100 MB Available on any plan.

Five endpoints

REST over HTTPS, no SDK. Uploads, replaces, deletes and usage reads need an x-api-key header. Delivery URLs are public.

POST/api/v1/assets

Upload an image as multipart/form-data in the file field.

POST/api/v1/assets/replace

Pass image url (or assetId) and a new file. The old file is removed only after the new one is saved.

DELETE/api/v1/assets

Delete by image ?url=... or :assetId. Removes stored files and reclaims quota immediately.

GET/api/v1/usage

Returns live storage used, quota limit, plan details and active assets.

GET/:applicationId/:assetId

Public delivery. Add ?w=, &h=, &fit= and &q= to transform, or .jpg / ?format=jpg to convert.

curl -X POST https://roc.phyr.in/api/v1/assets \
  -H "x-api-key: YOUR_API_KEY" \
  -F "file=@/path/to/picture.jpg"

# response
{ "success": true,
  "data": {
    "assetId": "39a1d82f7c01b4e2",
    "url": ".../39a1d82f7c01b4e2" } }

# check storage and plan
curl https://roc.phyr.in/api/v1/usage \
  -H "x-api-key: YOUR_API_KEY"
const formData = new FormData();
formData.append('file', fileBlob, 'photo.png');

const res = await fetch(
  'https://roc.phyr.in/api/v1/assets', {
    method: 'POST',
    headers: { 'x-api-key': 'YOUR_API_KEY' },
    body: formData
  });
const { data } = await res.json();

// any size, from the same master
const avatar = data.url + '?w=120&h=120&fit=cover&q=80';
import requests

res = requests.post(
    "https://roc.phyr.in/api/v1/assets",
    headers={"x-api-key": "YOUR_API_KEY"},
    files={"file": open("picture.jpg", "rb")},
)
url = res.json()["data"]["url"]

# any size, from the same master
thumb = url + "?w=320&h=320"

usage = requests.get(
    "https://roc.phyr.in/api/v1/usage",
    headers={"x-api-key": "YOUR_API_KEY"},
).json()
<!-- master -->
<img src="https://roc.phyr.in/:appId/:assetId" alt="">

<!-- dynamic thumbnail -->
<img src="https://roc.phyr.in/:appId/:assetId?w=320&h=320"
     width="320" height="320" alt="">

<!-- avatar crop -->
<img src="https://roc.phyr.in/:appId/:assetId?w=120&h=120&fit=cover&q=80"
     width="120" height="120" alt="">

<!-- legacy email client -->
<img src="https://roc.phyr.in/:appId/:assetId.jpg" alt="">
# master
GET /:appId/:assetId

# dynamic thumbnail
GET /:appId/:assetId?w=320&h=320

# avatar crop
GET /:appId/:assetId?w=120&h=120&fit=cover&q=80

# legacy email / JPEG
GET /:appId/:assetId.jpg
GET /:appId/:assetId?format=jpg

HTTP/1.1 200 OK
Cache-Control: public, max-age=31536000, immutable
ETag: "<one per w, h, q, fit, format>"

Frequently asked questions

Why should I use ROC instead of AWS S3 or Cloudflare R2?

S3 and R2 are raw storage buckets. To make them work for a modern web app or store, you have to configure IAM permissions, bucket policies, CloudFront distributions, and maintain serverless Lambda functions to resize images. ROC gives you a complete, ready-to-use image backend: upload with one API key, get automated WebP compression, phone photo auto-rotation, private GPS stripping, and on-demand URL resizing with zero cloud DevOps.

How does dynamic URL resizing work?

Upload your image once. When rendering it in your app, website, or newsletter, simply append query parameters like ?w=320&h=320&fit=cover to the URL. ROC transforms the image on the fly, applies immutable edge caching, and streams the optimized asset instantly.

What happens when users or clients upload massive 15 MB smartphone photos?

ROC handles them automatically. It corrects camera rotation, strips heavy metadata, and compresses the photo into a featherlight WebP master (~200–400 KB). Your website or app never slows down from raw user uploads.

What about older email clients like Outlook that don't support WebP?

Simply append .jpg or ?format=jpg to any asset URL. ROC converts and streams a high-quality JPEG in memory with the same long-lived caching headers.

Is my plan quota counted in number of images or total storage?

By total storage on disk (in GB). You are never penalized for uploading thousands of small images or thumbnails; you only pay for actual bytes stored.

Can I safely update or replace an image without breaking live links?

Yes. The atomic replace endpoint verifies and saves the new image before retiring the old one. If an upload fails midway, your current live image remains safely in place.

Start shipping images in 30 seconds.

Get API key

Get your API key

Tell us about your project and we'll set up your key.

We only use this to set up your key.