AI-powered content analysis platform for technical education and research workflows
Atlas combines a YouTube analysis pipeline, academic papers RAG, comparison analysis, and assignment generation into a single product-oriented experience. The current application uses a FastAPI backend and a React frontend while preserving the original Python pipeline modules for search, transcript extraction, summarization, comparison, and educational content generation.
- Search YouTube videos from a natural language query
- Fetch subtitles and transcripts for selected videos
- Generate structured AI summaries focused on technical learning outcomes
- Compare multiple videos across depth, difficulty, teaching style, and audience fit
- Generate educational assignments from the analyzed content
- Query indexed PDFs using natural language
- Return AI-generated responses with citations and source excerpts
- Use LanceDB-backed retrieval through the existing paper indexing stack
- Browse existing pipeline runs
- Explore videos, transcripts, summaries, comparison outputs, and assignments in a modern React UI
- Trigger fresh pipeline steps through the API when credentials are available
FastAPIPydantic- Existing pipeline modules in
src/ LlamaIndex+LanceDBfor academic papers retrieval
- React
- TypeScript
- Vite
- Tailwind CSS
- TanStack Query
- Framer Motion
Atlas is split into a typed API layer and a React client, while the core domain logic remains in the original Python modules.
flowchart LR
ReactFrontend[ReactFrontend] --> FastAPIBackend[FastAPIBackend]
FastAPIBackend --> RunService[RunService]
FastAPIBackend --> PipelineService[PipelineService]
FastAPIBackend --> PapersService[PapersService]
RunService --> PipelineArtifacts[pipeline_output_Artifacts]
PipelineService --> YouTubePipeline[YouTubePipeline]
PipelineService --> YouTubeComparator[YouTubeOutputComparator]
PipelineService --> AssignmentGenerator[YouTubeAssignmentGenerator]
PapersService --> AcademicPapersRAG[AcademicPapersRAG]
- Expose run metadata and artifact endpoints
- Wrap the existing YouTube and papers workflows
- Read pipeline artifacts from
pipeline_output_*folders - Provide execution endpoints for live searches and downstream pipeline steps
- Load the latest available run
- Render structured search, transcript, summary, comparison, and assignment views
- Query the academic papers system
- Trigger new runs and artifact generation through the API
src/youtube_pipeline.pysrc/compare_youtube_outputs.pysrc/assignment_generator.pysrc/papers_rag.pysrc/fetch_youtube_transcript.pysrc/summarize_youtube_transcript.py
backend/main.pybackend/routers/runs.pybackend/routers/pipeline.pybackend/routers/papers.pybackend/services/run_service.pybackend/services/pipeline_service.pybackend/services/papers_service.pybackend/services/artifact_readers.py
frontend/src/App.tsxfrontend/src/features/pipeline/pipeline-dashboard.tsxfrontend/src/features/papers/papers-panel.tsxfrontend/src/lib/api.tsfrontend/src/lib/types.ts
atlas/
├── backend/ # FastAPI application
│ ├── main.py
│ ├── routers/
│ ├── schemas/
│ └── services/
├── frontend/ # React + Vite frontend
│ ├── src/
│ ├── package.json
│ └── vite.config.ts
├── src/ # Existing Python domain logic
│ ├── youtube_pipeline.py
│ ├── compare_youtube_outputs.py
│ ├── assignment_generator.py
│ ├── papers_rag.py
│ └── configs/config.yaml
├── papers/agents/ # Academic PDFs
├── pipeline_output_*/ # YouTube pipeline artifacts
├── storage/ # Indexed papers storage
├── requirements.txt
└── README.md
- Conda
- Node.js 18+
- npm
- OpenRouter API key
- YouTube Data API key
git clone https://github.com/ishandutta0098/atlas
cd atlasIf your environment already exists:
conda activate atlasIf you need to create it first:
conda create -n atlas python=3.10 -y
conda activate atlaspip install -r requirements.txtcd frontend
npm install
cd ..Create or update .env in the repository root:
OPENROUTER_API_KEY=your_openrouter_key
YOUTUBE_API_KEY=your_youtube_keyAtlas runs as two processes during development: the FastAPI backend and the React frontend.
From the repository root:
conda activate atlas
uvicorn backend.main:app --reload --host 127.0.0.1 --port 8000Backend health endpoint:
http://127.0.0.1:8000/api/health
In a second terminal:
cd frontend
npm run devFrontend development URL:
http://127.0.0.1:5173
The Vite dev server proxies /api requests to http://127.0.0.1:8000 via frontend/vite.config.ts.
cd frontend
npm run lint
npm run buildconda activate atlas
python -c "from fastapi.testclient import TestClient; from backend.main import app; client = TestClient(app); print(client.get('/api/health').json())"GET /api/runsGET /api/runs/latestGET /api/runs/{run_id}GET /api/runs/{run_id}/videosGET /api/runs/{run_id}/transcriptsGET /api/runs/{run_id}/summariesGET /api/runs/{run_id}/comparisonGET /api/runs/{run_id}/assignments
POST /api/pipeline/searchPOST /api/runs/{run_id}/transcriptsPOST /api/runs/{run_id}/summariesPOST /api/runs/{run_id}/comparisonPOST /api/runs/{run_id}/assignments
GET /api/papers/statusPOST /api/papers/query
- Submit a query through the frontend
- Backend creates or reuses a pipeline run
- Video metadata is exposed from run artifacts
- Transcript, summary, comparison, and assignment artifacts are read or generated
- The frontend renders each stage as a separate structured view
- Frontend sends a natural language query to
POST /api/papers/query - FastAPI delegates to
AcademicPapersRAG - The response includes answer text, citations, excerpts, and timing metadata
Primary runtime configuration lives in src/configs/config.yaml.
Important settings include:
- OpenRouter model selection
- worker counts and concurrency behavior
- transcript language defaults
- YouTube API settings
- prompt paths and output directory settings
Each pipeline run writes files under a pipeline_output_<timestamp> folder:
metadata/search_results_*.jsonmetadata/fetch_results_*.jsonmetadata/summary_results_*.jsontranscripts/*.srtsummaries/*_summary.jsonassignments/*_assignment.md
- PDFs live in
papers/agents/ - paper index storage lives in
storage/papers_index/ - vector store data lives in
storage/papers_vectordb/
The original Gradio application still exists in app.py as a legacy interface, but the primary development path is now the FastAPI backend plus the React frontend.
MIT License. See LICENSE for details.