{
  "id": "osc-stack-video-thumbnails-sprite-sheet",
  "job": "Generate poster frames and a seek-bar sprite sheet for a video library with one SVT Encore job on Open Source Cloud: Encore plus S3-compatible MinIO storage, submitted over HTTP.",
  "aliases": [
    "generate video thumbnails",
    "video sprite sheet for seek bar previews",
    "thumbnail map for a video player",
    "trick play thumbnails webvtt sprite",
    "encore thumbnail map"
  ],
  "distinctFrom": [
    {
      "id": "osc-stack-video-to-hls",
      "descriptorUrl": "https://www.osaas.io/stacks/video-to-hls.json",
      "why": "That recipe turns a video file into HLS and DASH streams with Open Media Convert. This one produces the images around the video: poster frames and a sprite sheet."
    }
  ],
  "inputs": [
    {
      "protocol": "https",
      "source": "a video file URL that the Encore instance can reach"
    }
  ],
  "outputs": [
    {
      "protocol": "s3",
      "consumer": "JPEG poster frames (default 25, 50 and 75 percent), one JPEG sprite sheet (default 12x20 tiles of 160x90), and with the program profile five H.264 MP4 renditions and one stereo audio file, in your bucket"
    }
  ],
  "recommendedPath": {
    "chain": [
      {
        "step": 1,
        "serviceId": "minio-minio",
        "role": "S3-compatible storage for the output",
        "note": "Set the root user and password at creation. An instance created without them returned empty credentials on 2026-11-08."
      },
      {
        "step": 2,
        "serviceId": "encore",
        "role": "runs the encode and writes the images",
        "requiredConfig": ["name"],
        "configUsed": [
          "profilesUrl",
          "s3Endpoint",
          "s3AccessKeyId",
          "s3SecretAccessKey"
        ],
        "requiresCredential": true,
        "note": "supportsUpdate is false, so set the config right at creation."
      },
      {
        "step": 3,
        "action": "POST /encoreJobs on the instance with profile, baseName, outputFolder and inputs",
        "role": "submits the job"
      },
      {
        "step": 4,
        "action": "GET /encoreJobs/{id} until SUCCESSFUL, then read output[]",
        "role": "lists every file with its dimensions; confirm the thumbnail map is listed"
      },
      {
        "step": 5,
        "action": "generate a WebVTT file with one cue per tile, #xywh=x,y,width,height",
        "role": "lets a player find each tile; Encore does not write this file"
      }
    ],
    "measuredWallClockSeconds": 123,
    "wallClockMeasured": true,
    "gapNote": "123 seconds is one Encore job on one 105.7-second 1080p clip (job 86992fda-5df6-4d48-a34a-d088e137b30d, 2026-11-08), not the time to set up the two instances."
  },
  "configSurface": {
    "servicesInChain": 2,
    "sensitiveFields": ["s3AccessKeyId", "s3SecretAccessKey"],
    "note": "get-service-schema encore, 2026-11-09: upstreamVersion null and images empty, so the catalog does not state the Encore build. The running image reported v0.2.8-3 in its startup log on 2026-11-08."
  },
  "setup": {
    "codeRequired": false,
    "knownDeployGotcha": "ThumbnailMapEncode defaults to optional: true, so a job can be SUCCESSFUL with the sprite sheet skipped. Set optional: false. It is not supported with segmentLength set on the job."
  },
  "cost": {
    "quoted": false,
    "note": "No rate is quoted on this page. Current rates: https://www.osaas.io/pricing"
  },
  "exitPath": {
    "software": "SVT Encore (https://github.com/svt/encore, EUPL-1.2) is a public repository that runs wherever its container runs",
    "data": "the output is plain JPEG and MP4 files in S3-compatible storage"
  },
  "notVerified": [
    "the agent prompt on the page, run as written",
    "these output files played in a player with a WebVTT track",
    "a job writing to AWS S3 instead of MinIO"
  ],
  "servicesVerifiedLive": {
    "date": "2026-11-09",
    "method": "osc_call_tool get-service-schema encore and minio-minio; job output read back from GET /encoreJobs/{id} and images checked with ffprobe on 2026-11-08; ThumbnailEncode and ThumbnailMapEncode defaults read in svt/encore at v0.2.8; Shaka Player WebVTT sprite parsing read in lib/player.js."
  },
  "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-11-09",
  "publishedAt": "https://www.osaas.io/use-cases/video-thumbnails-sprite-sheet"
}
