| Crates.io | realitydefender |
| lib.rs | realitydefender |
| version | 0.1.8 |
| created_at | 2025-05-29 19:40:05.233106+00 |
| updated_at | 2025-11-04 20:58:50.978623+00 |
| description | Reality Defender SDK for Rust - Tools for detecting deepfakes and manipulated media |
| homepage | https://realitydefender.com |
| repository | https://github.com/Reality-Defender/realitydefender-sdk-rust |
| max_upload_size | |
| id | 1694240 |
| size | 197,324 |
The Reality Defender Rust SDK provides a simple and efficient way to integrate deepfake detection capabilities into your Rust applications.
Add the SDK and Tokio with the full feature set to your Cargo.toml:
cargo add realitydefender
cargo add tokio --features full
use realitydefender::{Client, Config, UploadOptions};
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Initialize the client with your API key
let client = Client::new(Config {
api_key: env::var("REALITY_DEFENDER_API_KEY")?,
..Default::default()
})?;
// Upload a file for analysis
let upload_result = client.upload(UploadOptions {
file_path: "./image.jpg".to_string(),
}).await?;
println!("Request ID: {}", upload_result.request_id);
// Get the analysis result with waiting for completion
let result = client.get_result(
&upload_result.request_id,
Some(realitydefender::GetResultOptions {
max_attempts: Some(30),
polling_interval: Some(2000),
}),
).await?;
println!("Status: {}", result.status);
if let Some(score) = result.score {
println!("Score: {:.4} ({:.1}%)", score, score * 100.0);
}
// Access model-specific results
for model in result.models {
if model.status != "NOT_APPLICABLE" {
println!(
"Model: {}, Status: {}, Score: {:.4}",
model.name,
model.status,
model.score.unwrap_or(0.0)
);
}
}
Ok(())
}
use realitydefender::{Client, Config, BatchOptions};
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Initialize the client
let client = Client::new(Config {
api_key: env::var("REALITY_DEFENDER_API_KEY")?,
..Default::default()
})?;
// Process multiple files concurrently
let results = client.process_batch(
vec!["./files/image1.jpg", "./files/image2.jpg", "./files/video.mp4"],
BatchOptions {
max_concurrency: Some(3),
max_attempts: Some(60),
polling_interval: Some(2000),
}
).await?;
// Print results
for (idx, result) in results.iter().enumerate() {
println!("File {}: Status: {}", idx + 1, result.status);
if let Some(score) = result.score {
println!(" Score: {:.4} ({:.1}%)", score, score * 100.0);
}
}
Ok(())
}
use realitydefender::{Client, Config};
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Initialize the client
let client = Client::new(Config {
api_key: env::var("REALITY_DEFENDER_API_KEY")?,
..Default::default()
})?;
// Detect a file with a single call
let result = client.detect_file("./files/image.jpg").await?;
println!("Status: {}", result.status);
if let Some(score) = result.score {
println!("Score: {:.4} ({:.1}%)", score, score * 100.0);
}
Ok(())
}
There is a size limit for each of the supported file types.
| File Type | Extensions | Size Limit (bytes) | Size Limit (MB) |
|---|---|---|---|
| Video | .mp4, .mov | 262,144,000 | 250 MB |
| Image | .jpg, .png, .jpeg, .gif, .webp | 52,428,800 | 50 MB |
| Audio | .flac, .wav, .mp3, .m4a, .aac, .alac, .ogg | 20,971,520 | 20 MB |
| Text | .txt | 5,242,880 | 5 MB |
The Reality Defender API supports analysis of media from the following social media platforms:
The SDK comes with several examples that demonstrate how to use its features. To run these examples, you need to set your API key as an environment variable:
export REALITY_DEFENDER_API_KEY=your_api_key_here
Then, you can run the examples using Cargo:
# Run the basic example
cargo run --example basic
# Run the batch processing example
cargo run --example batch_processing
# Run the social media example
cargo run --example social_media
To run the examples that require uploading local files successfully, you'll need to add your own image and video files to the files directory:
Create an files directory in the root of the project (if it doesn't already exist):
mkdir -p files
Add the following files to this directory:
image1.jpg - Any sample image for testing image analysisimage2.jpg - Another sample imagetest_image.jpg - A third test imagevideo1.mp4 - A sample video file for testing video analysisYou can use any JPG files and MP4 videos for testing purposes. The examples are configured to use these specific
filenames from the files directory:
// Using the sample files in your code
let result = client.detect_file("./files/image1.jpg").await?;
// For batch processing
let results = client.process_batch(
vec!["./files/image1.jpg", "./files/image2.jpg", "./files/video1.mp4"],
BatchOptions::default ()
).await?;
Note: If you prefer to use different filenames or paths, make sure to update the example code accordingly.
The SDK implements the following workflow:
See the documentation for complete API details.
cargo build
cargo test
cargo install cargo-tarpaulin
cargo tarpaulin --out Xml