Skip to content

Zero to Hero (Hybrid Mode, UI)

Run norsk-ctl init to create the configuration file. Hybrid mode puts studio on the Docker bridge (proxied) and media on the host network for low-latency ingest.

Terminal window
norsk-ctl init --network-mode hybrid --working-directory /tmp/workspace --proxy-user admin --proxy-password testpass1
Proxy user "admin" created, holding the "admin" platform role
Config written to ~/.norsk-ctl/config.yaml

Register Norsk Studio as a product so its template is available to launch from the dashboard. Run this once from the command line.

Terminal window
norsk-ctl product add --image norskvideo/norsk-studio-product:2026-07-21-a3d4d173 --license-file ~/norsk-license.json
name: norsk-studio
spec:
kind: container
image: norskvideo/norsk-studio-product:2026-07-21-a3d4d173
port: 34434
containerId: 91fc01e454fce280f8ddd94de78468cf20aa3fbc26f58356470adf0d3b678988
addedAt: 2026-10-04T11:26:29.523Z
running: true
health: unknown
manifest:
manifestSchemaVersion: 1
name: norsk-studio
version: 0.0.1
minRunnerVersion: 0.1.0
api:
basePath: /api
proxyPaths:
- /api/*
- /configure
- /configure/*
openapiFragmentPath: /api/openapi.yaml
mcpPath: /mcp
healthCheckPath: /healthz
productMcpPath: /mcp
ui:
configScreenUrl: /configure
sidebarEntries:
[]
dashboardWidgets:
[]
productTemplateActions:
- label: Add examples product template
configScreenUrl: /configure?template=examples
- label: Add dev product template
configScreenUrl: /configure?template=dev
cli:
subcommandTree:
- name: plugin
description: Scaffold and build Norsk Studio plugins
flags:
[]
subcommands:
- name: create
description: "Scaffold a new plugin into the working directory's components/"
flags:
- name: name
description: Plugin package name
required: true
- name: workingDirectory
description: Working directory to scaffold into
required: true
- name: studioTag
description: Studio image tag to scaffold against
request:
method: POST
path: /api/plugins/create
- name: list
description: List plugins discovered in the working directory
flags:
- name: workingDirectory
description: Working directory to inspect
required: true
request:
method: GET
path: /api/plugins
- name: install
description: Install an npm package as a plugin into the working directory
flags:
- name: pkg
description: npm package to install
required: true
- name: workingDirectory
description: Working directory to install into
required: true
- name: studioTag
description: Studio image tag to install against
request:
method: POST
path: /api/plugins/install
- name: build
description: "Bake the working directory's plugins into a studio image"
flags:
- name: tag
description: Tag for the baked image
required: true
- name: workingDirectory
description: Working directory whose plugins to bake
required: true
- name: fromImage
description: Base studio image to bake onto
- name: fromTag
description: Base studio image tag
- name: push
description: Push the baked image to its registry
type: boolean
request:
method: POST
path: /api/plugins/build
targets:
- docker-compose
components:
[]
runtime:
sharedWorkingDirectory: false
defaultProductTemplates:
- name: studio-examples
url: /api/product-templates/examples
- name: studio-dev
url: /api/product-templates/dev
export:
include:
- studio-save-files/**
- dashboards/**
- components/**
- assets/**
- "*.yml"
- "*.yaml"
exclude:
- "**/node_modules/**"
- recordings/**
- logs/**
- "**/*.mp4"
- "**/*.ts3"
license:
mode: byol
file: ~/.norsk-ctl/licenses/norsk-license.json
warnings:
- license is marked NON-PRODUCTION — not valid for production deployments

Navigate to the proxy URL. Unauthenticated requests are met with a sign-in form backed by the user you configured during init.

The sign-in form

Enter your username and password and click Sign in.

The empty dashboard

Click Instances in the sidebar to manage instances.

Click Instances in the sidebar

The empty Instances page

Choose the studio-examples template from the Add Instance menu

Switch to Custom and open Advanced launch options to put media on the host network for low-latency ingest.

Name the instance, choose hybrid networking, and launch

Running instance card

The instance card shows its product, version, and launch parameters inline.

The running instance card

In hybrid mode, the studio is accessed through the proxy — just like Docker mode.

Norsk Studio

Navigate back to the Instances page, then Terminate the instance to delete it and free its resources.

Click Terminate to remove the instance

Confirm removal

Instance removed

The proxy is needed whenever instances are running — with no instances left, it can be stopped to free the port.

Terminal window
norsk-ctl proxy stop

The daemon can be stopped and restarted at any time — running instances and the proxy are unaffected.

Terminal window
norsk-ctl shutdown --daemon-only
Daemon stopped (pid 3350183)