Watermarking Guide

Rendobar provides four watermarking job types: simple single-image overlay, multi-watermark compositing with mixed image and text, AI-powered removal, and watermark detection.

Add a single image watermark

Use watermark.add for the simplest case — one image watermark on a video.

curl -X POST https://api.rendobar.com/jobs \
  -H "Authorization: Bearer rb_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "watermark.add",
    "inputs": {
      "source": "https://example.com/video.mp4",
      "watermark": "https://cdn.rendobar.com/assets/brand/logo-full.png"
    },
    "params": {
      "position": "bottom-right",
      "scale": 0.15,
      "opacity": 0.8,
      "padding": 20,
      "quality": "balanced"
    }
  }'

Parameters

ParameterTypeDefaultDescription
positionenumbottom-rightOne of 9 positions: top-left, top-center, top-right, center-left, center, center-right, bottom-left, bottom-center, bottom-right
scalenumber0.15Watermark size relative to video width (0.01–1)
opacitynumber0.8Watermark transparency (0–1)
paddinginteger20Distance from edge in pixels (0–500)
qualityenumbalancedOutput encoding: fast (quick, larger file), balanced, high (slow, best quality)
timeRangeobjectOptional. Show watermark only during { start, end? } seconds

Time-ranged watermark

Show the watermark only between 5 and 30 seconds:

{
  "params": {
    "position": "top-right",
    "timeRange": { "start": 5, "end": 30 }
  }
}

Omit end to show the watermark from a timestamp through the end of the video.

Composite multiple watermarks

Use watermark.composite to apply multiple watermarks (images and text) in a single pass.

curl -X POST https://api.rendobar.com/jobs \
  -H "Authorization: Bearer rb_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "watermark.composite",
    "inputs": {
      "source": "https://example.com/video.mp4"
    },
    "params": {
      "watermarks": [
        {
          "type": "image",
          "url": "https://cdn.rendobar.com/assets/brand/logo-full.png",
          "position": "bottom-right",
          "scale": 0.12,
          "opacity": 0.9
        },
        {
          "type": "text",
          "content": "© 2026 Acme Corp",
          "position": "bottom-left",
          "fontSize": 18,
          "color": "#FFFFFF"
        },
        {
          "type": "image",
          "url": "https://example.com/badge.png",
          "position": "top-right",
          "scale": 0.08
        }
      ],
      "quality": "balanced"
    }
  }'

Image watermark fields

FieldTypeDefaultDescription
type"image"Required discriminator
urlstringRequired. URL to watermark image
positionenumbottom-right9-position grid
scalenumber0.15Size relative to video width
opacitynumber0.8Transparency (0–1)
paddinginteger20Edge distance in pixels
timeRangeobjectOptional { start, end? }

Text watermark fields

FieldTypeDefaultDescription
type"text"Required discriminator
contentstringRequired. Text to display (1–500 chars)
positionenumbottom-left9-position grid
fontSizeinteger24Font size (8–200)
fontenumArialOne of: Arial, Roboto, Courier, Georgia
colorstring#FFFFFFHex color (#RRGGBB)
boxColorstringOptional background box hex color
boxPaddinginteger5Background box padding (0–50)
opacitynumber0.8Transparency (0–1)
paddinginteger15Edge distance in pixels
timeRangeobjectOptional { start, end? }

Up to 10 watermarks per job. Source video URL goes in inputs, watermark URLs go inside each watermark object in params.watermarks.

Remove a watermark

Use watermark.remove to remove watermarks using AI detection or manual region coordinates.

curl -X POST https://api.rendobar.com/jobs \
  -H "Authorization: Bearer rb_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "watermark.remove",
    "inputs": {
      "source": "https://example.com/video.mp4"
    },
    "params": {
      "mode": "auto",
      "method": "inpaint",
      "strength": 20,
      "quality": "balanced"
    }
  }'
ParameterTypeDefaultDescription
modeenumautoauto (AI detection) or manual (specify regions)
methodenuminpaintinpaint (AI fill) or blur (gaussian blur)
strengthinteger20Blur/inpaint strength (1–100)
qualityenumbalancedOutput quality preset
regionsarrayManual mode only: [{ x, y, width, height }]

Detect watermarks

Use watermark.check to analyze frames for watermark presence. This is a P1 (sync) job — results return immediately.

