Introduction
Real-time job progress tracking for AI applications.
Seenn is a job state transport service designed for AI applications that process tasks asynchronously. Instead of leaving users staring at a loading spinner, show them real-time progress, ETA, and results.
Choose Your SDK
Seenn provides two types of SDKs with different purposes:
Backend SDKs
ProducerManage job lifecycle from your server — start, update progress, mark complete.
Client SDKs
ConsumerSubscribe to real-time updates in your mobile/web app — display progress, Live Activity.
How it Works
- Backend starts a job — When a user triggers an async task (video generation, image processing, etc.)
- Backend reports progress — As processing continues, send progress updates to Seenn
- Client receives updates — Mobile app gets real-time SSE events with progress, message, ETA
- Job completes — Client receives the result URL or error message instantly
Quick Example
Here's a complete example showing backend and client working together:
1. Backend: Start and Update a Job
import { SeennClient } from '@seenn/node';
const seenn = new SeennClient({ apiKey: 'sk_live_...' });
// Start a job when user triggers video generation
const job = await seenn.jobs.start({
userId: 'user_123',
jobType: 'video-generation',
title: 'Creating your video...',
});
// Update progress as processing continues
await job.setProgress(25, { message: 'Analyzing prompt...' });
await job.setProgress(50, { message: 'Generating frames...' });
await job.setProgress(75, { message: 'Rendering video...' });
// Complete with result URL
await job.complete({
result: { url: 'https://cdn.example.com/video.mp4' }
});
2. Client: Subscribe to Updates
import 'package:seenn_flutter/seenn_flutter.dart';
// Initialize once at app startup
await Seenn.init(
appId: 'app_xxx',
userToken: 'token_from_your_backend',
);
// Subscribe to job updates
final tracker = Seenn.instance.jobs.subscribe('job_123');
tracker.onProgress.listen((update) {
print('Progress: \${update.progress}%');
print('Message: \${update.message}');
});
tracker.onComplete.listen((job) {
print('Done! Result: \${job.resultUrl}');
});
Key Features
Real-time Updates
SSE-based streaming with automatic reconnection and missed event recovery.
iOS Live Activity
Show job progress on Dynamic Island and Lock Screen automatically.
Type-safe SDKs
Full TypeScript and Dart type definitions with IDE autocomplete.
Parent-Child Jobs
Track batch processing with automatic progress aggregation.
SDK Comparison
| Feature | Backend SDKs | Client SDKs |
|---|---|---|
| Start jobs | ✓ | — |
| Update progress | ✓ | — |
| Mark complete/failed | ✓ | — |
| Subscribe to updates | — | ✓ |
| Real-time SSE | — | ✓ |
| iOS Live Activity | — | ✓ |
| Authentication | Secret key (sk_*) |
User token (JWT) |