typetext
{
"prompt": "cat rolls over on his belly and beckons for scratches"
}npm install replicate
REPLICATE_API_TOKEN environment variable:export REPLICATE_API_TOKEN=r8_1Js**********************************
This is your API token. Keep it to yourself.
import Replicate from "replicate";
import fs from "node:fs";
const replicate = new Replicate({
auth: process.env.REPLICATE_API_TOKEN,
});
Run mattrothenberg/dithercam using Replicate’s API. Check out the model's schema for an overview of inputs and outputs.
const input = {
prompt: "cat rolls over on his belly and beckons for scratches"
};
const output = await replicate.run("mattrothenberg/dithercam", { input });
// To access the file URL:
console.log(output.url()); //=> "http://example.com"
// To write the file to disk:
fs.writeFile("my-image.png", output);
To learn more, take a look at the guide on getting started with Node.js.
pip install replicate
REPLICATE_API_TOKEN environment variable:export REPLICATE_API_TOKEN=r8_1Js**********************************
This is your API token. Keep it to yourself.
import replicate
Run mattrothenberg/dithercam using Replicate’s API. Check out the model's schema for an overview of inputs and outputs.
output = replicate.run(
"mattrothenberg/dithercam",
input={
"prompt": "cat rolls over on his belly and beckons for scratches"
}
)
# To access the file URL:
print(output.url())
#=> "http://example.com"
# To write the file to disk:
with open("my-image.png", "wb") as file:
file.write(output.read())
To learn more, take a look at the guide on getting started with Python.
REPLICATE_API_TOKEN environment variable:export REPLICATE_API_TOKEN=r8_1Js**********************************
This is your API token. Keep it to yourself.
Run mattrothenberg/dithercam using Replicate’s API. Check out the model's schema for an overview of inputs and outputs.
curl -s -X POST \
-H "Authorization: Bearer $REPLICATE_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Prefer: wait" \
-d $'{
"input": {
"prompt": "cat rolls over on his belly and beckons for scratches"
}
}' \
https://api.replicate.com/v1/models/mattrothenberg/dithercam/predictions
To learn more, take a look at Replicate’s HTTP API reference docs.
{
"id": "xmbfyrrc15rm80crbezr0j790r",
"model": "mattrothenberg/dithercam",
"version": "hidden",
"input": {
"prompt": "cat rolls over on his belly and beckons for scratches"
},
"logs": "ffmpeg version 5.1.6-0+deb12u1 Copyright (c) 2000-2024 the FFmpeg developers\n built with gcc 12 (Debian 12.2.0-14)\n configuration: --prefix=/usr --extra-version=0+deb12u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-libjxl --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared\n libavutil 57. 28.100 / 57. 28.100\n libavcodec 59. 37.100 / 59. 37.100\n libavformat 59. 27.100 / 59. 27.100\n libavdevice 59. 7.100 / 59. 7.100\n libavfilter 8. 44.100 / 8. 44.100\n libswscale 6. 7.100 / 6. 7.100\n libswresample 4. 7.100 / 4. 7.100\n libpostproc 56. 6.100 / 56. 6.100\nInput #0, mov,mp4,m4a,3gp,3g2,mj2, from '/tmp/a3ef5c68839e0426/output.mp4':\n Metadata:\n major_brand : isom\n minor_version : 512\n compatible_brands: isomiso2avc1mp41\n encoder : Lavf61.1.100\n Duration: 00:00:05.06, start: 0.000000, bitrate: 8666 kb/s\n Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 624x624, 8664 kb/s, 16 fps, 16 tbr, 16384 tbn (default)\n Metadata:\n handler_name : VideoHandler\n vendor_id : [0][0][0][0]\n encoder : Lavc61.3.100 libx264\nStream mapping:\n Stream #0:0 -> #0:0 (h264 (native) -> png (native))\nPress [q] to stop, [?] for help\nOutput #0, image2, to '/tmp/frames/frame_%04d.png':\n Metadata:\n major_brand : isom\n minor_version : 512\n compatible_brands: isomiso2avc1mp41\n encoder : Lavf59.27.100\n Stream #0:0(und): Video: png, rgb24(pc, gbr/unknown/unknown, progressive), 624x624, q=2-31, 200 kb/s, 16 fps, 16 tbn (default)\n Metadata:\n handler_name : VideoHandler\n vendor_id : [0][0][0][0]\n encoder : Lavc59.37.100 png\nframe= 1 fps=0.0 q=-0.0 size=N/A time=00:00:00.06 bitrate=N/A speed= 2.6x \rframe= 14 fps=0.0 q=-0.0 size=N/A time=00:00:00.87 bitrate=N/A speed=1.61x \rframe= 27 fps= 25 q=-0.0 size=N/A time=00:00:01.68 bitrate=N/A speed=1.58x \rframe= 39 fps= 25 q=-0.0 size=N/A time=00:00:02.43 bitrate=N/A speed=1.54x \rframe= 52 fps= 25 q=-0.0 size=N/A time=00:00:03.25 bitrate=N/A speed=1.54x \rframe= 64 fps= 24 q=-0.0 size=N/A time=00:00:04.00 bitrate=N/A speed=1.53x \rframe= 77 fps= 24 q=-0.0 size=N/A time=00:00:04.81 bitrate=N/A speed=1.53x \rframe= 81 fps= 24 q=-0.0 Lsize=N/A time=00:00:05.06 bitrate=N/A speed=1.52x \nvideo:44584kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown\nffmpeg version 5.1.6-0+deb12u1 Copyright (c) 2000-2024 the FFmpeg developers\n built with gcc 12 (Debian 12.2.0-14)\n configuration: --prefix=/usr --extra-version=0+deb12u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-libjxl --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared\n libavutil 57. 28.100 / 57. 28.100\n libavcodec 59. 37.100 / 59. 37.100\n libavformat 59. 27.100 / 59. 27.100\n libavdevice 59. 7.100 / 59. 7.100\n libavfilter 8. 44.100 / 8. 44.100\n libswscale 6. 7.100 / 6. 7.100\n libswresample 4. 7.100 / 4. 7.100\n libpostproc 56. 6.100 / 56. 6.100\nInput #0, image2, from '/tmp/dithered_frames/frame_%04d.png':\n Duration: 00:00:05.06, start: 0.000000, bitrate: N/A\n Stream #0:0: Video: png, rgb24(pc), 624x624, 16 fps, 16 tbr, 16 tbn\nStream mapping:\n Stream #0:0 -> #0:0 (png (native) -> h264 (libx264))\nPress [q] to stop, [?] for help\n[libx264 @ 0x629570a35080] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 AVX512\n[libx264 @ 0x629570a35080] profile High, level 3.0, 4:2:0, 8-bit\n[libx264 @ 0x629570a35080] 264 - core 164 r3095 baee400 - H.264/MPEG-4 AVC codec - Copyleft 2003-2022 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=16 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00\nOutput #0, mp4, to '/tmp/dithered_video.mp4':\n Metadata:\n encoder : Lavf59.27.100\n Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv420p(tv, progressive), 624x624, q=2-31, 16 fps, 16384 tbn\n Metadata:\n encoder : Lavc59.37.100 libx264\n Side data:\n cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A\nframe= 1 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed=N/A \rframe= 47 fps=0.0 q=27.0 size= 1024kB time=00:00:00.18 bitrate=44726.7kbits/s speed=0.373x \rframe= 54 fps= 50 q=27.0 size= 2048kB time=00:00:00.62 bitrate=26841.5kbits/s speed=0.584x \rframe= 61 fps= 39 q=27.0 size= 3328kB time=00:00:01.06 bitrate=25658.2kbits/s speed=0.672x \rframe= 69 fps= 32 q=27.0 size= 4608kB time=00:00:01.56 bitrate=24158.5kbits/s speed=0.728x \rframe= 77 fps= 29 q=27.0 size= 5888kB time=00:00:02.06 bitrate=23385.9kbits/s speed=0.765x \rframe= 81 fps= 15 q=27.0 Lsize= 13736kB time=00:00:04.87 bitrate=23082.5kbits/s speed=0.875x \nvideo:13735kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.009890%\n[libx264 @ 0x629570a35080] frame I:1 Avg QP:32.98 size:190665\n[libx264 @ 0x629570a35080] frame P:74 Avg QP:33.37 size:173614\n[libx264 @ 0x629570a35080] frame B:6 Avg QP:33.68 size:170984\n[libx264 @ 0x629570a35080] consecutive B-frames: 90.1% 0.0% 0.0% 9.9%\n[libx264 @ 0x629570a35080] mb I I16..4: 0.0% 25.4% 74.6%\n[libx264 @ 0x629570a35080] mb P I16..4: 4.2% 9.6% 63.9% P16..4: 1.5% 6.4% 13.8% 0.0% 0.0% skip: 0.5%\n[libx264 @ 0x629570a35080] mb B I16..4: 29.0% 0.0% 14.1% B16..8: 4.7% 14.3% 34.2% direct: 3.6% skip: 0.2% L0:30.6% L1:25.4% BI:44.0%\n[libx264 @ 0x629570a35080] 8x8 transform intra:12.1% inter:0.1%\n[libx264 @ 0x629570a35080] coded y,uvDC,uvAC intra: 99.4% 0.0% 0.0% inter: 91.1% 0.0% 0.0%\n[libx264 @ 0x629570a35080] i16 v,h,dc,p: 0% 0% 95% 5%\n[libx264 @ 0x629570a35080] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 4% 1% 78% 4% 3% 4% 2% 3% 1%\n[libx264 @ 0x629570a35080] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 3% 2% 52% 8% 10% 12% 5% 6% 2%\n[libx264 @ 0x629570a35080] i8c dc,h,v,p: 100% 0% 0% 0%\n[libx264 @ 0x629570a35080] Weighted P-Frames: Y:0.0% UV:0.0%\n[libx264 @ 0x629570a35080] ref P L0: 36.8% 8.5% 30.5% 24.3%\n[libx264 @ 0x629570a35080] ref B L0: 75.8% 19.7% 4.6%\n[libx264 @ 0x629570a35080] ref B L1: 84.2% 15.8%\n[libx264 @ 0x629570a35080] kb/s:22224.62",
"output": "https://replicate.delivery/xezq/zJ4aJ1B5eVyDNajdiFWkg0tSFfGm8JS2JI5nWsWKUZLP99FVA/dithered_video.mp4",
"data_removed": false,
"error": null,
"source": "web",
"status": "succeeded",
"created_at": "2025-07-30T14:31:43.881Z",
"started_at": "2025-07-30T14:31:44.434253Z",
"completed_at": "2025-07-30T14:33:51.531945Z",
"urls": {
"cancel": "https://api.replicate.com/v1/predictions/xmbfyrrc15rm80crbezr0j790r/cancel",
"children": "https://api.replicate.com/v1/predictions/xmbfyrrc15rm80crbezr0j790r/children",
"get": "https://api.replicate.com/v1/predictions/xmbfyrrc15rm80crbezr0j790r",
"root": "https://api.replicate.com/v1/predictions/xmbfyrrc15rm80crbezr0j790r",
"stream": "https://stream.replicate.com/v1/files/bcwr-vgmy3hkjdgybcfyigk24tppiipwxqdzxkoaeimomhrflgvknz3aq",
"web": "https://replicate.com/p/xmbfyrrc15rm80crbezr0j790r"
},
"metrics": {
"predict_time": 127.097692623,
"total_time": 127.650945
}
}