YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
Drone Log Extractor β Vercel Web App
A minimal Flask web app: upload an ArduPilot .bin log, download a CSV with:
Time_s, Alt_m, Speed_m_s, Throttle_pct, Battery_pct, Roll_deg, Pitch_deg, Yaw_deg, Lat, Lon
Files
drone_vercel_app/
βββ app.py # Flask app: upload form + extraction logic
βββ requirements.txt # Python dependencies
βββ vercel.json # Vercel build/routing config
βββ README.md
β οΈ Important limits before you deploy
Vercel serverless functions (Hobby plan) have:
- 10-second execution timeout β large/long flight logs may not finish parsing in time (Pro plan raises this to 60s+).
- ~4.5 MB request body limit β big
.binfiles may be rejected outright.
If your logs are large, either upgrade to Vercel Pro, or run the app on a platform without these limits (e.g., a small VPS, Render, Railway, or your own machine using the local CLI script I gave you earlier). This app is best suited for short/medium flight logs.
Option A: Deploy to Vercel (fastest)
1. Install the Vercel CLI
npm install -g vercel
2. Log in
vercel login
3. Deploy
From inside the drone_vercel_app folder:
cd drone_vercel_app
vercel
Answer the prompts (link to a new project, accept defaults). Vercel will build and give you a live URL like https://drone-log-extractor.vercel.app.
For production deployment (not just a preview):
vercel --prod
Option B: Deploy via GitHub (recommended for ongoing use)
- Create a new GitHub repo and push these 3 files (
app.py,requirements.txt,vercel.json):cd drone_vercel_app git init git add . git commit -m "Initial commit" git remote add origin https://github.com/YOUR_USERNAME/drone-log-extractor.git git push -u origin main - Go to vercel.com/new, import the repo, click Deploy.
- Vercel auto-detects the Python runtime from
vercel.jsonand builds it.
Testing locally before deploying
cd drone_vercel_app
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python app.py
Then open http://127.0.0.1:5000 in your browser, upload a .bin file, and confirm the CSV downloads correctly. This local test uses Flask's dev server β separate from how Vercel runs it, but confirms the extraction logic and UI work end-to-end.
How the UI works
- Visit the site β you'll see a simple dark-themed form with:
- A file picker restricted to
.binfiles - Two optional number fields for battery voltage range (defaults: 12.6V full / 9.9V empty, for 3S LiPo)
- A file picker restricted to
- Click Extract to CSV.
- The server parses the log in-memory, aligns all data streams by timestamp, and returns a preview page showing the first 20 rows in a scrollable table, plus row/column counts.
- Review the preview, then click β¬ Download CSV β this triggers an instant client-side download (the full CSV is embedded in the page, so no second server request is needed).
- Click Upload another file to go back and process a different log.
- If something goes wrong (wrong file type, no GPS data in the log, etc.), the upload page reloads with a clear error message instead of crashing.
Adjusting for your battery
Change the voltage fields in the UI per upload, or edit the defaults in app.py:
DEFAULT_FULL_VOLT = 12.6 # 4S = 16.8, 6S = 25.2
DEFAULT_EMPTY_VOLT = 9.9 # 4S = 13.2, 6S = 19.8
Troubleshooting
"Extraction failed: No GPS messages found in this log" Your log doesn't contain GPS data (e.g., indoor flight, GPS-denied test). Lat/Lon/Alt/Speed can't be reconstructed without it.
Deployment fails on pymavlink install
Vercel's Python build occasionally has trouble with compiled dependencies. If this happens, pin an exact working version in requirements.txt (e.g., pymavlink==2.4.41) and redeploy.
Upload silently fails / times out on Vercel You've likely hit the request size or execution time limit described above β try a shorter log or move to a platform without those constraints.