Cortex References
Custom Curves
Create, validate, encode, update, delete, and apply custom resistance curves.
Custom Curves
Custom-curve commands split into two categories:
- Cloud API (
list,validate,encode,create,update,delete): no device connection required. - Device command (
apply): requires an active BLE connection. Fetches curve from cloud and sends to device.
Curve Management
| Command | Options | Notes |
|---|---|---|
voltra custom-curve list | [--api-key <key>] [--json] | List all custom curves for the account. |
voltra custom-curve create | --name <name> --rom-cm <cm> --min-force <n> --max-force <n> --points <points> [--cable-offset-cm <cm>] [--dry-run] [--api-key <key>] [--json] | Create a new curve. Use --dry-run first to preview the payload. Enforces unique name. |
voltra custom-curve update <id> | --name <name> --rom-cm <cm> --min-force <n> --max-force <n> --points <points> [--cable-offset-cm <cm>] [--dry-run] [--api-key <key>] [--json] | Update an existing curve. Use --dry-run first. Enforces unique name (excluding self). |
voltra custom-curve delete <id> | --yes [--api-key <key>] [--json] | Delete a curve. Requires --yes confirmation. Idempotent — deleting a non-existent ID still returns success. |
voltra custom-curve list
voltra custom-curve create --name "Linear Up" --rom-cm 120 --min-force 10 --max-force 100 --points "0,0;1,1"
voltra custom-curve update 42 --name "Renamed" --rom-cm 120 --min-force 10 --max-force 100 --points "0,0;1,1"
voltra custom-curve delete 42 --yesValidation & Encoding
| Command | Options | Notes |
|---|---|---|
voltra custom-curve validate | --rom-cm <cm> --min-force <n> --max-force <n> --points <points> [--json] | Local only — no API call, no --name or --api-key needed. Check valid and issues[] in output. |
voltra custom-curve encode | --name <name> --rom-cm <cm> --min-force <n> --max-force <n> --points <points> [--cable-offset-cm <cm>] [--json] | Encode draft into device protocol payload (controls / path / extraConfig) for debugging. No API write. |
voltra custom-curve validate --rom-cm 120 --min-force 10 --max-force 100 --points "0,0;1,1"
voltra custom-curve encode --name "Linear Up" --rom-cm 120 --min-force 10 --max-force 100 --points "0,0;1,1"Applying to Device
| Command | Options | Notes |
|---|---|---|
voltra custom-curve apply <id> | [--temporary] [--device-id <id>] [--timeout-ms <ms>] [--json] | Requires BLE connection. Fetches curve from cloud, switches device to Professional mode, sends Bezier bytes, sets cable offset. --temporary makes cable offset non-persistent. Mode switch rolled back on failure. |
voltra connect <DEVICE_ID>
voltra custom-curve list # get curveId
voltra custom-curve apply 42
voltra custom-curve apply 42 --temporaryCurve Parameters
Shared Draft Parameters
Used by create, update, validate, and encode:
Prop
Type
--points Format
"x1,y1;x2,y2;x3,y3;...";separates points,,separates x/y- x/y ∈ [0,1]; x strictly increasing; at least 2 points
- Mathematical coordinates (bottom-origin):
x=0start /x=1end;y=0=min-force/y=1=max-force; increasing y = increasing force - Device
controls/pathuse the same coordinate system, no internal flip
Common shapes:
| Shape | --points |
|---|---|
| Ascending line | "0,0;1,1" |
| Descending line | "0,1;1,0" |
| Midpoint peak (lighter ends) | "0,0.2;0.5,1;1,0.2" |
| Midpoint valley (heavier ends) | "0,0.8;0.5,0;1,0.8" |
Guardrails
- Always
validate→encode/--dry-run→create/updatewhen unsure. - Do not manually construct
controlsorpatharrays; the encode engine generates them from--points. extraConfigunits are inconsistent by backend design:cableOffsetis mm,endCableLengthis cm (= ROM). The CLI handles conversion at the boundary.