Sign inSign up

opencue/cueweb

By opencue

•Updated 10 days ago

A web client for OpenCue

Image
0

55

opencue/cueweb repository overview

⁠OpenCue CueWeb

OpenCue⁠ is an open source render management system for visual effects and animation production, hosted by the Academy Software Foundation⁠.

CueWeb is the OpenCue web interface. It brings the CueGUI workflow (Cuetopia job monitoring plus the CueCommander admin views) to the browser: job, layer and frame tables with filtering and multi-select actions, frame log viewing, host, allocation, limit, service, show and subscription management, job submission, dashboards, a plugin system and light/dark themes.

CueWeb does not talk to Cuebot over gRPC. Every request is proxied server-side through the OpenCue REST Gateway⁠ and signed with a JWT, so browsers never hold gateway credentials.

⁠Tags

TagDescription
latestMost recent OpenCue release
<version> (for example 1.37.0)A specific release. Pin this in production

Release notes: https://github.com/AcademySoftwareFoundation/OpenCue/releases⁠

⁠What CueWeb needs

  1. A running Cuebot with its PostgreSQL database.
  2. A running REST Gateway pointed at that Cuebot (opencue/rest-gateway).
  3. The JWT secret the gateway trusts, that is the gateway container's JWT_SECRET. CueWeb signs every gateway call with it.
  4. Optionally, read access to the frame log root (the path RQD writes logs to) so the log viewer can read .rqlog files.

Without a reachable gateway the UI still loads, but the tables stay empty and the status bar reports the gateway as offline.

⁠Quick start

For a complete local OpenCue deployment (PostgreSQL, Cuebot, RQD, REST Gateway, CueWeb and optional monitoring), use the docker-compose.yml in the repository:

git clone https://github.com/AcademySoftwareFoundation/OpenCue.git
cd OpenCue
docker compose --profile cueweb up -d

CueWeb is then on http://localhost:3000⁠.

To run the published image against an existing gateway:

docker run -d --name cueweb -p 3000:3000 \
  -e CUEBOT_LOCAL_REST_GATEWAY_URL=http://<gateway-host>:8448 \
  -e CUEBOT_LOCAL_JWT_SECRET=<the gateway's JWT_SECRET> \
  -e NEXTAUTH_URL=http://localhost:3000 \
  -e NEXTAUTH_SECRET=$(openssl rand -base64 32) \
  -e GOOGLE_CLIENT_ID=<id> -e GOOGLE_CLIENT_SECRET=<secret> \
  -v /shots/logs:/shots/logs:ro \
  opencue/cueweb

CUEBOT_LOCAL_* configures the default local facility (see Cuebot facilities below) and takes preedence over the gateway URL baked into the image. The Google credentials are an example: the published image ships with authentication enabled, so configure at least one provider or rebuild the image with authentication off (see below).

Mount the frame log root at the same path the render hosts write it to, otherwise the log viewer cannot find the files.

⁠Build-time versus runtime configuration

CueWeb is a Next.js application, so every NEXT_PUBLIC_* value is inlined into the bundle when the image is built. Setting a NEXT_PUBLIC_* variable with docker run -e has no effect on the published image. Everything else is read at request time and can be set normally with -e.

Values baked into the published image:

Build argValue in the published imagePurpose
NEXT_PUBLIC_OPENCUE_ENDPOINThttp://localhost:8448Default REST gateway base URL. Override at runtime with CUEBOT_<FACILITY>_REST_GATEWAY_URL instead of rebuilding
NEXT_PUBLIC_URLemptyEmpty means the browser builds same-origin relative API URLs, so CueWeb works on whatever host users reach it on. Set only if the API is served from a different origin
NEXT_PUBLIC_AUTH_PROVIDERgoogle,okta,github,ldapSign-in providers offered. Rebuild with an empty value to disable authentication entirely
NEXT_PUBLIC_CUEBOT_FACILITIESunset, so local,dev,cloud,externalFacilities listed in the Cuebot Facility menu
NEXT_PUBLIC_LOKI_URLunsetWhen set, the log viewer queries a Grafana Loki server by frame id instead of reading .rqlog files
NEXT_PUBLIC_LOG_EDITOR_URLemptyOptional URL template for "View Log on ", for example vscode://file{path}
NEXT_PUBLIC_CUEPROGBAR_URLemptyOptional URL scheme used by "Show Progress Bar"
NEXT_PUBLIC_CUEPROGBAR_COMMANDpython -m cuegui.cueguiplugin.cueprogbar {job}Command shown in the progress bar dialog
NEXT_PUBLIC_PREVIEW_COMMAND / NEXT_PUBLIC_PREVIEW_URLrv {paths} / emptyExternal image viewer used by "Preview All"

