{
  "id": "osc-stack-video-to-hls",
  "job": "Turn a video file into HLS and DASH streams plus MP4 renditions with Open Media Convert on Open Source Cloud: one hosted product that encodes with SVT Encore and packages, with no transcoding pipeline to wire. From your own code, the Open VideoCore API does the same job one call per step.",
  "aliases": [
    "convert video to hls",
    "video file to hls stream",
    "transcode a video to hls without a pipeline",
    "open media convert hls",
    "hosted video to hls api"
  ],
  "distinctFrom": [
    {
      "id": "osc-stack-media-transcode-package",
      "descriptorUrl": "https://www.osaas.io/stacks/media-transcode-package.json",
      "why": "That recipe assembles the chain from separate catalog services (Encore, Valkey, Encore Callback Listener, Encore Packager). This one is the one-product path: Open Media Convert, or one Open VideoCore instance that provisions and scales those parts for you."
    }
  ],
  "inputs": [
    {
      "protocol": "https",
      "source": "a video file you upload, or a link to one (Media Convert app); or a public URL passed to POST /api/v1/assets/ingest-url (Open VideoCore API)"
    }
  ],
  "outputs": [
    {
      "protocol": "https",
      "consumer": "HLS and DASH streams for any player or CDN, plus MP4 renditions for direct playback"
    },
    {
      "protocol": "https",
      "consumer": "GET /api/v1/assets/:id/delivery returns the playback URLs (Open VideoCore API)"
    }
  ],
  "paths": {
    "hostedApp": {
      "url": "https://mediaconvert.apps.osaas.io",
      "steps": [
        "add a video from a file or a link",
        "choose a profile, or write your own in Encore YAML",
        "watch it in Activity, then play or download"
      ],
      "source": "mediaconvert.apps.osaas.io homepage, read 2026-10-30; only claims the page does not mark as unverified are used"
    },
    "api": {
      "serviceId": "eyevinn-open-videocore",
      "calls": [
        "POST /api/v1/provision (media stack: MinIO, CouchDB, Valkey; poll the returned operationId until status is done)",
        "POST /api/v1/profiles/bootstrap (seed the default Encore profiles)",
        "POST /api/v1/assets/ingest-url",
        "POST /api/v1/assets/:id/transcode",
        "POST /api/v1/assets/:id/package",
        "GET /api/v1/assets/:id/delivery"
      ],
      "source": "eyevinn-osaas/open-videocore README at d9b9bfefea28f6b9263da5794251eab8f55331c3, the commit of the catalog stable image on 2026-10-30"
    }
  },
  "recommendedPath": {
    "chain": [
      {
        "step": 1,
        "action": "create an app-config parameter store",
        "role": "Open VideoCore tracks the backing services it provisions in it; the agent returns its API key"
      },
      {
        "step": 2,
        "serviceId": "eyevinn-open-videocore",
        "role": "the media API: provisions a stack, ingests, transcodes with Encore, packages HLS and DASH, returns playback URLs",
        "requiredConfig": [
          "name",
          "OscAccessToken",
          "ParameterStoreApiKey",
          "ParameterStore",
          "MinioRootPassword",
          "CouchdbAdminPassword"
        ],
        "requiresCredential": true,
        "note": "OscAccessToken is a Personal Access Token. Optional: EncoreMaxInstances, EncoreMinInstances, EncoreIdleTimeoutMs, TrustRoleHeader. supportsUpdate is false, so set the config right at creation."
      },
      {
        "step": 3,
        "action": "POST /api/v1/provision, then POST /api/v1/profiles/bootstrap",
        "role": "stands up the stack and seeds the transcoding profiles"
      },
      {
        "step": 4,
        "action": "ingest-url, transcode, package, delivery",
        "role": "one call per step for each video"
      }
    ],
    "measuredWallClockSeconds": null,
    "wallClockMeasured": false,
    "gapNote": "No end-to-end run of this recipe was timed for this page. The schema and the README at the stable commit were read on 2026-10-30; no instance was created for this page."
  },
  "configSurface": {
    "servicesInChain": 1,
    "totalRequiredFieldsAcrossChain": 6,
    "sensitiveFields": [
      "OscAccessToken",
      "ParameterStoreApiKey",
      "MinioRootPassword",
      "CouchdbAdminPassword"
    ],
    "note": "get-service-schema eyevinn-open-videocore, 2026-10-30: stable image open-videocore:stable = upstream v1.5.0, versionOffset 259, commit d9b9bfe, resolvedAt 2026-10-27T14:20Z; beta open-videocore:latest = v1.6.0, versionOffset 8. Open Media Convert itself is not a catalog serviceId; it is the hosted product at mediaconvert.apps.osaas.io built on Open VideoCore."
  },
  "setup": {
    "codeRequired": false,
    "knownDeployGotcha": "The first packaging job on a new stack is slower: the packager is created on demand and there is no pre-warm option. Open VideoCore has no in-app authentication; run it on OSC behind the platform auth wall, or behind an authenticating proxy."
  },
  "cost": {
    "quoted": false,
    "note": "No rate, multiplier or price level is quoted for Open Media Convert on this page (CEO 2026-09-14). Current rates: https://www.osaas.io/pricing"
  },
  "exitPath": {
    "software": "SVT Encore (https://github.com/svt/encore, EUPL-1.2) and Open VideoCore (https://github.com/eyevinn-osaas/open-videocore) are public repositories that run wherever their containers run",
    "data": "media and outputs sit in the stack's own MinIO storage, or in your own S3-compatible bucket if you provision with sourceStorage and packagedStorage"
  },
  "notVerified": [
    "a timed run of this recipe from start to finish",
    "a video converted on OSC for this page",
    "the Media Convert app sign-up and subscription flow"
  ],
  "servicesVerifiedLive": {
    "date": "2026-10-30",
    "method": "osc_call_tool list-available-services (media category: no Media Convert serviceId, eyevinn-open-videocore present) and get-service-schema eyevinn-open-videocore; README read at the stable image commit through the GitHub contents API."
  },
  "gateCheck": {
    "gatedServiceId": "eyevinn-just-go-live",
    "usesGatedService": false,
    "note": "This stack does not name or link eyevinn-just-go-live; the P3 gate does not bind it."
  },
  "verifiedOn": "2026-10-30",
  "publishedAt": "https://www.osaas.io/use-cases/video-to-hls"
}
