Avinox Calc

Avinox App Custom Setup

Copy these exact values into your DJI Avinox mobile application

Total Weight: -- kg

Range & Duration

This calculator — colour per mode DJI stock

Distance (km)

Duration (hours)

The grey bars are the DJI app defaults (ECO level 4 · 200 W, AUTO 7-11, TRAIL 9-11, TURBO level 13 · 1300 W) on the same rider model.

Calibrationnot calibrated

These estimates are still generic. Load a recorded ride (cloud_ride_rec_*.proto) to measure what your bike really consumes, and every range and runtime becomes yours.

Knowledge Base

Tour

Quick Start — the four steps

The order the app is meant to be used in, from setting the bike up to making the estimates yours

01

Hardware & rider parameters

What the estimates are built on

In the Tuner pick the motor (M2 / M2S) and the pack, then your weight, the bike's, your cadence and the power you can hold. Pick a riding style if you don't have your own W/kg targets — the range and runtime charts move as you change them.

  • Motor & battery pack
  • Rider + bike weight
  • Cadence and rider power
  • Riding style (or the W/kg sliders)
02

DJI Avinox mobile setup

Where the setup actually happens

The Tuner gives you three numbers per mode: Assist level, Max power and Max torque. Open the official DJI Avinox app and enter them for ECO, AUTO, TRAIL and TURBO — that is the step that puts your setup on the bike. The custom modes the Route tab proposes are entered the same way.

ECOfrom the Tuner
Assist levelMax powerMax torque
03

Route feasibility & replay

What a route costs, before you ride it

In the Route tab drop a planned route (.gpx / .kml from any planner) or a recorded ride (.proto from the DJI app), or type a distance and climb by hand. Press Analyze: the verdict stays at the top, the details — grades, climbs, modes, map, elevation — are the four blocks below it, one click away.

  • .gpx / .kml — is the battery enough?
  • .proto — what actually happened
04

Calibration on your own rides

Making the estimates yours

Load the recordings the DJI app saved on your phone: the app measures your real consumption (Wh/km) and applies it to every range and runtime, so the numbers stop being generic. From then on, each ride makes the estimates a little more honest.

Every analysed recording offers one thing you can take from it with one click: Use ride averages (the cadence and rider power you really pedalled at, into the Tuner). A recording carries the assist values the bike recorded — 1, 2, 3, 4 and occasionally others — and nothing that says which mode each one was: the app therefore shows the numbers as they are and does not map them to ECO/AUTO/TRAIL/TURBO. That also means it does not write per-mode targets into the Tuner on its own. The measured consumption (Wh/km over the whole ride) is applied automatically to the route estimates. A recording whose motor really did nothing is not a usable measurement: it is left out of the calibration, and the card names it and says why.

Two things are called "calibration" — they do different jobs. The real consumption (Wh/km, over the whole ride) is measured automatically from your rides and scales the Route energy estimate. Your riding style (average cadence and power) is applied only when you press Use ride averages, and it changes which assist levels are suggested — not the consumption model. Per-mode targets are not written from a recording: the file carries assist values, not mode names (see below), so the app has nothing to attribute them with.

Your rides — real consumption and the map

What the recordings contain, what the graphs show, and how the estimates become yours

Getting the files

  1. Open the DJI Avinox app and make sure the rides you want are synced.
  2. The recordings live on the phone under Android/data/com.avinox.ride/files/ebike/data/. The simplest way is the USB cable: connect the phone, choose File transfer (not "charging only") and copy that folder from the PC.
  3. From Android 11 some phones hide that folder from the file manager. If yours does, pull it into the phone's Download folder with adb pull "/sdcard/Android/data/com.avinox.ride/files/ebike/data/" /sdcard/Download/ and load the files here.

Everything is parsed in the browser: the files are never uploaded. Loading the same ride twice is recognised (by its ride id) and skipped. The library is kept on this device, so a refresh does not lose it — Clear all data in the header removes it, Export saves it to a file.

Reading a ride

Map

The track is drawn over OpenStreetMap and can be coloured by speed, altitude, gradient, rider/motor power, cadence, gear, battery or heart rate. The legend under the selector shows the value range.

Nine graphs

Elevation & gradient, speed & cadence, power (rider/motor/total), torque, gear/heart/assist, battery & environment, distance & energy and the raw IMU channels — downsampled so the shape of the ride is readable rather than noisy.

Synchronised cursor

Pointing at any graph draws the same time position on every graph and moves the marker on the map — and pointing at the track on the map moves the cursor back on the graphs.

Controls

Drag on a graph to zoom (all graphs follow), double-click to reset, ⤢ enlarges a graph, 📌 pins a graph so it stays visible while you scroll.

Stretches drawn dashed

