Skip to content

Presets ​

What this deployment's encoder accepts: profiles and presets.

What the encoder accepts ​

GET /v1/presets is the authority for this table: it is served by the deployment you are calling, so read it at run time rather than hard-coding ids. The tables here describe the contract as of this version.

For how presets interact with programmes and ambisonic sources, see Presets and programmes.

Profiles ​

The IAMF profiles are grouped in two families. Eclipsa (simple, base, base-enhanced) are the profiles the Eclipsa certification covers; IAMF 2.0 (base-advanced, advanced-1, advanced-2) are the object profiles. base-advanced is listed so the vocabulary is complete, but the encoder reads it and never declares it: passing it as profile is refused with profile-not-writable.

ProfileFamilyElementsChannelsObjectsWritten by this encoder
simpleEclipsa116noyes
baseEclipsa218noyes
base-enhancedEclipsa2828noyes
base-advancedIAMF 2.01818yesno, it is read but never declared
advanced-1IAMF 2.01818yesyes
advanced-2IAMF 2.02828yesyes

A profile the content cannot satisfy, for example discrete objects kept under a profile that carries none, is refused by the encoder at encode time. The conversion then ends in error and errorMessage carries the encoder's reason.

Presets ​

PresetWhat it doesDeclares without a profile
esferaKeeps the bed and every object discrete for Esfera playback; an ambisonic file is kept whole at its own order.base-enhanced for a bed-only or ambisonic master, advanced-1 with objects up to 18 elements and 18 channels, advanced-2 above that
youtubeFolds an ADM master's objects into one scene element beside the bed; an ambisonic file is kept whole at its own order.base (2 elements, 18 channels)
bed714_3oaA 7.1.4 bed plus a third-order Ambisonics scene built from the objects and HOA groups. For an ambisonic file the bed is rendered from the scene, so it needs a third-order file.base-enhanced
oa3Everything rendered to a single third-order Ambisonics scene. An ambisonic file goes in as it is and needs to be third order.base

A first- or second-order ambisonic source cannot go through bed714_3oa or oa3. Those requests are refused with preset-not-for-source. Use esfera or youtube, or supply a third-order source.

Ambisonic sources ​

A bare ambisonic WAV (first, second or third order) is accepted alongside ADM. source.normalization selects its channel normalisation: sn3d (AmbiX) is the default when the field is absent, n3d is accepted, and fuma is first order only and must be declared, because the file does not say which convention it uses. Sending source for an ADM master is refused with invalid-source-normalization.

Operations ​

GET Profiles and presets this encoder accepts ​

GET /v1/presets

The IAMF profiles grouped by family (eclipsa: Simple, Base, Base-Enhanced — the profiles the Eclipsa certification covers; iamf-2: Base-Advanced, Advanced-1, Advanced-2), with writable saying whether this encoder will declare each one, and the presets with the profile(s) each declares by default and the inputs it accepts. engine.orbitcore is the encoder version.

Responses

StatusMeaningBody
200The vocabulary. Cacheable for five minutes.PresetsResponse
401The API key is missing, malformed, unknown, revoked, expired, or for the other environment (invalid-api-key).Problem
429Over 120 requests/minute for this key (rate-limited). Honour Retry-After.Problem
bash
curl "https://api.esfera.audio/v1/presets" \
  -H "Authorization: Bearer $ESFERA_API_KEY"
js
import { Esfera } from "@esfera/sdk";

const esfera = new Esfera({ apiKey: process.env.ESFERA_API_KEY });

const { profiles, presets, engine } = await esfera.presets.get();
python
import os
import requests

res = requests.get(
    "https://api.esfera.audio/v1/presets",
    headers={
        "Authorization": f"Bearer {os.environ['ESFERA_API_KEY']}",
    },
)
res.raise_for_status()
print(res.json())

Response · 200

json
{
  "engine": {
    "orbitcore": "2.3.0"
  },
  "profiles": [
    {
      "id": "base-enhanced",
      "code": 2,
      "family": "eclipsa",
      "label": "Base-Enhanced",
      "maxElements": 28,
      "maxChannels": 28,
      "objects": false,
      "writable": true
    },
    {
      "id": "advanced-1",
      "code": 4,
      "family": "iamf-2",
      "label": "Advanced-1",
      "maxElements": 18,
      "maxChannels": 18,
      "objects": true,
      "writable": true
    }
  ],
  "presets": [
    {
      "id": "esfera",
      "label": "Esfera",
      "declares": [
        "base-enhanced",
        "advanced-1",
        "advanced-2"
      ],
      "objects": "keep",
      "inputs": [
        "adm",
        "ambisonic"
      ],
      "description": "Keeps the bed and every object discrete for Esfera playback."
    }
  ]
}

Objects ​

Profile ​

FieldTypeRequiredDescription
idsimple | base | base-enhanced | base-advanced | advanced-1 | advanced-2yes
codeintegeryesThe IAMF primary_profile value. 0 to 5.
familyeclipsa | iamf-2yes
labelstringyes
maxElementsintegeryes
maxChannelsintegeryes
objectsbooleanyesWhether the profile carries discrete objects.
writablebooleanyesWhether this encoder will declare it. Base-Advanced is read but not written.

Preset ​

FieldTypeRequiredDescription
idesfera | youtube | bed714_3oa | oa3yes
labelstringyes
declaressimple | base | base-enhanced | base-advanced | advanced-1 | advanced-2[]yesWhat the preset declares when you pass no profile. Several means the encoder picks by content (Esfera: Base-Enhanced for a bed-only master, Advanced-1 with objects within 18 elements / 18 channels, Advanced-2 above). outputProfile on the conversion is the per-job answer.
objectskeep | fold | sceneyesWhat happens to the master's objects.
inputsadm | ambisonic[]yes
descriptionstringyes

developers.esfera.audio · the Esfera Converter API, SDK and CLI