Grassvalley AMPP S3 uploader utility
Find a file
2026-03-31 15:35:25 -04:00
public Add public/index.html 2026-03-31 15:29:53 -04:00
.dockerignore Add .dockerignore 2026-03-31 15:29:52 -04:00
.env.example Add .env.example 2026-03-31 15:29:52 -04:00
docker-compose.yml Add docker-compose.yml 2026-03-31 15:29:52 -04:00
Dockerfile Add Dockerfile 2026-03-31 15:29:53 -04:00
LICENSE Initial commit 2026-03-31 15:26:10 -04:00
package.json Add package.json 2026-03-31 15:29:53 -04:00
README.md Update README.md with documentation 2026-03-31 15:35:25 -04:00
server.js Add server.js 2026-03-31 15:29:53 -04:00

FramelightX S3 Uploader

A browser-based file upload tool for pushing media assets to any S3-compatible object storage endpoint (RustFS, MinIO, AWS S3, etc.). Built for broadcast and post-production environments where large files need to land in a managed folder structure.

Features

  • Upload up to 50 files at once (50GB max per file)
  • Hierarchical folder tree for organizing files into prefixed S3 keys
  • Multi-user authentication with admin and standard user roles
  • Optional live AMPP job monitoring panel (Grassvalley AMPP integration)
  • Blocks executable file uploads server-side
  • Persistent folder tree and user data stored in a Docker volume
  • Timeout-tolerant uploads — treats slow S3 acknowledgements as success rather than failing

Prerequisites

  • Docker and Docker Compose
  • An S3-compatible storage endpoint with access credentials
  • (Optional) A Grassvalley AMPP account and API key for job monitoring

Quick Start

  1. Clone the repo and copy the example env file:
cp .env.example .env
  1. Edit .env with your credentials:
S3_ENDPOINT=https://your-s3-endpoint.com
S3_ACCESS_KEY=your-access-key
S3_SECRET_KEY=your-secret-key
S3_BUCKET=upload
S3_REGION=us-east-1
PORT=3000

# Optional — enables the AMPP job monitoring panel
AMPP_BASE_URL=https://us-east-1.gvampp.com
AMPP_API_KEY=your-base64-encoded-client-credentials
  1. Start the service:
docker compose up -d
  1. Open http://localhost:3000 in your browser.

Default Credentials

On first run, a default admin account is created:

Username Password
Admin BertAndErnieVPM2026

Change this immediately via the Admin panel after first login.

Folder Structure & S3 Keys

The folder tree in the UI maps directly to S3 key prefixes. When you select a folder and upload files, the key is built as:

FolderA--SubFolder--filename.ext

Admins can add or remove folders from the tree. Default folders are: Media, Dailies, VFX, Audio.

User Roles

Role Can Upload Manage Users Manage Folders
user
admin

AMPP Job Monitoring (Optional)

When AMPP_API_KEY is configured, the dashboard displays a live panel showing the status of jobs running on the Grassvalley AMPP platform. The API key should be a Base64-encoded client_id:client_secret string, which is exchanged for a bearer token automatically using the OAuth2 client_credentials flow.

Environment Variables

Variable Default Description
S3_ENDPOINT https://broadcastmgmt.cloud S3-compatible storage URL
S3_ACCESS_KEY S3 access key
S3_SECRET_KEY S3 secret key
S3_BUCKET upload Target bucket name
S3_REGION us-east-1 S3 region
PORT 3000 HTTP port to listen on
AUTH_USER Admin Default admin username
AUTH_PASS BertAndErnieVPM2026 Default admin password
DATA_DIR /data Path for persistent JSON data
AMPP_BASE_URL https://us-east-1.gvampp.com AMPP API base URL
AMPP_API_KEY Base64 client credentials for AMPP OAuth2

Docker Compose

services:
  s3-uploader:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - uploader-data:/data
    env_file: .env
    restart: unless-stopped

volumes:
  uploader-data:

File Upload Security

The following file extensions are blocked from uploading regardless of user role:

exe, sh, bash, bat, cmd, ps1, msi, dll, py, rb, php, jar, apk, and others.

Blocked uploads are rejected at the server level — the file never reaches S3.