Integrations

Read this if you know where your outputs are produced and want the page that wires Laidline in there. You will pick a mode and a guide, and see what each integration was tested on. Skip if you want the product in brief first (Overview). Time: 3 minutes. Needs: nothing.

Every mode writes the same three things for each output: Content Credentials, a watermark and an evidence entry. The modes differ only in where Laidline sits: in your process (library), on your bucket (storage hook), in front of your API (sidecar proxy) or inside your framework (plugin).

Pick a mode

Where your outputs are produced Mode Guide
in your own Python process (a GPU worker, a container, a Kubernetes job) Library: Marker in your code Quickstart
a diffusers pipeline you run Plugin: laidline-diffusers diffusers
a ComfyUI workflow Plugin: laidline-comfyui ComfyUI
a vLLM server generating text Plugin: laidline-vllm, with the sidecar for the evidence log vLLM
a text model you run with transformers Plugin: laidline-transformers transformers
a Pipecat voice pipeline Plugin: laidline-pipecat Pipecat
a LiveKit voice agent Plugin: laidline-livekit LiveKit Agents
an OpenAI-compatible API (images, speech, chat), yours or a vendor's Sidecar proxy: laidline serve OpenAI-compatible proxy
another vendor's JSON image API Sidecar proxy with adapter.rules Generic JSON adapter
files landing in an S3 bucket, from any provider Storage hook: laidline ingest on SQS AWS S3 with SQS
the same, without a server to run Storage hook as an AWS Lambda function AWS Lambda
Cloudflare R2 or another S3-compatible store Storage hook R2 and other S3-compatible stores
Google Cloud Storage Storage hook as a Cloud Run service Google Cloud Run

Two media guides apply across modes: Audio (files, the /v1/mark/audio route, streaming sessions and phone calls) and Video (the async job route, the CUDA image, keyframe TrustMark on CPU).

Not listed?

You have Use
any server that speaks the OpenAI routes the sidecar proxy, pointed at it with upstream.base_url
any JSON API that returns images one adapter rule that says where the images sit in the answer
any Python pipeline the library: load a Marker once and mark before you save (Quickstart)
any live voice stream at 16 kHz or more a streaming session

What each integration was tested on

Each guide ends with what was proven and how; this is the one-line version. Every row ran against the real service or framework named, not a stand-in.

Integration Proof Tested on
Library A fresh environment from the package: image, audio and video marked and detected, on CPU and on a GPU 19 Oct 2026
OpenAI-compatible proxy Against api.openai.com: gpt-image-1-mini generations (n=2) and an edit, marked with the input kept as ingredient; gpt-4o-mini-tts speech buffered and streamed, with its signed twin 24 Sep 2026; speech 27 Sep 2026
Generic JSON adapter A b64 rule against api.openai.com and a url rule fetching a real presigned S3 URL: marked, re-served and detected 25 Sep 2026
Audio Number-to-number phone calls recorded at the callee at 8 kHz: 21 of 21 SignalWire calls read exactly; earlier 99 of 100 Twilio calls detected, 0 of 10 unmarked controls flagged 21-22 Oct 2026; Twilio 27 Sep 2026
Video The CUDA image on an RTX 5080 and an AWS L4: a 360-frame 720p job marked in 11.0 s, bit accuracy 1.0, manifest trusted 27 Sep 2026 (RTX 5080); 22 Oct 2026 (L4)
Pipecat A Pipecat 1.13 pipeline with OpenAI speech over a websocket: marked audio detected at confidence 0.94, two evidence entries 21 Oct 2026
LiveKit Agents A LiveKit 1.13.10 room with OpenAI speech: a 20 s WebRTC recording read back the exact payload under the hardened decode 21 Oct 2026
vLLM A vLLM nightly on an RTX 5080: 20 of 20 completions marked through the sidecar, 30 of 30 marked texts detected 19 Oct 2026
transformers Qwen2.5-0.5B on an RTX 5080 from the documented install line: 3 of 3 marked completions detected at grade B, 0 of 2 controls flagged 21 Oct 2026
diffusers SDXL base 1.0 (fp16) on an RTX 5080: 4 of 4 images marked and detected at grade B, the unmarked control not found 21 Oct 2026
ComfyUI ComfyUI v0.37.0 on CPU, remote and embedded: PNG and JPEG outputs detected as marked_by_this_system 19 Oct 2026
AWS S3 with SQS A real AWS account in eu-central-1: JPEG and PNG marked in place; WAV and MP4 once ingest.mime_allowlist named them 19 Oct 2026
Cloudflare R2 A real R2 bucket and Queue: an uploaded JPEG marked in place in 28.9 s, detected at grade A, backlog 0 21 Oct 2026
AWS Lambda A container image on Lambda in eu-central-1: PNG, JPEG, WebP, WAV and MP4 marked in place and detected, a WAV skipped by default; the first MP4 took 21.4 s and 1,726 MB of memory 21 Oct 2026
Google Cloud Run Eventarc to Cloud Run in europe-west3: 4 of 4 images marked in place, Content Credentials valid, watermark found, evidence chains verified 21 Oct 2026

What each guide did not run, and its measured limits, are in the guide itself.

Troubleshooting

Message Cause Fix
skipped_filtered for WAV or MP4 objects the storage hook's default ingest.mime_allowlist is PNG, JPEG and WebP add audio/wav or video/mp4 to ingest.mime_allowlist and install the audio or video extra (AWS S3 with SQS)
no ingest ... outcome= lines in CloudWatch Lambda logs below INFO by default set AWS_LAMBDA_LOG_LEVEL=INFO (AWS Lambda)
the vLLM engine dies about two minutes after vllm serve starts the FlashInfer sampler compiles at warm-up and needs the CUDA toolkit (nvcc) start vLLM with VLLM_USE_FLASHINFER_SAMPLER=0 (vLLM)
video_disabled from POST /v1/mark/video video marking is off by default install laidline[video] and set watermark.video.enabled: true (Video)

Reference

  • Overview: what Laidline does, the four modes, free and metered
  • Install: the package, the extras and the plugin packages
  • Production setup: KMS signing, registration, a shared evidence store, readiness
  • Configuration: every key the guides set
  • Grading: what a detection result means