AREAvinox Ride Explorer
Loading vector map…
↥

Explore every second of your ride

See your route, ride stats and sensor data together.
Load your own rides or explore with demo data.

ANALYTICS OUTPUT

Edit Analytics

HOW WOULD YOU LIKE TO START?
AIAsk AI

What would you like to see?

Current script

PREVIEW
Advanced / Edit script

Edit Library Analytics

Writing an output

Each script starts with @version 1, may define a few named calculations, and ends with exactly one output.

Recorded values

Use names such as Speed, Cadence, RiderPower, MotorTorque, Gradient, and Time. The editor suggests all available values as you type.

Calculations

Create uppercase variables and combine values with + - * /, comparisons, and and, or, or not.

CLIMBING = Speed > 3 km/h and Gradient > 3 %

Functions

Summarize with average(), minimum(), maximum(), sum(), or count(). Use smooth(values, seconds) for a calmer line.

Comments

Start a line with # to explain a calculation without changing its result.

Output

Use one of four graph types. Line is for an ordered trend, Scatter for a filtered relationship, Bar for a few calculated groups, and Heatmap for dense x/y samples.

Timeline zoom is also an Analytics filter. When a time graph is zoomed, cards and every plot type automatically analyze only that section. Full-series calculations such as smooth() are calculated first, then the selected range is applied.

# Card: one derived value
asCard("Peak torque", maximum(MotorTorque), unit: "Nm")

# Line: compare rider and motor contribution over time
RIDER_30 = smooth(RiderPower, 30 seconds)
MOTOR_30 = smooth(MotorPower, 30 seconds)
TOTAL_30 = RIDER_30 + MOTOR_30
# Add 1 only while total power is zero so coasting stays visible at 0%.
SAFE_TOTAL = TOTAL_30 + (TOTAL_30 == 0 W) * 1
RIDER_SHARE = RIDER_30 / SAFE_TOTAL * 100
MOTOR_SHARE = MOTOR_30 / SAFE_TOTAL * 100
MOVING = Speed > 3 km/h
asLine("Rider vs motor contribution", x: Time, y: [RIDER_SHARE, MOTOR_SHARE], where: MOVING, yUnit: "%")

# Scatter: reveal how the motor responds to rider effort
RIDER_15 = smooth(RiderPower, 15 seconds)
MOTOR_15 = smooth(MotorPower, 15 seconds)
POWERING = Speed > 3 km/h and TotalPower > 50 W
asScatter("Rider effort vs motor support", x: RIDER_15, y: MOTOR_15, where: POWERING, xUnit: "W", yUnit: "W")

# Bar: compare calculated buckets
asBar("Average power by gradient", x: ["Flat", "Climb", "Steep"], y: [120, 185, 245], yUnit: "W")

# Heatmap: reveal where thousands of samples concentrate
PEDALLING = Cadence > 20 rpm and RiderTorque > 0 Nm
asHeatmap("Pedalling style", x: Cadence, y: RiderTorque, where: PEDALLING, xUnit: "rpm", yUnit: "Nm")

Scatter automatically limits very long rides to a representative set of visible points; Heatmap still uses every matching sample and colors density from cool blue to hot red. A timeline zoom is shown once over the map and filters the whole Analytics board. The editor highlights mistakes, offers completions, and shows the result before you close it. Ask AI knows the same rules and can choose a plot from a plain-language request.

Appearance

Choose a theme for Ride Explorer.

Reset Analytics?

All custom Analytics and their order will be lost and replaced with the current defaults.

Your rides stay with you

Local data

Rides are saved in your browser. Export or delete them at any time. No data is sent to the server.

Cloud sync

Cloud imports pass through the server temporarily. No data is saved on the server.

Cookies & trackers

No cookies. No third-party trackers.

Usage counts

We count page loads by country and device type. Only totals are saved, with no IP addresses or individual tracking.

Optional sharing

Shows roughly where rides are loaded. Your route and exact location stay private.

Example only. Each count covers a broad area.

Join rides

Choose rides manually

Avinox Ride Explorer

This is a private, noncommercial hobby project, created with the help of AI.
I built it because there is no official tool to analyse Avinox rides the way I wanted.


The core idea is simple: your ride data stays with you, saved in your own browser rather than on my server.
Mainly for data security, but also because I’m too lazy to manage user accounts and everyone’s ride data!