curl -X POST https://api.rendobar.com/jobs \
  -H "Authorization: Bearer rb_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "watermark.check",
    "inputs": {
      "frames": ["https://example.com/frame1.jpg", "https://example.com/frame2.jpg"]
    },
    "params": {
      "threshold": 0.5
    }
  }'

Returns detection results with per-frame confidence, bounding boxes, watermark type classification (logo, text, pattern), and a summary with the dominant watermark region.

Cost

Job TypeCost Model
watermark.apply~$0.50/min of output
watermark.composite~$0.50/min of output
watermark.remove~$0.50/min of output
watermark.check$0.10 flat

Invisible watermarking

Invisible watermarks are imperceptible to the human eye but can be reliably detected and decoded by Rendobar. They survive JPEG compression, resizing, screenshots, and moderate image editing.

Use cases:

  • Copyright tracking and proof of origin
  • Authenticating AI-generated images
  • Tracing unauthorized distribution
  • Linking images to specific users or sessions

Rendobar uses Meta VideoSeal 1.0 (MIT license) for invisible watermarking, with BCH error-correcting codes for robustness.

Embed an invisible watermark

Supports UUID payloads (for unique tracking) or plain text up to 16 bytes (for labels like "ACME-42").

curl -X POST https://api.rendobar.com/jobs \
  -H "Authorization: Bearer rb_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "watermark.embed",
    "inputs": {
      "source": "https://example.com/photo.jpg"
    },
    "params": {
      "payload": "a3f8c2d1-b4e5-4f67-8a9b-c0d1e2f3a4b5",
      "strength": "standard",
      "outputFormat": "match",
      "outputQuality": 95
    }
  }'

Embed parameters

ParameterTypeDefaultDescription
payloadstringRequired. UUID (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) or plain text up to 16 bytes
strengthenumstandardstandard (balanced quality) or robust (survives heavier transforms, slight PSNR reduction)
outputFormatenummatchmatch (same as input), png, jpeg, or webp
outputQualityinteger95JPEG/WebP quality (60–100). Ignored for PNG.

Embed response

{
  "data": {
    "id": "job_abc123",
    "status": "complete",
    "result": {
      "ref": "jobs/job_abc123/output.jpg",
      "format": "jpeg",
      "dimensions": [1920, 1080],
      "payloadType": "uuid",
      "strength": "standard",
      "algorithm": "videoseal-1.0"
    }
  }
}

Detect an invisible watermark

Extracts the watermark from an image and returns the decoded payload.

curl -X POST https://api.rendobar.com/jobs \
  -H "Authorization: Bearer rb_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "watermark.detect",
    "inputs": {
      "source": "https://example.com/watermarked.jpg"
    },
    "params": {}
  }'

Detect response (extract mode)

{
  "data": {
    "id": "job_xyz789",
    "status": "complete",
    "result": {
      "found": true,
      "payload": "a3f8c2d1-b4e5-4f67-8a9b-c0d1e2f3a4b5",
      "payloadType": "uuid",
      "confidence": 0.94,
      "bitsRecovered": 256,
      "bitsCorrected": 3,
      "algorithm": "videoseal-1.0"
    }
  }
}

Verify mode

Pass expectedPayload to check whether a specific watermark is present, without revealing the decoded payload in the response.

curl -X POST https://api.rendobar.com/jobs \
  -H "Authorization: Bearer rb_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "watermark.detect",
    "inputs": {
      "source": "https://example.com/photo.jpg"
    },
    "params": {
      "expectedPayload": "a3f8c2d1-b4e5-4f67-8a9b-c0d1e2f3a4b5"
    }
  }'

Verify response

{
  "data": {
    "id": "job_xyz789",
    "status": "complete",
    "result": {
      "match": true,
      "confidence": 0.94,
      "bitsRecovered": 256,
      "bitsCorrected": 3,
      "algorithm": "videoseal-1.0"
    }
  }
}

Requirements

  • Image format: JPEG, PNG, or WebP
  • Minimum dimensions: 256×256 pixels
  • Plan: Starter or higher (invisible watermarking is not available on the Free plan)
  • Cost: $0.03 flat per image (both embed and detect)

Reliability notes

Invisible watermarks survive:

  • JPEG re-encoding at quality ≥ 70
  • Resizing to at least 50% of original dimensions
  • Moderate brightness/contrast adjustments
  • Screenshots (screen capture)

They may not survive:

  • Heavy cropping (removing more than 50% of the image)
  • Severe compression (JPEG quality < 60)
  • Artistic filters, heavy blurring, or style transfer