Beyond Cortex
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

CommandOptionsNotes
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 --yes

Validation & Encoding

CommandOptionsNotes
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

CommandOptionsNotes
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 --temporary

Curve 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=0 start / x=1 end; y=0=min-force / y=1=max-force; increasing y = increasing force
  • Device controls / path use 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 validateencode/--dry-runcreate/update when unsure.
  • Do not manually construct controls or path arrays; the encode engine generates them from --points.
  • extraConfig units are inconsistent by backend design: cableOffset is mm, endCableLength is cm (= ROM). The CLI handles conversion at the boundary.