If part of the track on the map is dashed, the recording has no position there: the device was still logging speed, power and distance, but the GPS had no fix (a valley, a tunnel, a low-power state) and the coordinate fields are simply missing from the file. The app draws those stretches dashed instead of joining them with a straight line the bike never rode; the note under the map says how many there are and how long they were. The odometer keeps counting through them, so the distance and the Wh/km are unaffected.

From data to estimates

The app measures the motor energy actually used per kilometre (Wh/km) over the rides loaded. Because each file restarts its distance counter at zero, the distances of all loaded rides are added up — so more rides give a steadier figure. The motor energy is what the motor delivered, not what left the battery: the app converts it with the drive efficiency measured on the battery drop of the rides (motor Wh over the Wh the drop represents on the pack selected in the Tuner). When the drop is under 15% or the result is not plausible — a range extender, or another pack than the one selected — it uses 80% and says so. The Tuner then projects each mode from that real consumption, and it does so with the mix of modes you actually rode: the distance covered in each mode is the weight, and a mode is scaled by its own support relative to that mix. The projection therefore reproduces your measured consumption for the riding you did, and extrapolates to the modes you did not use. A recording does not carry the assist level you had set, so no level is involved. Loading a recording also puts it straight into the route analysis: pick it in step 1 and it becomes the analyzed route.

Curiosities worth knowing: the measured consumption counts all the motor energy over the kilometres ridden, coasting included, because that is what came out of the battery. A recording carries a number for the assist, not the mode's name, and the numbers follow the factory list order, not the button cycle: 1 = ECO, 2 = TRAIL, 3 = TURBO, 4 = AUTO, and 20 and up are custom modes. DJI does not document them: the mapping comes from real rides, so the table also describes each value by what the motor did — a fixed motor/rider ratio, or a dynamic one that grows with the gradient, as AUTO does — and a wrong name would show; on the map Assist mode colours the track by the same values. Because of that per-mode targets are not written from a recording; the Tuner's range charts use the whole-ride consumption instead, which needs no mode names. The per-value table averages only over the samples where you were actually pedalling, which is why the "riding" figures are higher than the "total" ones. A ride with no usable measurement at all — the motor really did nothing — is left out of the calibration and named in the card.

Route — planning and replaying

Energy feasibility and route-aware assist modes, from a planned track or a recorded ride

Input

Drop a GPX/KML route or a .proto recording — or type a distance and elevation gain by hand; with a file the fields are filled from it and stay editable. Surface composition and the reserve you want left at the finish complete the picture.

Surface composition — the six voices

Say what you can see under the wheels, not what the trail is called: the mix is how much of the route is fast, how much is rough and how much is deep. The Read the surface from OpenStreetMap button fills the percentages from the ways along the loaded route or ride: one request, and only the sampled coordinates leave the device — never the file. What the map does not describe stays unknown instead of being guessed, and the mix remains the app's estimate, not a measurement.

  • Tarmac — smooth asphalt: the fastest voice and the cheapest per kilometre.
  • Compacted gravel — gravel pressed into a firm track: almost as fast as tarmac, a little more rolling resistance.
  • Packed dirt — dirt hardened by traffic: predictable when dry, slower and softer once it dampens.
  • Mixed stones and roots — broken ground with loose stones: grip and line choice cost more than speed.
  • Rock and roots — steep, blocked terrain: low speeds and short bursts of torque dominate the energy.
  • Mud or sand — soft ground that swallows the wheels: the heaviest of the six, and the hardest to estimate.

Where the numbers come from

The analysis uses the bike, battery, rider and bike weight, cadence and rider power set in the Tuner — change any of them there and the analysis refreshes by itself. How much the numbers move depends on the input: a planned route has no measurement of its own, so its estimate follows the rider directly (120 kg instead of 82 turns 366 Wh into 411 Wh on the same track), while a recording is anchored to the energy that ride actually used, so its headline stays put and what moves is the factor badge, the mode split and the proposed mode rows. The per-mode W/kg targets are not used here: the route proposes its own modes, while your base ECO/AUTO/TRAIL/TURBO setup stays in the Tuner.

Output

The energy verdict (feasible or critical), the consumption breakdown and the usable battery after the reserve — plus, with a route file, the grade bars, the detected climbs and descents with their numbers, the elevation profile (both tables are marked on it) and the route on a map coloured by gradient. A recording brings its own map and sensor graphs instead (the graph stack already shows elevation and gradient).

Proposed route modes

Custom modes are proposed only when the route justifies them: a climb mode when sustained climbs are detected, a technical mode when steep sections matter, an endurance mode for the rest. Each proposal carries the reasoning, and the values are already snapped to the app's entry grid.

Your consumption, not a generic one

