VerifyX is a multi-agent content verification system with:
- a FastAPI backend for linguistic, evidence, visual, and synthesis analysis
- a Chrome extension (React + TypeScript + Vite)
- a public landing/demo app (Next.js)
This README was rebuilt from the current codebase and validated with real test/build runs.
Project-specific docs:
backend/README.mdfrontend/README.mdfrontend/extension/README.mdfrontend/landing/README.md
verifyX/
├── backend/ # FastAPI + ML services
│ ├── app/main.py # API app + routes + CORS + health/warmup
│ ├── app/routes/ # /linguistic /evidence /visual /synthesize
│ ├── app/services/ # core agent logic
│ └── tests/ # backend tests (security + SVG + debug)
├── frontend/
│ ├── extension/ # Chrome extension (MV3, Vite)
│ └── landing/ # Next.js landing/demo app
└── README.md
Validated on 2026-04-09 (Windows):
- Backend tests:
12 passed. - Extension build:
npm run buildsuccessful. - Landing build:
npm run buildsuccessful.
During verification, a backend bug in SVG image handling was fixed:
backend/app/services/visual_service.py: corrected lazy PIL usage (PILImagereference in SVG decode path).
linguistic:- Zero-shot manipulation/tone classification + sentiment fallback.
evidence:- Google Fact Check API when available.
- Fallback pipeline: Serper search -> FAISS retrieval -> cross-encoder rerank -> stance + source credibility.
visual:- CLIP similarity for text-image consistency.
- Supports base64, URLs, and SVG rasterization with safe XML parsing (
defusedxml).
synthesize:- Weighted final verdict from other agent outputs.
User input (text + optional images)
-> linguistic/evidence/visual in parallel
-> synthesize final verdict
-> result rendered in extension or landing UI
- Python 3.10+ (3.12 used in current backend venv)
- Node.js 18+
- npm
- Chrome/Chromium (for extension testing)
cd backend
python -m venv myenv
myenv\Scripts\activate
pip install -r requirements.txtCreate backend/.env from backend/.env.example and set:
FACT_CHECK_API_KEY=...
SERPER_API_KEY=...
ENABLE_TRANSFORMERS=true
ENABLE_TORCH=true
CORS_ORIGINS=*
MAX_TEXT_LENGTH=10000
MAX_IMAGES=10
CACHE_DIR=~/.cache/verifyxRun API locally:
cd backend
myenv\Scripts\python.exe -m uvicorn app.main:app --host 127.0.0.1 --port 8000 --reloadcd frontend/extension
npm installCreate frontend/extension/.env from .env.example:
VITE_API_BASE_URL=http://127.0.0.1:8000Build extension:
npm run buildLoad unpacked extension from frontend/extension/dist in chrome://extensions (Developer mode).
cd frontend/landing
npm install
npm run devFor API target, set:
NEXT_PUBLIC_API_BASE_URL=http://127.0.0.1:8000Base URL (local): http://127.0.0.1:8000
GET /GET /healthGET /wakeGET /warmup
POST /linguisticPOST /evidencePOST /visualPOST /synthesize
Example request payloads:
{ "text": "Scientists discovered a cure for all diseases." }{
"text": "This image proves the claim.",
"images": ["data:image/png;base64,..."]
}From backend/:
myenv\Scripts\python.exe -m pytest -qFrom frontend/extension/:
npm run buildFrom frontend/landing/:
npm run buildFrom frontend/:
npm run build:allAll tracked README files in this repository are now aligned to the current codebase and runtime behavior:
- Root overview and cross-project setup (
README.md) - Backend implementation, endpoints, env, and tests (
backend/README.md) - Frontend workspace and integration (
frontend/README.md) - Extension runtime and permissions (
frontend/extension/README.md) - Landing app demo flow and deployment (
frontend/landing/README.md)
- Backend tests pass, but pytest emits non-blocking deprecation warnings from third-party libraries (
fastapi,reportlab,faiss, etc.). - Landing build reports a non-blocking warning about multiple lockfiles in the workspace.
- Do not commit
.envfiles. - Keep
FACT_CHECK_API_KEYandSERPER_API_KEYserver-side only. GET /debug/configis disabled in production and can requireX-Internal-TokenifADMIN_TOKENis set.- SVG handling uses
defusedxmlto reject unsafe XML content.
VerifyX provides AI-assisted signals, not definitive truth guarantees. Treat outputs as decision support and cross-check high-impact claims with trusted sources.