Drop Avinox .proto files or a ZIP archive here
.proto
Request: Tell AI what you want to create or change.
Each script starts with @version 1, may define a few named calculations, and ends with exactly one output.
@version 1
Use names such as Speed, Cadence, RiderPower, MotorTorque, Gradient, and Time. The editor suggests all available values as you type.
Speed
Cadence
RiderPower
MotorTorque
Gradient
Time
Create uppercase variables and combine values with + - * /, comparisons, and and, or, or not.
+ - * /
and
or
not
CLIMBING = Speed > 3 km/h and Gradient > 3 %
Summarize with average(), minimum(), maximum(), sum(), or count(). Use smooth(values, seconds) for a calmer line.
average()
minimum()
maximum()
sum()
count()
smooth(values, seconds)
Start a line with # to explain a calculation without changing its result.
#
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.
smooth()
# 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.
All custom Analytics and their order will be lost and replaced with the current defaults.
When you load a ride, the app reads the file directly in your browser to show the map, graphs and ride details.The ride file is never uploaded!
Your loaded rides are saved in the browser's local database, so you can open them again later. You can export, import or clear that database at any time.
The server keeps aggregate daily page-view counts by country. It does not store IP addresses, locations, cookies, visitor identifiers or individual records.
Select Load Rides, then choose the source you want to use.
Use the ride list to switch rides. Choose ★ Show all rides on map to browse saved rides together. Right-click a place on the map to find saved rides nearby. Move over a graph, or tap it on a phone, to follow that point on the map.
Drag across a graph to select part of a ride. Select Range, or double-click the map or a graph, to clear the selection. Open Menu to change units, timeline labels and route colours.
Use the pencil beside the ride list to rename or delete a ride. Select Merge Rides to join ride parts.Open Analytics and select Add Analytics to add an insight or chart.Use the play control to replay a ride; select its record button to create a video. Open Menu → Settings for bike names, privacy and local data backup.
Your ride data always stays on your device, in this browser. Syncing connects your own devices directly; it does not upload your rides. You can review privacy choices, back up your data, or remove it at any time in Settings.
This is an independent community app, not an official Avinox app. Ride readings can occasionally be missing or imperfect.
Questions, ideas and bug reports are welcome. Your email and message are saved on this server so I can read and reply later.
No app is required. Your ride is read directly from the phone and stays in this browser.
Choose the source that matches where the ride is stored. Imported rides stay in this browser.
Turn the bike on and connect the Avinox Display to a PC or phone.Open the ride_rec folder, then choose its .proto files.
ride_rec
Important:use a data-capable USB 2.0 connection. USB 3.x connections may not expose the display correctly. On phones use an OTG adapter/USB hub. Android may still have trouble reading the drive.
Rides are on the phone after downloading them in Avinox app.
Connect Android phone with a USB data cable to the PC.Direct loading requires Chrome or Edge, Developer options, and USB debugging.
Look in /sdcard/Android/data/com.avinox.ride/files/ebike/data/b-*_ov/Android may hide the Android/data folder.
/sdcard/Android/data/com.avinox.ride/files/ebike/data/b-*_ov/
Android/data
Create a device backup with iMazing.In the Avinox Ride folder, show hidden files and copy the .proto files.
Sign in to see rides saved in your Avinox account, then choose which ones to import.
Cloud Sync sends account requests through the Ride Explorer server. Read ? to see exactly how Cloud Sync handles your login and ride data.
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.
Use its normal Camera app. Both ride libraries will synchronize automatically.
Keep this page open until both devices have the same ride library.
Both devices now contain the same ride library.
Preparing secure connection…
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.
When you log out, the temporary Avinox access is removed.Rides already imported remain in your browser until you delete them.
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 receives only an HttpOnly session cookie. 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.
MEMBER CENTER
Secure local connector to Avinox cloud.This is part of Avinox Ride Explorer, not a Avinox webpage.
Rides already in your database can be selected again. Re-importing replaces the existing ride, including a ride stored inside a merged ride.
Your Avinox account contains rides from more than one bike.
Only rides from the selected bike will be exported.
Names and colors apply to every saved ride from this bike. Standard assist modes are fixed and are not listed here.
Save changes
This permanently removes the selected local data from this browser. Export a database backup first if you may need your rides again.
This cannot be undone. Only items selected above will be cleared.
Select what to include.
Preparing rides…
0 imported · 0 skipped · 0 failed