{"id":30985333,"url":"https://github.com/josev2046/nucleus-video-connector-prototype","last_synced_at":"2026-02-12T22:03:39.127Z","repository":{"id":313903581,"uuid":"1053365647","full_name":"josev2046/Nucleus-Video-Connector-Prototype","owner":"josev2046","description":"A blueprint for an integration application to streamline video workflows between Nucleus and an Online Video Platform (OVP). This repository provides a two-step API retrieval method for video assets and their metadata, along with potential ingestion workflows.","archived":false,"fork":false,"pushed_at":"2025-09-09T11:09:38.000Z","size":11,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-09T13:46:53.133Z","etag":null,"topics":["api","blueprint","connector","dam","integration","mam","nucleus","ovp","prototype","workflow"],"latest_commit_sha":null,"homepage":"https://www.linkedin.com/pulse/streamlining-video-workflows-nucleus-connector-jose-velazquez-ma-dzm4e/","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/josev2046.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-09T10:53:36.000Z","updated_at":"2025-09-09T11:27:57.000Z","dependencies_parsed_at":"2025-09-09T13:46:54.707Z","dependency_job_id":"8d27afcd-25c0-4fda-bef3-18eb5b5dca20","html_url":"https://github.com/josev2046/Nucleus-Video-Connector-Prototype","commit_stats":null,"previous_names":["josev2046/nucleus-video-connector-prototype"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/josev2046/Nucleus-Video-Connector-Prototype","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josev2046%2FNucleus-Video-Connector-Prototype","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josev2046%2FNucleus-Video-Connector-Prototype/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josev2046%2FNucleus-Video-Connector-Prototype/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josev2046%2FNucleus-Video-Connector-Prototype/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/josev2046","download_url":"https://codeload.github.com/josev2046/Nucleus-Video-Connector-Prototype/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josev2046%2FNucleus-Video-Connector-Prototype/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29382883,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T20:34:40.886Z","status":"ssl_error","status_checked_at":"2026-02-12T20:23:00.490Z","response_time":55,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","blueprint","connector","dam","integration","mam","nucleus","ovp","prototype","workflow"],"created_at":"2025-09-12T13:46:43.665Z","updated_at":"2026-02-12T22:03:39.095Z","avatar_url":"https://github.com/josev2046.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nucleus Video Connector\n\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17085201.svg)](https://doi.org/10.5281/zenodo.17085201)\n\n\nA blueprint for an integration application to streamline video workflows between Nucleus and an Online Video Platform (OVP). This repository provides a two-step API retrieval method for video assets and their metadata, along with potential ingestion workflows.\n\n### Introduction\n\nNucleus, developed by BAFTA, is a management system for awards, grants, and initiatives. This repository explores potential methods for connecting it to an OVP to automate the transfer of video files submitted through Nucleus. The proposed solution is based on a secure, two-step API retrieval process that fetches video files and their associated metadata.\n\n---\n## API Blueprint\n\nBoth API steps require authentication using a Nucleus Base URL, an Award ID, an API Key ID, and a generated signature with an expiration timestamp.\n\n### 1. Retrieve Entry Metadata\n\nThe first step is to use the `/api/entries.php` endpoint to retrieve entry details. This API call provides vital information, including the `entryTitle` and, crucially, the `mediaItem` ID for the video. This unique ID links the entry to its corresponding video file within the Nucleus system.\n\n```bash\ncurl -X POST \"\u003cYOUR_NUCLEUS_BASE_URL\u003e/api/entries.php\" \\\n-H \"Content-Type: application/x-www-form-urlencoded\" \\\n-d \"awardId=\u003cYOUR_AWARD_ID\u003e\u0026entryId=\u003cYOUR_ENTRY_ID\u003e\u0026expires=\u003cGENERATED_EXPIRES_TIMESTAMP\u003e\u0026keyId=\u003cYOUR_API_KEY_ID\u003e\u0026signature=\u003cGENERATED_SIGNATURE\u003e\"\n```\n\nThe JSON response will contain a field, such as `data.Film file`, which holds the format `mediaItem:video:\u003cMEDIA_ITEM_ID\u003e`. The `MEDIA_ITEM_ID` must be extracted for the subsequent step.\n\n### 2. Get the MP4 Video URL\n\nOnce the `mediaItem` ID is obtained, use the `/api/mediaItem.php` endpoint. By specifying `type=download`, the direct URL to the transcoded MP4 video file can be retrieved. This call also necessitates a `viewerId` for logging and permissions.\n\n```bash\ncurl -X POST \"\u003cYOUR_NUCLEUS_BASE_URL\u003e/api/mediaItem.php\" \\\n-H \"Content-Type: application/x-www-form-urlencoded\" \\\n-d \"mediaItemId=\u003cMEDIA_ITEM_ID\u003e\u0026type=download\u0026viewerId=\u003cYOUR_VIEWER_ID\u003e\u0026expires=\u003cGENERATED_EXPIRES_TIMESTAMP\u003e\u0026keyId=\u003cYOUR_API_KEY_ID\u003e\u0026signature=\u003cGENERATED_SIGNATURE\u003e\"\n```\n\nThe response is a JSON object containing the video URL, for example: `https://d3cszrd24af8ic.cloudfront.net/path/to/your/video.mp4`.\n\n---\n## Ingestion Workflows\n\nAn integration application—a dedicated script, for example—can serve as the bridge between Nucleus and the OVP. Once the video URL is retrieved, two primary methods can be used to ingest the video into the OVP.\n\n### Option A: Push via TUS Upload\n\nThe integration application downloads the video file stream from the Nucleus API and then uses a **resumable upload protocol**, such as TUS, to upload the video to the OVP's API. This method is reliable for large files and ensures the upload can be resumed if interrupted.\n\n### Option B: Pull via Direct URL Ingestion\n\nThis method is simpler if the OVP supports it. The integration application requests the OVP to ingest the video directly from the Nucleus URL. The OVP's servers then pull the asset directly from the Nucleus API. This approach offloads the file transfer burden from the integration application.\n\nI've previously documented both methods here:\n\n* Velazquez, J. (2025). *TUS-resumable File Uploads (TUS)*. https://doi.org/10.5281/zenodo.15034989\n* Velazquez, J. (2025). *Understanding video pull uploads by referencing an external URL*. https://doi.org/10.5281/zenodo.15286575\n\n---\n## Workflow Diagram\n\n\u003cimg width=\"1025\" height=\"739\" alt=\"image\" src=\"https://github.com/user-attachments/assets/45f55413-0438-478b-afd8-a6140cb684fa\" /\u003e\n\n\nThe workflow logic for this integration could follow these steps:\n\n1.  An admin or scheduler triggers a sync.\n2.  The integration application queries the Nucleus API for new or updated assets and their metadata.\n3.  For each identified asset, the application maps the Nucleus metadata to the required OVP format.\n4.  The application ingests the video using either a **Push (TUS)** or **Pull (Direct URL)** method.\n5.  After successful ingestion, the application uses further API calls to apply additional metadata or settings (e.g., privacy controls).\n6.  Once all assets have been processed, the integration reports its status.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosev2046%2Fnucleus-video-connector-prototype","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjosev2046%2Fnucleus-video-connector-prototype","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosev2046%2Fnucleus-video-connector-prototype/lists"}