All case studies

Product Tech Lead

MediArchive

MediArchive for broadcasters: uploading, searching and preparing footage for editing.

The viewer: the material grid on the left, the player with its timecode and the metadata panel on the right. The panel’s fields come from configuration rather than from code.
The viewer: the material grid on the left, the player with its timecode and the metadata panel on the right. The panel’s fields come from configuration rather than from code.

MediArchive: video playback, fragment annotation and metadata configuration.

Tech lead · media asset management

My role

I was responsible for product architecture, defining module boundaries and APIs between the client, backend and media processing services. I reviewed code, investigated incidents on customer installations and planned releases with the team.

Working with footage
Video playback, metadata and annotation
Customer configuration
Configuring forms, tables and permissions
Processing and delivery
File uploads, video processing and hosting

The business problem

Broadcasters need to upload and describe footage, find fragments and deliver them to editors. Each customer has different metadata fields, roles and hosting requirements. Fields and forms need to be configurable without a separate release for each installation.

Working with footage

Video playback and timecode annotation

Archivists select an asset in the grid, watch the video and edit its metadata. React and Effector keep the selected asset, player and metadata panel in sync.

Markup mode: a locator is set by IN and OUT timecodes straight in the player. Scenes found by AI sit in the same grid and turn into user locators once edited by hand.
Markup mode: a locator is set by IN and OUT timecodes straight in the player. Scenes found by AI sit in the same grid and turn into user locators once edited by hand.

Marking fragments

Locators define IN/OUT timecodes. AI-detected scenes appear in the same grid and become user scenes after manual editing.

Packages for delivery

Assets are gathered into a package from the category tree. The interface shows its contents and size. Access is configured separately.

More screens (2)
Assembling a package: material is picked from the category tree and the counter shows the volume — 52 files and 30 GB. The next tab sets who the package will be available to.
Assembling a package: material is picked from the category tree and the counter shows the volume — 52 files and 30 GB. The next tab sets who the package will be available to.
A category grid: every title carries its upload status and its scene-detection status, so you can see which step of the pipeline the file is on right now.
A category grid: every title carries its upload status and its scene-detection status, so you can see which step of the pipeline the file is on right now.

Customer configuration

Configuring fields and tables with JSON

Metadata forms and tables use JSON configurations. An editor with live preview lets administrators change the structure in settings, while role bindings determine what each user sees.

The metadata form builder: the assembled form on the left, its JSON on the right. The form is bound to roles, so each installation describes its own archive without a release.
The metadata form builder: the assembled form on the left, its JSON on the right. The form is bound to roles, so each installation describes its own archive without a release.

Configuring table columns

Columns, types, widths and visibility can be configured independently, with the result visible in the preview.

Access to assets

Read and edit permissions are assigned by role. A public link can be created for delivery and revoked later.

More screens (2)
The title table configuration: columns, their types, widths and visibility are described in JSON, and the preview on the right updates immediately.
The title table configuration: columns, their types, widths and visibility are described in JSON, and the preview on the right updates immediately.
Clipbin permissions: read and write rights are granted per role. A public link is generated separately and can be revoked.
Clipbin permissions: read and write rights are granted per role. A public link is generated separately and can be revoked.

Processing and delivery

Background video processing

After upload, the system prepares a video copy for playback, creates thumbnails and detects scenes. The status column shows which files have finished processing.

  1. Ingest

    WatchFolder connects a local folder to an archive category.

  2. Processing

    Proxy copies, thumbnails and scenes are created.

  3. Description

    Assets receive metadata and annotations.

  4. Delivery

    Selected assets form a package accessible to the recipient.

Engineering details
  • Resuming an upload

    WatchFolder continues uploading after a network interruption. Users work with a folder linked to an archive category.

  • Hosting options

    SaaS, a packaged edition and deployment in the customer’s infrastructure accommodate broadcasters’ storage requirements.

Outcome

From raw footage to editing

Together with the team, I built MediArchive: video upload and processing, search, fragment annotation and delivery to editors. As tech lead, I was responsible for architecture, code reviews and release planning.

−70%
of the content processing time, per Media Code: proxy copies and scene detection run automatically
3
delivery options: SaaS, an appliance and installation inside the customer’s infrastructure

Stack

  • React
  • TypeScript
  • Effector
  • NestJS
  • FastAPI
  • MongoDB
  • PostgreSQL
  • RabbitMQ
  • Docker
  • Jenkins