medien.halowerk.com
Takes a video by URL or inline base64 and reports where the picture changes. FFmpeg measures the difference between consecutive frames; every jump above the threshold starts a new scene, and the answer lists each scene with start, end, duration and the fraction of the running time it covers, plus the raw detection score positions.
Offering
- Provider
- medien.halowerk.com
- Method
- POST
- Offering type
- Api Endpoint
- Transport type
- http
- Category
- Creative
- Delivery
- Not provided
- Pricing model
- Not provided
- x402 version
- 2
Endpoint context
- URL
https://medien.halowerk.com/v1/keyframes- MIME type
- Not provided
- First seen
- 2026-10-16T01:58:26.121Z
- Last seen
- Tags
- None supplied
Payment pricing
x402 payment terms are the authoritative price for calling this endpoint.
- Payment option 1
- 0.03 USDC
Atomic price: 30000 · Network: eip155:8453 · Asset: USDC · Scheme: exact
Raw x402 terms
[
{
"scheme": "exact",
"network": "eip155:8453",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "30000",
"payTo": "0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E"
}
]Observed health
- Status
- Healthy
- Latest latency
- 316 ms
- Average latency
- 607 ms
- HTTP status
- 204
- Last checked
- Reachability
- 100% over 8 checks
Latency is measured to the first response headers. A reachable result does not verify response accuracy or merchant identity.
Input schema
{
"body": {
"duration_minutes": 3,
"include_thumbnails": true,
"scene_threshold": 0.35,
"source": {
"url": "https://example.com/film.mp4"
}
},
"bodyType": "json",
"method": "POST",
"type": "http"
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"additionalProperties": false,
"properties": {
"duration_minutes": {
"default": 1,
"description": "Length of the video in started minutes — this is what you are billed for. A longer video is refused with its real duration and nothing is charged; a shorter one simply costs what you declared, and the answer says how much less it would have been.",
"maximum": 30,
"minimum": 1,
"type": "integer"
},
"include_thumbnails": {
"default": false,
"description": "Render one JPEG per scene and return it base64.",
"type": "boolean"
},
"max_scenes": {
"default": 100,
"description": "Ceiling on returned scenes. What is dropped is counted and reported.",
"maximum": 400,
"minimum": 1,
"type": "integer"
},
"max_thumbnails": {
"default": 20,
"description": "Ceiling on rendered thumbnails, independent of the scene count.",
"maximum": 60,
"minimum": 1,
"type": "integer"
},
"min_scene_seconds": {
"default": 0.4,
"description": "Merge cuts closer together than this. Guards against flicker being read as a cut.",
"maximum": 60,
"minimum": 0,
"type": "number"
},
"scene_threshold": {
"default": 0.35,
"description": "Frame-to-frame difference above which a new scene starts. Lower finds more, higher finds fewer.",
"maximum": 0.95,
"minimum": 0.05,
"type": "number"
},
"source": {
"additionalProperties": false,
"description": "The video. Either url or content_base64.",
"properties": {
"content_base64": {
"description": "The video inline, base64. Larger files must come by url.",
"maxLength": 12000000,
"type": "string"
},
"filename": {
"maxLength": 260,
"type": "string"
},
"url": {
"description": "Public http(s) URL of the video.",
"maxLength": 2048,
"type": "string"
}
},
"type": "object"
},
"thumbnail_width": {
"default": 160,
"description": "Width of the thumbnails; height follows the aspect ratio.",
"maximum": 640,
"minimum": 32,
"type": "integer"
}
},
"required": [
"source"
],
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST",
"PUT",
"PATCH"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}