When a measurement is available the estimate is scaled by a personal factor, and the badge says where it came from (“×0.97 this ride”, “×0.85 calibration”). The factor compares the battery energy of your rides with what the model predicts for the same rides under the same assumptions — surface and steepness included — so the surface you pick is applied once, not on top of a measurement that already contains it. For a recording the headline is the energy that ride actually used, with the model projection underneath as the comparison. A measurement outside the plausible range (a factor far from 1, or under 2.5 Wh/km) is not applied: the figures come from the generic model and the card says so.

Analyze a recorded ride: load the .proto files in step 1, pick the one you want in the Ride selector and press Analyze — distance, elevation, grade distribution, climbs and descents are rebuilt from that ride's GPS, while step 2 shows its map and every sensor channel. One ride at a time: merging several tracks would join unrelated GPS points.

Mastering the Advanced W/kg Sliders

How to use the manual sliders to mathematically manipulate motor output limits

By expanding the drawer on the tuner screen, you gain granular control over the electrical curves. Each slider represents the desired power target in Watts per Kilogram (W/kg) of total system weight. The application processes these thresholds to define specific app limits:

ECO Slider (Range: 0.75 – 2.00 W/kg)

Sets the baseline background support. Dropping it below 1.00 W/kg creates a highly natural feel that demands active muscle force but preserves tremendous battery life on flat transit paths.

AUTO Slider (Range: 1.50 – 4.50 W/kg)

Adjusts the top ceiling for the system's dynamic mode. A higher value causes the Avinox smart algorithm to scale up power output much faster on changing slopes, compensating for sudden steep sections.

TRAIL Slider (Range: 2.50 – 7.50 W/kg)

Controls sustained technical singletrack delivery. Keeping this slider bounded between 5.00 and 5.50 W/kg delivers exceptional technical climbing punch without spinning out or losing tire traction on loose gravel tracks.

TURBO Slider (Range: 3.50 – 10.00 W/kg)

Manages the emergency acceleration ceiling. Sliding this setting to ≥ 6.00 W/kg activates the High Energy Drain Zone, triggering visual warnings because power draws scale exponentially.

Parameters Dictionary & Logic Boundaries

Understanding the core thresholds of the DJI Avinox software

Multiplier (W/kg) Primary Input Variable

Determines the motor power limits adjusted to the system total mass. Shifting this threshold automatically recalibrates all subsequent watt parameters across every active mode profile.

Power Limit (Watts) Battery Control

Specifies the continuous electrical power maximum of the system. Restricting this limit (e.g., 150W in ECO) acts as the primary protection layer against premature battery drainage.

Max Torque (Nm) Response Dynamics

Defines the peak turning force of the motor block. Lower settings offer smooth traction, while values exceeding 80 Nm produce a quick, dirtbike-like engagement on steep trails. The Tuner sizes it so the mode still reaches its Max Power on a climb at 60 RPM (or at your cadence, if lower): sized at a cruising 80 RPM, the motor would stop at the torque limit, a quarter below the power you set, exactly where you need it.

Assist Level (Multiplier Factor) Bio-Mechanical Match

Determines how many times the motor multiplies your manual leg effort. Highly useful for compensating rider fatigue without changing the absolute power boundaries.

Assist Level: Fixed vs Range

How each mode behaves, and what is verified against the Avinox app

Mode Assist Level Behaviour
ECO Fixed (single level) Constant assistance, lowest consumption.
AUTO Range (min–max) Varies assistance with resistance. Only mode with Max Acceleration.
TRAIL Range (min–max) Wide range, technical climbing support.
TURBO Fixed (single level) Constant maximum assistance.
Custom modes Fixed (single level) Modes added with the “+” button in the app do not use ranges.
Level Motor output Note
135%
270%
3100%Anchor point
4150%Anchor point
5185%
6215%
7245%
8300%Anchor point
9360%
10435%
11515%
12605%
13700%Anchor point
14765%
15800%

Motor output as % of rider input, per assist level. Community-confirmed mapping (multiple independent users agree on the full curve); the DJI app does not display these percentages, so treat them as the best available reference, not an official DJI specification.

Stock mode Level Max torque Max power DJI est. range
ECO Level 4 (150%) 50 Nm ~200 W 64 km
AUTO Range 7-11 (245-515%) 130 Nm 1300 W 49 km
TRAIL Range 9-11 (360-515%) 130 Nm 1300 W 45 km
TURBO Level 13 (700%) 130 Nm 1300 W 40 km

Stock mode defaults as shipped by the DJI app (screenshot-verified). Each stock mode can only use levels inside its own band — ECO 1-7, AUTO 3-11, TRAIL 6-13, TURBO 8-15 — the same bands this calculator uses. DJI's estimated ranges assume their own riding model; this calculator's estimates are independent and typically more conservative.

Boost Duration

Adjustable from 1 to 60 seconds, default 30 s. Torque and power in Boost are fixed by the hardware and are not user adjustable. On the M2S the full 1500 W / 150 Nm requires the FP700 or the RS800 pack; with the FS600, FS800 and RS600 peak power stays at 1300 W.

