- Film gets set up on filmservice
- DCP gets ingested in Filmservice - Checks every hour start if it is ingested in Gofilex to show proper labels on the filmservice interface.
Option XXX: For DCPs where we expect a Transfer via Gofilex we could do manually in advance a booking to “Transfer”. This should set up the film Title on Gofilex and mount the DCP into the Watch folder so that SERAPH finds it and they can ingest it. But it should NOT create a booking on their system.
- Customers book Transfers. If there is a customer booking to an Organisation with Transfer mode Gofilex and there is not yet a booking to “Transfer”. Option XXX should happen automatically and additionally.
- Filmservice checks for progress report of the transfer
We want display to our users information if the playlist already exists in your system or not.
The way we initially wanted to obtain this information is by periodically requesting the api/publication/v1/assets/by/composition-playlist endpoint with the playlists we have in our system.
The logic to make the periodically requests would be as follow:
- every hour for playlists for unpublished films
- every midnight for playlists for already published films
It's the most optimized logic from our perspective. However we aren't sure if it's not more optimized to call the publication/v1/assets/by/owner endpoint looping through all owners we are able to see? What is your opinion on it? Is there a better way to identify playlists that already exists in your system in bulk?
Questions:
- Gofilex mentioned that they will delete DCPs on their sied after some time based on their policies. We can't test it now as we can't delete DCPs. What response do we get if a DCP existed on Gofilex but then got deleted?
- We see 3 options to check if a playlist is ingested into Gofilex, which call is the best in this case?
publication/v1/assets/by/composition-playlist request:
curl --location 'https://genie.portal.gofilex.com/api/publication/v1/assets/by/composition-playlist' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"compositionPlaylistUuid": "4ff30db3-e5fd-4657-a7ed-112fe04a736f"
}'
publication/v1/assets/by/composition-playlist successful response:
[
{
"_id": "ZKkC7MZqm9XgdNZYh",
"uuid": "0369b95a-3a0e-4357-80c2-68393fcec760",
"_relatedAssetUuids": {
"parent": []
},
"contentKind": "feature",
"description": "Chrigu_FTR-25_F-133_GSW-XX_CH_20_2K_LOK_20140827_DGL_IOP_OV",
"encrypted": false,
"role": "asset-map",
"supplemental": false
}
]
publication/v1/assets/by/composition-playlist unsuccessful response:
{
"error": {
"type": "unknown-composition-playlist",
"message": "Unknown composition playlist with UUID \"b901f0f5-8e36-4246-b14e-4652b3cc4fc9\"."
}
}publication/v1/assets/by/owner request:
curl --location 'https://genie.portal.gofilex.com/api/publication/v1/assets/by/owner' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"ownerId": "bM8rmNZra5AMvQHML"
}'
publication/v1/assets/by/owner response:
[
{
"_id": "Jscd6zjgmQcu8cMER",
"uuid": "4ff30db3-e5fd-4657-a7ed-112fe04a736f",
"_relatedAssetUuids": {
"parent": [
"0369b95a-3a0e-4357-80c2-68393fcec760",
"37513f77-a145-43d6-9e3d-da7d28ac110c"
]
},
"audio": {
"type": "stereo",
"languages": [
"gsw"
]
},
"contentKind": "feature",
"contentTitleText": "Chrigu_FTR-25_F-133_GSW-XX_CH_20_2K_LOK_20140827_DGL_IOP_OV",
"description": "Chrigu_FTR-25_F-133_GSW-XX_CH_20_2K_LOK_20140827_DGL_IOP_OV",
"duration": {
"frames": 132195,
"milliseconds": 5287800
},
"encrypted": true,
"markerList": [],
"motion": {
"type": "none"
},
"role": "composition-playlist",
"subtitles": {
"type": "none",
"languages": []
},
"video": {
"type": "standard",
"stereoscopic": false,
"resolution": "2K",
"aspectRatio": "flat",
"frameRate": 25
}
},
...
]api/publication/v1/asset request:
curl --location 'https://genie.portal.gofilex.com/api/publication/v1/asset' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"assetUuid": "4ff30db3-e5fd-4657-a7ed-112fe04a736f"
}'
api/publication/v1/asset response:
[
{
"_created": {
"at": "2024-06-14T10:45:14.265Z"
},
"_size": 34778526648,
"audio": {
"type": "stereo",
"languages": [
"gsw"
]
},
"contentKind": "feature",
"contentTitleText": "Chrigu_FTR-25_F-133_GSW-XX_CH_20_2K_LOK_20140827_DGL_IOP_OV",
"description": "Chrigu_FTR-25_F-133_GSW-XX_CH_20_2K_LOK_20140827_DGL_IOP_OV",
"duration": {
"frames": 132195,
"milliseconds": 5287800
},
"encrypted": true,
"hash": "frkI5xru5IFL4Tq1z5gCrjVKY7M=",
"markerList": [],
"motion": {
"type": "none"
},
"owners": [
{
"_id": "bM8rmNZra5AMvQHML",
"name": "Diagonal gmbh",
"_explicit": true
},
{
"_id": "bM8rmNZra5AMvQHML",
"name": "Diagonal gmbh",
"_explicit": false
}
],
"reelList": [
{
"uuid": "720e6b1e-9644-4833-94f4-97812b379a76",
"assetList": [
{
"uuid": "8012df59-5304-4e53-ad6e-5d25d1bf609a",
"annotationText": "091f2224-c8b3-4eb3-9ae1-40c103e25b56_j2c.mxf",
"editRate": [
25,
1
],
"intrinsicDuration": {
"frames": 387,
"milliseconds": 15480
},
"entryPoint": {
"frames": 0,
"milliseconds": 0
},
"duration": {
"frames": 387,
"milliseconds": 15480
},
"keyUuid": "175ff109-baf8-47b6-964a-bdd5ee0e4650",
"hash": "o7bIbCBXpt/B2zI/6KXnCuX5Slg=",
"frameRate": [
25,
1
],
"screenAspectRatio": [
1998,
1080
],
"#": "main picture"
},
{
"uuid": "306ca192-ad0b-4194-9c0e-ee30fe0a06a7",
"annotationText": "6 channel audio: looknowaudio.wav",
"editRate": [
25,
1
],
"intrinsicDuration": {
"frames": 387,
"milliseconds": 15480
},
"entryPoint": {
"frames": 0,
"milliseconds": 0
},
"duration": {
"frames": 387,
"milliseconds": 15480
},
"keyUuid": "7ff4ac6e-4b2d-48e1-bde8-ead7503e2452",
"hash": "FnnIozfVlSsqvetdHXU2POePDq0=",
"#": "main sound"
}
],
"markerList": [],
"offset": {
"frames": 0,
"milliseconds": 0
},
"duration": {
"frames": 387,
"milliseconds": 15480
}
},
{
"uuid": "628f182c-1b0a-44a1-9562-1708a166439e",
"assetList": [
{
"uuid": "7e202180-4623-4b61-8bca-31c3e7bb5c8a",
"annotationText": "Chrigu_00000.dpx",
"editRate": [
25,
1
],
"intrinsicDuration": {
"frames": 131957,
"milliseconds": 5278280
},
"entryPoint": {
"frames": 0,
"milliseconds": 0
},
"duration": {
"frames": 131808,
"milliseconds": 5272320
},
"keyUuid": "536dc2f1-ed99-4728-a78e-981f270b556e",
"hash": "hH5pmCbNkr2dZsedfBxZ9KRMztc=",
"frameRate": [
25,
1
],
"screenAspectRatio": [
1998,
1080
],
"#": "main picture"
},
{
"uuid": "12c672d4-301d-480a-b442-e1dde91a7e90",
"annotationText": "6 channel audio: hauptfilmaudio-24bit.wav",
"editRate": [
25,
1
],
"intrinsicDuration": {
"frames": 131808,
"milliseconds": 5272320
},
"entryPoint": {
"frames": 0,
"milliseconds": 0
},
"duration": {
"frames": 131808,
"milliseconds": 5272320
},
"keyUuid": "89c07ad8-918a-465a-8314-82d74c1d1f44",
"hash": "ziwKZE74qd7f+XvEqgKmmBCGf08=",
"#": "main sound"
}
],
"markerList": [],
"offset": {
"frames": 387,
"milliseconds": 15480
},
"duration": {
"frames": 131808,
"milliseconds": 5272320
}
}
],
"role": "composition-playlist",
"size": 11980,
"subtitles": {
"type": "none",
"languages": []
},
"titleDetails": {
"video": {
"type": "standard",
"stereoscopic": false,
"resolution": "2K"
},
"audio": {
"type": "stereo",
"languages": [
"gsw"
]
},
"subtitles": {
"type": "none",
"languages": []
},
"motion": {
"type": "none"
},
"name": "Chrigu",
"contentKind": "feature",
"territory": "CH",
"studio": "LOK",
"date": "2014-08-27T00:00:00.000Z",
"facility": "DGL",
"standard": "InterOP",
"version": "OV"
},
"titles": [
{
"_id": "NXcEF6LwBmaNjQFdE",
"countries": [
"CH",
"DE"
],
"name": "Chrigu",
"_transferOrders": [],
"_keyOrders": [ ],
"_internal": false,
"_unorderable": false
}
],
"uuid": "4ff30db3-e5fd-4657-a7ed-112fe04a736f",
"video": {
"type": "standard",
"stereoscopic": false,
"resolution": "2K",
"aspectRatio": "flat",
"frameRate": 25
},
"_availability": [],
"_id": "Jscd6zjgmQcu8cMER"
}
]If the asset exists: we are saving it's the content owner ID and title ID for later add transfer request
method/v1/title/add request:
curl --location 'https://genie.portal.gofilex.com/api/method/v1/title/add' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"name": "Diagonal Add Title Test",
"releaseDate": "2024-12-16T12:00:00.000",
"ownerId": "bM8rmNZra5AMvQHML",
"countries": ["CH"]
}'
method/v1/title/add response:
{
"success": true,
"titleId": "syMXKaH3r5bQ9aKEL"
}We must save the resulting titleId for later usage at /api/method/v1/order/add/transfer.
Questions:
- If we add a transfer for playlist
Aand titleBare those automatically linked or we should always explicitly callmethod/v1/assets/link/to/title? - Which owners we are able to see and which are restricted? We'd ideally operate only on one content owner(us) but it isn't clear for us if that's possible.
/api/method/v1/order/add/transfer request:
Assuming we have all of the details from previous steps the request payload should be:
curl --location 'https://genie.portal.gofilex.com/api/method/v1/order/add/transfer' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"assetUuids": [
"b901f0f5-8e36-4246-b14e-4652b3cc4fc9"
],
"company": {
"_id": "AkXyZPKoZn4GXvd72"
},
"title": {
"_id": "syMXKaH3r5bQ9aKEL"
},
"bookerId": "FPBsKcYSHuCSymgRP",
"ownerId": "bM8rmNZra5AMvQHML",
"deliveryDue": "2024-10-17T08:00:00+0000"
}'
/api/method/v1/order/add/transfer response:
{
"success": true,
"order": {
"description": "Chrigu (2007)",
"_operators": [
{
"_id": "3XwWMfgob2byW7GNX",
"name": "Gofilex Switzerland",
"_managing": true
}
],
"_booker": {
"_id": "FPBsKcYSHuCSymgRP",
"location": {
"countries": [
"CH"
],
"city": "Zurich"
},
"name": "Diagonal gmbh"
},
"_owner": {
"_id": "bM8rmNZra5AMvQHML",
"location": {
"countries": [
"CH"
],
"city": "Zurich"
},
"name": "Diagonal gmbh"
},
"title": {
"_id": "NXcEF6LwBmaNjQFdE",
"name": "Chrigu (2007)"
},
"company": {
"_id": "AkXyZPKoZn4GXvd72",
"location": {
"countries": [
"CH"
],
"city": "Zurich",
"timezone": "Europe/Zurich"
},
"name": "Diagonal Test",
"type": "cinema"
},
"_status": {
"state": "pending"
},
"invoice": {
"payers": [
"content-owner"
],
"purchaseOrderNumber": ""
},
"_type": "transfer",
"deliveryDue": "2024-10-07T20:00:00.000Z",
"medium": "physical",
"details": {
"video": {
"type": [
"standard"
],
"aspectRatio": [
"flat"
],
"resolution": [
"2K"
],
"frameRate": [
25
],
"stereoscopic": [
false
]
},
"audio": {
"type": [
"stereo"
],
"languages": [
"gsw"
]
},
"subtitles": {
"type": [
"none"
],
"languages": []
},
"motion": {
"type": [
"none"
]
},
"contentKind": [
"feature"
],
"encrypted": [
true
]
},
"transport": {},
"_jobs": [],
"identifiers": [],
"contacts": [],
"_automations": [],
"_created": {
"at": "2024-10-07T16:13:05.362Z",
"by": "NGcbAPEzfi6azdJkP"
},
"bundles": [],
"versions": [],
"assetMaps": [
{
"_id": "ZKkC7MZqm9XgdNZYh",
"uuid": "0369b95a-3a0e-4357-80c2-68393fcec760"
}
],
"compositionPlaylists": [
{
"_id": "Jscd6zjgmQcu8cMER",
"uuid": "4ff30db3-e5fd-4657-a7ed-112fe04a736f",
"contentKind": "feature"
}
],
"encores": [],
"_derived": {
"compositionPlaylists": [
{
"_id": "Jscd6zjgmQcu8cMER",
"uuid": "4ff30db3-e5fd-4657-a7ed-112fe04a736f",
"contentKind": "feature"
}
],
"digitalCinemaPackages": [
{
"_id": "ZKkC7MZqm9XgdNZYh",
"uuid": "0369b95a-3a0e-4357-80c2-68393fcec760"
}
],
"versions": [],
"encores": [],
"_size": 34778540804
},
"disk": {
"_checkForSentDisk": true,
"usage": "multi",
"payer": "none"
},
"_id": "X9HLEciCZJM3Tmuv2"
}
}POST /publication/v1/orders/status
{
"orderIds": [
"nvacsWmXLgiyPk2Kq"
]
}Example response
[
{
"_id": "X9HLEciCZJM3Tmuv2",
"_owner": {
"_id": "bM8rmNZra5AMvQHML",
"name": "Diagonal gmbh"
},
"company": {
"_id": "AkXyZPKoZn4GXvd72",
"name": "Diagonal Test"
},
"_status": {
"state": "queued"
},
"_type": "transfer",
"medium": "physical",
"transport": {}
}
]
Question: The API docs mention that we'll receive the progress information for electronic transfers as step and total values. Step is the value between 0 and total or between 0 and 100?