Aiscern is an AI-generated content detection SaaS that identifies AI-produced text, images, audio, and video using a multi-model ensemble β combining HuggingFace transformers, Gemini 2.0 Flash, NVIDIA NIM, and a retrieval-augmented generation (RAG) pipeline for high-accuracy, explainable results.
π Live: aiscern.com
| Modality | Models Used | Avg. Accuracy |
|---|---|---|
| Text | RoBERTa-base-openai-detector, Binoculars perplexity, Gemini | ~95% |
| Image | ViT-based classifier, CLIP embeddings, pixel-integrity signals | ~91% |
| Audio | wav2vec2 fine-tuned, spectral analysis, SynthID local | ~88% |
| Video | NVIDIA NIM deepfake detection, frame-level ensemble | ~85% |
- RAG-augmented ensemble β retrieves similar patterns from pgvector for context-aware confidence
- Web scanner β full-page crawl with JavaScript rendering via Playwright
- Ephemeral scan mode β zero-history option for sensitive documents
- Batch detection β upload and process multiple files
- API access (Pro/Enterprise) β REST API with per-key rate limiting
- Admin dashboard β real-time pipeline stats, D1 queue monitoring, user management
| Layer | Technology |
|---|---|
| Frontend | Next.js 15 (App Router), TypeScript, Tailwind CSS |
| Auth | Clerk (JWT, OAuth) |
| Database | Supabase (PostgreSQL + pgvector) |
| Storage | Cloudflare R2 |
| Edge DB | Cloudflare D1 |
| Inference | HuggingFace Inference API, Gemini 2.0 Flash, NVIDIA NIM |
| Background jobs | Inngest |
| Rate limiting | Upstash Redis |
| Payments | XPay (PKR + international) |
| Logging | Pino (structured JSON) |
| CI/CD | GitHub Actions β Vercel |
- Node.js 20+
- npm 10+
- A Supabase project
- A Clerk application
- A Cloudflare account (R2 bucket + D1 database)
git clone https://github.com/anasali89ji/AI-SCERN.git
cd AI-SCERN/frontend
npm install --legacy-peer-depsCopy .env.example to .env.local and fill in all values:
cp .env.example .env.localSee Environment Variables section for full reference.
Apply Supabase migrations in order:
# In Supabase SQL Editor, run each file in /supabase/migrations/ in order:
# 1. v6_pipeline_schema.sql
# 2. hardening.sql
# 3. calibration_tables.sql
# 4. calibration_stats.sql
# 5. performance_indexes.sql
# 6. r2_storage_column.sql
# 7. feature_flags.sql
# 8. v8_api_key_sha256_migration.sql
# 9. v9_scraper_sessions.sql
# 10. forensic_pipeline.sqlcd frontend
npm run devOpen http://localhost:3000.
cd frontend
npm run build
npm start| Variable | Required | Description |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL |
β | Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
β | Supabase anon/public key |
SUPABASE_SERVICE_ROLE_KEY |
β | Supabase service role β server only, never expose |
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY |
β | Clerk publishable key |
CLERK_SECRET_KEY |
β | Clerk secret key β server only |
GEMINI_API_KEY |
β | Google Gemini API key |
GROK_API_KEY |
optional | xAI Grok Vision (image detection primary) |
OPENROUTER_API_KEY |
optional | OpenRouter fallback |
HUGGINGFACE_API_TOKEN |
optional | HuggingFace Inference API |
NVIDIA_API_KEY |
optional | NVIDIA NIM (video deepfake) |
R2_ACCOUNT_ID |
β | Cloudflare account ID |
R2_ACCESS_KEY_ID |
β | R2 API key |
R2_SECRET_ACCESS_KEY |
β | R2 API secret |
R2_BUCKET_NAME |
β | R2 bucket name |
CLOUDFLARE_D1_DATABASE_ID |
β | D1 database ID |
UPSTASH_REDIS_REST_URL |
β (prod) | Upstash Redis URL |
UPSTASH_REDIS_REST_TOKEN |
β (prod) | Upstash Redis token |
INNGEST_EVENT_KEY |
β | Inngest event key |
INNGEST_SIGNING_KEY |
β (prod) | Inngest signing key |
SENTRY_DSN |
optional | Error tracking |
INTERNAL_API_SECRET |
β | Server-to-server auth secret |
Full reference: .env.example
AI-SCERN/
βββ frontend/ # Next.js 15 application
β βββ app/
β β βββ (auth)/ # Login, signup pages
β β βββ (dashboard)/ # Detect, history, settings
β β βββ (marketing)/ # Landing, pricing, blog
β β βββ (legal)/ # Privacy, terms, contact
β β βββ api/ # API routes
β βββ components/ # Shared UI components
β βββ lib/
β β βββ auth/ # Auth utilities
β β βββ inference/ # HF, Gemini, NVIDIA inference
β β βββ rag/ # RAG pipeline (pgvector)
β β βββ security/ # File validation, CSRF
β β βββ storage/ # Cloudflare R2
β β βββ supabase/ # DB client
β βββ next.config.ts
βββ admin/ # Separate admin Next.js app
βββ signal-worker/ # Python image analysis worker
βββ supabase/migrations/ # Database migrations
βββ .github/workflows/ # CI/CD pipelines
βββ cf-pipeline/ # Cloudflare Worker pipeline
Accuracy metrics are published on the Methodology page with per-modality AUC-ROC, precision, recall, and false-positive rates.
Key datasets used for evaluation:
- Text: PAN25, PERSUADE Corpus 2.0, M4 Benchmark
- Image: FakeFace, CIFAKE, GenImage
- Audio: ASVspoof 2019/2021, ADD 2023
- Video: FaceForensics++, DFDC Preview
Full API documentation: aiscern.com/docs/api
# Example: Detect text via API
curl -X POST https://aiscern.com/api/v1/detect/text \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Your content here"}'
# Example: Detect an image via API
curl -X POST https://aiscern.com/api/v1/detect/image \
-H "X-API-Key: YOUR_API_KEY" \
-F "file=@photo.jpg"
# Example: Detect an audio clip via API
curl -X POST https://aiscern.com/api/v1/detect/audio \
-H "X-API-Key: YOUR_API_KEY" \
-F "file=@clip.mp3"Video detection is currently dashboard-only (/dashboard/detect/video) β a /api/v1/detect/video endpoint is planned but not yet implemented (requires browser-side frame extraction).
See CONTRIBUTING.md for guidelines.
To report vulnerabilities, see SECURITY.md or email security@aiscern.com.
MIT β see LICENSE.
If you use Aiscern in research, please cite:
@software{aiscern2024,
title = {Aiscern: Multi-Modal AI Content Detection},
author = {Aiscern Team},
year = {2024},
url = {https://github.com/anasali89ji/AI-SCERN}
}