To rebuild with your own values (the repo root must be available as the project_root context, which supplies the shared VERSION.in):

cd OpenCue/cueweb
docker buildx build . -f Dockerfile -t mysite/cueweb:local \
  --build-context project_root=.. \
  --build-arg NEXT_PUBLIC_OPENCUE_ENDPOINT=http://rest-gateway:8448 \
  --build-arg NEXT_PUBLIC_AUTH_PROVIDER= \
  --build-arg NEXT_PUBLIC_GIT_SHA=$(git rev-parse --short HEAD)

⁠Runtime configuration

VariableDefaultPurpose
CUEBOT_<FACILITY>_REST_GATEWAY_URLfalls back to the baked endpointREST gateway for that facility, for example CUEBOT_LOCAL_REST_GATEWAY_URL. Facility names are upper-cased, non-alphanumerics become _
CUEBOT_<FACILITY>_JWT_SECRETfalls back to NEXT_JWT_SECRETSigning secret for that facility's gateway
NEXT_JWT_SECRETtobeoverridenDefault gateway signing secret. Must match the gateway's JWT_SECRET
NEXTAUTH_URLtobeoverridenPublic URL of this CueWeb instance, used for OAuth callbacks
NEXTAUTH_SECRETtobeoverridenSecret used to encrypt session tokens
NEXT_AUTH_OKTA_CLIENT_ID, NEXT_AUTH_OKTA_ISSUER, NEXT_AUTH_OKTA_CLIENT_SECRETtobeoverridenOkta credentials. Replace the placeholders or the Okta button will fail
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRETunsetGoogle credentials
GITHUB_ID, GITHUB_SECRETunsetGitHub credentials
LDAP_URI, LDAP_LOGIN_DN, LDAP_CERTIFICATEtobeoverridenLDAP credentials for the Domain Account login
CUEWEB_AUTHZ_ENABLEDfalseOpt-in group-based authorization gate
CUEWEB_ALLOWED_GROUPSemptyGroups allowed to use CueWeb at all. Empty means every signed-in user
CUEWEB_ADMIN_GROUPSemptyGroups allowed to use CueCommander, job submission and facility management. Empty means every signed-in user is an admin
CUEWEB_GROUPS_CLAIMgroupsToken claim carrying the user's groups
CUEWEB_FACILITY_STORE<tmpdir>/cueweb-facilities.jsonWhere runtime facility overrides made from the Manage facilities screen are stored. Point it at a mounted volume to keep them across container replacements
CUEWEB_PREVIEW_ROOTSunsetColon-separated allow-list of roots the frame preview file server may read. Unset means the route fails closed
SENTRY_DSN, SENTRY_URL, SENTRY_ORG, SENTRY_PROJECT, SENTRY_ENVIRONMENTtobeoverridenOptional Sentry monitoring. Leave SENTRY_DSN unset to disable

A provider only appears on the sign-in page when all of its credentials are present, so you can enable just the ones your site uses.

⁠Ports, volumes and endpoints

3000/tcpHTTP, the CueWeb UI and its API routes
frame log rootMount read-only at the same path RQD writes logs to, for example -v /shots/logs:/shots/logs:ro
/api/healthGateway reachability and round-trip latency for the selected facility
/api/metricsPrometheus metrics

The image runs npm run start from /opt/cueweb as a standard Next.js server. Put it behind your usual reverse proxy for TLS and set NEXTAUTH_URL to the public URL.

⁠Upgrading

Upgrade CueWeb together with Cuebot and the REST Gateway, since all three track the same OpenCue release. Pull the new tag and replace the container. There is no database to migrate. User preferences live in the browser's local storage, and runtime facility overrides live in the file named by CUEWEB_FACILITY_STORE, which defaults to a path under the container's temporary directory and is therefore lost unless you mount it.

⁠License

Apache License 2.0. See LICENSE⁠.

Tag summary

Content type

Image

Digest

sha256:7b84746b7…

Size

659.2 MB

Last updated

10 days ago

docker pull opencue/cueweb