Loaded rides never leave your device.
Cloud import needs the server because Avinox cannot be accessed directly from your browser.
Your login and rides pass through temporarily but nothing is saved there.

Optional sharing is explained in Privacy & Sharing.


This is an independent, non-commercial fan project and is not affiliated with, endorsed by, or connected to DJI or Avinox.

Load from your Android phone

No app is required. Your ride is read directly from the phone and stays in this browser.

  1. Enable Developer options: on your phone, open Settings → About phone and tap Build number seven times.
  2. Open Settings → Developer options and enable USB debugging.
  3. Connect the phone to this computer with a USB data cable and unlock it.
  4. Select Connect phone below, choose your phone in the browser window, then approve Allow USB debugging on the phone.

Troubleshooting

Requires Chrome or Edge. If the phone is not listed, disconnect it, reconnect it and try again.
Use a data-capable cable and close other ADB tools.
In Developer options, try Revoke USB debugging authorizations, then disconnect and reconnect the phone and approve the new debugging prompt.

Load your rides

Sign in to your Avinox account to choose rides, or use another method below.

From Avinox CloudSign in to choose your rides. No bike or phone connection needed.

Cloud import

Your login and rides pass through the Ride Explorer server. Select ? for details.

Load .proto ride filesChoose files from your bike, phone or computer.

From the bike display
1. Turn the bike on and connect the display using a USB 2.0 USB-A to USB-C data cable.
2. Choose your ride files from the ride_rec folder.


With Android
1. Download your rides in the Avinox app.
2. Find the files in Android/data/com.avinox.ride/files/ebike/data/b-*_ov/ and choose them below. Android may hide this folder; if so, use Connect Android phone instead.


With iPhone
1. Turn the bike on and connect your iPhone to the display with a data cable; an adapter may be needed.
2. In the Files app, open the display and copy the .proto files from ride_rec to your iPhone.
3. Transfer the files to your PC using iCloud or a USB storage device.
4. On the PC, choose the files below.
Alternatively, try an iPhone backup with iMazing or similar software.


Connect Android phoneLoad rides directly from the Avinox app using USB debugging.

Download the rides in the Avinox app, then connect your phone to this computer with a USB data cable. Requires Chrome or Edge and USB debugging.

Sync PC and phoneCopy rides already loaded in Ride Explorer between devices.

Rides already loaded in Ride Explorer synchronize directly between both devices.
Show the QR on the PC and scan it with the phone’s normal Camera app.
Each device sends what the other is missing, so both finish with the same ride library.

Scan with the other device

Use its normal Camera app. Both ride libraries will synchronize automatically.

Preparing secure connection…

Your privacy

Why is a server needed?

Avinox does not allow this website to download rides directly from your account.
Ride Explorer must therefore act as a secure middleman between your browser and Avinox.

What happens?

  1. You enter your Avinox login.
  2. Ride Explorer passes it to Avinox. Your data is not saved on Ride Explorer.
  3. Avinox gives Ride Explorer temporary access to your cloud rides.
  4. Your rides pass through Ride Explorer and are saved in your browser.
  5. Ride Explorer does not keep a copy of any of your data.

When you log out, the temporary Avinox access is removed.
Rides already imported remain in your browser until you delete them.

In short

Technical note

Avinox requests require protected Avinox signing credentials and are blocked from normal browser access. Ride Explorer therefore performs the signed requests and keeps the Avinox account token in memory for a short-lived session.

The browser stores a short-lived Cloud Sync session locally. Ride files are streamed directly to the browser and stored in IndexedDB.

Email addresses, Passwords, Avinox tokens, temporary download URLs and ride files are NOT written to persistent server storage.

Choose rides to import

Rides already in your database can be selected again. Re-importing replaces the existing ride, including a ride stored inside a merged ride.

Choose a bike

Your Avinox account contains rides from more than one bike.

Choose a bike

Only rides from the selected bike will be exported.

Export rides

Choose a format to export your rides as a ZIP file.

Manage saved data

Back up, restore or remove rides and settings saved in this browser.

Choose what to clear

This permanently removes the selected data from this browser. Back it up first if you may need it again.

This cannot be undone. Only items selected above will be cleared.

Choose backup contents

Select what to include.

Adding rides to your library

Preparing rides…

0 imported · 0 skipped · 0 failed