How to Run the MediaCrawler WebUI for Non-Command-Line Usage
Launch MediaCrawler's graphical interface by running the FastAPI backend and Vite frontend in development mode, or build static assets for a single-process production deployment.
MediaCrawler provides a WebUI interface that eliminates the need for terminal commands when configuring and monitoring crawling jobs. Built on a FastAPI backend and Vite-powered frontend, this browser-based dashboard lets you set parameters, track progress, and export results through interactive forms. According to the NanmiCoder/MediaCrawler source code, the WebUI supports two distinct running modes tailored to different deployment scenarios.
Prerequisites for Running the WebUI
Before starting the graphical interface, verify these dependencies:
- uv – the recommended Python package manager for dependency resolution
- Node.js (≥ 16) – required for the Vite development server and static builds
- Playwright browsers (optional) – only needed if you disable CDP mode
Install and verify uv:
uv --version # should show a version number
Install browser drivers if needed:
uv run playwright install
Clone the repository and sync Python dependencies:
git clone https://github.com/NanmiCoder/MediaCrawler.git
cd MediaCrawler
uv sync
Development Mode: Interactive WebUI with Hot Reloading
Development mode runs the API server and Vite dev server as separate processes. This provides instant code reloading and is ideal for exploring features or customizing the interface.
Start the FastAPI Backend
In api/main.py, the FastAPI application registers routers for crawler operations, data retrieval, and WebSocket connections. Launch the backend on port 8080:
# Terminal 1
uv run uvicorn api.main:app --port 8080 --reload
The --reload flag enables automatic restart when Python files change. The API server exposes endpoints at http://localhost:8080/api/.
Start the Vite Frontend Dev Server
The frontend source lives in webui/ and proxies API requests to the backend. Open a second terminal:
# Terminal 2
cd webui
npm install
npm run dev
By default, the dev server serves the WebUI at http://localhost:5173 and forwards /api calls to port 8080.
Access the WebUI Interface
Open http://localhost:5173 in your browser. The dashboard automatically connects to the backend and displays:
- Platform selection (Xiaohongshu, Bilibili, etc.)
- Login type configuration (QR code, phone)
- Crawler type and keyword input
- Real-time progress monitoring via WebSocket
Production Mode: Single-Process WebUI Deployment
Production mode bundles the frontend into static assets served directly by the FastAPI process. No Node.js runtime is required for operation.
Build Static Frontend Assets
Execute the build command once to compile the Vite project:
cd webui
npm install
npm run build
Output is written to api/webui/, as configured in the build pipeline (documented in README lines 98–104).
Run the Unified API Server
Start only the FastAPI backend—it automatically detects and mounts the built assets:
uv run uvicorn api.main:app --port 8080
In api/main.py (lines 91–102), the static file mounting logic checks for WEBUI_DIR and registers routes for /assets, /logos, and /static. The compiled UI is served at the root path /.
Access http://localhost:8080 to use the WebUI without any separate frontend process.
Verifying Your WebUI Environment
Confirm that all dependencies are correctly installed by calling the environment check endpoint:
curl http://localhost:8080/api/env/check
A successful response returns "success": true. This endpoint, implemented in api/main.py (lines 88–130), executes uv run main.py --help to validate the crawling engine's availability.
Architecture of the MediaCrawler WebUI
| Component | Path | Function |
|---|---|---|
| FastAPI backend | api/main.py |
HTTP server, router registration, static file serving |
| Crawler router | api/routers/crawler.py |
Handles /api/crawler/* endpoints for job submission |
| WebUI source | webui/ |
Vite + Vue/React frontend code |
| Crawling engine | main.py (project root) |
CLI entry point invoked by API routes |
| Configuration | config/base_config.py |
Global toggles affecting UI-driven behavior |
When you submit a crawl job through the WebUI, the frontend sends a POST request to /api/crawler/run:
POST /api/crawler/run
{
"platform": "xhs",
"login_type": "qrcode",
"crawler_type": "search",
"keyword": "AI",
"save_option": "jsonl"
}
The backend translates this JSON into command-line arguments and executes main.py with the specified parameters.
One-Line Launch Commands
Background Development Mode
uv run uvicorn api.main:app --port 8080 --reload & \
cd webui && npm install && npm run dev
Complete Production Deployment
cd webui && npm install && npm run build && \
cd .. && uv run uvicorn api.main:app --port 8080
Key Differences Between WebUI Modes
| Aspect | Development Mode | Production Mode |
|---|---|---|
| Processes | Two (API + Node dev server) | One (API only) |
| Access URL | http://localhost:5173 |
http://localhost:8080 |
| Code changes | Instant hot reload | Requires rebuild |
| Deployment complexity | Higher | Lower |
| Best for | Exploration, customization | Stable operation, server deployment |
Summary
- MediaCrawler's WebUI provides full graphical control over crawling operations without terminal interaction.
- Development mode (
uv run uvicorn api.main:app --reload+npm run dev) offers the fastest feedback loop for interactive use. - Production mode (
npm run buildthen single API server) simplifies deployment by eliminating the Node dependency. - The backend (
api/main.py) serves both API endpoints and—when assets are built—static UI files. - The frontend (
webui/) communicates with/apiroutes that invoke the core crawling engine inmain.py.
Frequently Asked Questions
Can I run the WebUI without installing Node.js permanently?
No for development mode—Node.js is required to run the Vite dev server. Yes for production mode—Node is only needed during the build step. After running npm run build, you can deploy using only Python and uv.
Why does the WebUI use port 5173 in development but 8080 in production?
The Vite dev server defaults to port 5173 with proxy configuration to reach the API at 8080. In production, the FastAPI server itself serves the UI at port 8080, consolidating access to a single endpoint.
How do I debug WebUI connectivity issues?
Check three layers: (1) Verify the API responds with curl http://localhost:8080/api/env/check, (2) confirm the frontend proxy configuration in webui/vite.config.js points to the correct backend port, and (3) inspect browser DevTools Network tab for failed /api requests.
Can I customize which platforms appear in the WebUI interface?
Platform options are populated from the API response and ultimately derive from the modules in main.py. To add or remove platforms, modify the crawler registration logic in api/routers/crawler.py and ensure corresponding platform handlers exist in the crawling engine.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →