The Problem
Academic research papers are delivered as dense, monolithic text blocks. Researchers and students must manually extract key concepts, conceptualize visual representations, and build animations to understand complex ideas. This process is time-consuming and requires skills in both domain knowledge and animation tools. arXivisual automates this pipeline, transforming paper text into structured animations via AI agents.
What This Does
arXivisual provides a full-stack pipeline for paper-to-visualization. Users ingest an arXiv URL via the Next.js frontend (frontend/app/page.tsx), which triggers the backend job worker (backend/jobs/worker.py). AI agents ingest the paper (backend/ingestion/pdf_parser.py, backend/ingestion/html_parser.py), analyze sections for visual opportunities (backend/agents/section_analyzer.py, backend/agents/manim_generator.py), and generate Manim code (backend/manim_generator.py). A validation pipeline runs four quality gates before rendering (backend/rendering/local_runner.py) and serving the result through the API (backend/api/routes.py) to the interactive scrollytelling interface (frontend/components/ScrollyReader.tsx, frontend/components/VideoPlayer.tsx).
How It Is Wired
Execution begins at the API route start_processing in backend/api/routes.py, which enqueues a process_paper_job in backend/jobs/worker.py (reaching 110 downstream functions). The worker coordinates the pipeline: ingestion feeds into the agent graph centered on backend/agents/pipeline (instability 0.92, Ca 1, Ce 12), where Section is called from 8 places and GeneratedCode from 7. The run function in backend/agents/base.py (called from nowhere else in the repo) orchestrates LLM calls (_call_llm, _call_llm_sync) and JSON parsing (_parse_json_response). Visualizations are rendered via backend/rendering/local_runner.py, which executes Manim subprocesses. Paths to external effects are short: process_paper_job -> update_job_status writes to the database; run -> _call_llm hits the Anthropic model; run -> get_manim_docs reads the filesystem. The module backend/agents/base.py is a hub defined by 19 functions and 1 class, routing provider detection and client setup for the majority of agent logic.
How To Use It
Setup:
# Frontend
cd frontend
npm install
npm run dev
# Backend
cd backend
cp .env.example .env # Add Anthropic, ElevenLabs, Dedalus keys
uv sync
uv run uvicorn main:app --reload --host 0.0.0.0 --port 8000
Navigate to http://localhost:3000, paste an arXiv URL, and submit. The system will ingest, analyze, generate, validate, and display the visualization.
Real-World Use
A researcher pastes a machine-learning paper URL. The system fetches the PDF, extracts sections on attention mechanisms, and the manim_generator agent produces a Manim script visualizing the multi-head attention matrix. The voiceover_generator agent scripts narration. The pipeline runs validation gates; if the scene passes, local_runner.py renders the MP4. The frontend displays the animation synchronized with the text, allowing the researcher to grasp the concept without manually coding the animation.
Code Health & Issues
- HIGH – No LICENSE file at root; redistribution rights are undefined, blocking legal reuse.
- HIGH – No CI/CD pipeline; every merge runs without automated build or test validation.
- HIGH – Wildcard CORS
allow_origins=["*"]with credentials enabled inbackend/main.py; any site can make authenticated API calls from a user's browser. - HIGH – No build gate for
backend/Dockerfile; deployment artifacts have never been validated via automated workflow. - MEDIUM – Mutable base image
python:3.13-sliminbackend/Dockerfile; no digest pinning, so CVE sets shift between builds. - MEDIUM – Large demo videos over 5MB (
backend/demo-videos/ArXivisual.mp4,frontend/public/videos/...) increase clone size and CI checkout cost. - MEDIUM – No Dependabot or Renovate configuration; dependency advisories remain unpatched without manual audit.
- MEDIUM – No non-root USER in the Docker image; processes run as root, elevating container escape risk.
- LOW – Missing convention files (
.editorconfig,.gitattributes, formatter config), risking inconsistent tooling across contributors.
Static analysis also flagged deep nesting (max depth 8) in backend/ingestion/pdf_parser.py, backend/jobs/worker.py, and backend/agents/context7_docs.py; broad except blocks in backend/agents/context7_docs.py, backend/agents/render_tester.py, and backend/ingestion/pdf_parser.py; and 86 duplicated 6-line blocks across 28 files in the agent directory, particularly backend/agents/base.py and backend/agents/dedalus_base.py.
The Bottom Line
arXivisual is a functional hackathon prototype that successfully chains ingestion, AI analysis, and Manim rendering into a user-friendly interface. The code graph is resolvable and the pipeline logic is traceable. However, it carries significant SDLC gaps: no license, no CI, a security-hardened CORS misconfiguration, and a mutable Docker base. It is viable for experimentation and internal demos, but requires the listed fixes before it should be shared beyond the originating team or used in a client-facing capacity.