Battery Packs

Integrated: 600 / 700 (FP700) / 800 Wh. Removable: RS600 (600 Wh, also usable as a range extender) and RS800 (800 Wh).

Boost Local Enhancement

A switch inside Custom Assist Modes. It is entirely the rider's choice and is not used anywhere in this calculator's math.

What is verified: the Fixed/Range behaviour of each mode, the adjustable Boost duration, and the M2 / M2S torque and power figures.
Community-confirmed: the 15-level support table (motor output as % of rider input, see the table above).
What is this project's own calibration: the per-mode level bands (ECO 1-7, AUTO 3-11, TRAIL 6-13, TURBO 8-15), the W/kg targets and the range/runtime estimate. These are tuning assumptions, not Avinox specifications.
How the range and runtime estimate works: the energy a kilometre needs is set by the ground, not by the mode; the mode decides how much of it the motor supplies — its motor share, motor over motor plus rider at your input (a range mode such as AUTO counts at the middle of its levels). On two real rides both held: at the same gradient the total energy per km barely changed between ECO and AUTO, and the motor share matched the assist ratio. So once the motor does most of the work, more assist adds little per kilometre: the difference shows per hour, because a stronger mode climbs faster. Without rides the Tuner uses the Route model on a reference ground (15 m of climbing per km, mixed surface), anchored on the DJI stock modes. With rides loaded it uses your rides' ground and splits your measured consumption between the modes by their motor share against the one measured on the rides. Runtime uses a moving speed that grows with the total power on climbs, fitted on those two rides (8.5 km/h in ECO, 10.3 km/h in AUTO on 7–12% climbs). It is a personal estimate, not a guarantee.

Entry Grid: Why Values Are Rounded

The Avinox app does not accept arbitrary numbers

Max Torque and Max Power are stepped in the app: you cannot enter any value you like. This calculator therefore snaps every suggestion to the grid, so what you read here is exactly what you can enter.

Max Torque — 5 Nm steps

Real-world setups use 50, 75, 85 and 105 Nm. Since 75/85/105 are not multiples of 10, the step must be 5 Nm.

Max Power — 50 W steps

Real-world setups use 400, 500, 600, 700, 750 and 850 W. Since 750/850 are not multiples of 100, the step must be 50 W.

When rounding moves a value, the card shows the computed figure in brackets next to the one to enter (e.g. 800 W (computed 811 W)). Torque is always capped by the motor (110 Nm on the M2, 130 Nm on the M2S).
To confirm: the exact steps and any per-mode minimum or maximum are read off the app itself. If your app uses a different step, it is a single constant to change in src/server.ts.

The Fundamental Formula of Avinox Systems

The engineering mechanics balancing power delivery

Motor Power (W) = (Max Torque [Nm] × Cadence [RPM]) / 9.55

The DJI engine output relies structurally on your pedaling frequency:

Lazy Cadence (52 RPM)

Grinding a tall gear clamps the physical output ceiling to roughly 708 W on the M2S (130 Nm), wasting energy through thermal loss.

Sport Cadence (90 RPM)

Spinning an agile gear unlocks the architecture: up to 1225 W on the M2S. The M2 reaches 1100 W at the same cadence.

The app itself

Installing it, dark mode, saved settings and the reset

Install on the phone

On a mobile browser an Install button appears in the header: on Android/Chrome it opens the native install prompt, on iPhone/iPad it shows the Share → Add to Home Screen steps. Installed, the app opens full screen and its shell works offline.

Dark mode

The ☾ button in the header switches theme; the choice is remembered between visits.

What is remembered

Tuner values and W/kg sliders, the theme, the graph order and which graphs are pinned — all stored locally in the browser, never uploaded. Your loaded routes and rides are kept on this device too (IndexedDB): a refresh re-parses them and puts the page back the way you left it, quietly. The raw files are never uploaded anywhere. The calibration is stored as well: your measured Wh/km keeps scaling the Tuner, the Route analysis and every planned route even after the recordings are cleared or replaced — the Saved calibration card says so, and Remove calibration takes it back to the generic model.

Export, import, clear

Export (header) writes everything stored on this device — the routes and rides you loaded, plus the calibration — into one JSON file. Import puts such a file back: it replaces what is on this device and reloads the app, so it is the way to move your data to another browser or to restore a backup. Clear all data deletes the stored files, the calibration and every saved setting, returning the app to its defaults.

Reset

Clear all data (in the header) clears the loaded routes and rides, the calibration, the route analysis and every saved setting, returning the app to its defaults.

What the app does not know: your tyre pressure, your fitness on the day, wind, or how much you actually pedal when the trail points down. The estimates are projections from recorded data — useful for planning, not a promise for the trail.