UI3 Help - Table of Contents

Choose a section to hide all others:


If you need support with UI3, the best place to go for help is the Blue Iris section of the IpCamTalk forum.

This interface was developed by community member bp2008 from IpCamTalk.

Camera Layout

UI3 is unable to directly control the order or exact positioning of your cameras. To change the order of your cameras, you must enter "Edit Layout" mode in Blue Iris's local console, and drag cameras around.

Optimizing Group Frames

Since Blue Iris 5.5, group video streams have a dynamic resolution intended to best-fit within the viewport you have available. If you wish to adjust this behavior, there are a few ways to do it:

In UI3

Right-click the group video in UI3, and choose "Group Settings". Here, you can force a specific aspect ratio for the group frame, adjust the streaming resolution limit to improve quality or save CPU cycles, or toggle features like the camera labels and borders. Control of the group frame's aspect ratio will be unavailable if you have configured a fixed aspect ratio for the group within Blue Iris's local console.

In the Blue Iris Local Console

In the local console, choose the desired group and click the "Edit Layout" button to the right of the group selection dropdown list. Then, right click any camera to access a menu of options to configure the group layout. Most options here also affect UI3. You can also click and drag cameras to reposition them.

Camera Properties

Admin user permission is required to access this functionality.

The Camera Properties panel is accessible from the context menu that appears when you right click on a camera (long-press on touchscreens). This panel contains some information about the camera and provides a set of common administrative controls, such as the ability to reconfigure the motion sensor. You can also disable a camera from here. If you disable a camera, you can re-enable it from the Full Camera List in the Main Menu.

Exporting Video

Clips or sections of clips may be exported into MP4, AVI, or WMV formats and then downloaded through UI3.

Exported items are kept on your Blue Iris server in the "New" folder as configured in Blue Iris settings, and the files will automatically be managed according to the rules assigned to that folder. UI3 does not currently offer the ability to delete exported items manually, but you can do this from the Covert/Export queue in Blue Iris's local console.

Begin Exporting

To begin exporting clips, open the Convert/Export interface using one of these methods:

  • Right-click a clip or alert, then choose Convert/export
  • Select multiple clips or alerts, then right-click one of them and choose Convert/export
  • Right-click the video player while a recording is open, then choose Convert/export
  • Click the Export button icon within the playback controls while a recording is open.

Configuring an Export Operation

When you open the Convert/Export interface, you will be shown a panel with options related to the export operation.

MP4 output format is recommended for best compatibility with 3rd-party applications.

Encoder profiles used by the export feature cannot be edited in UI3. This must be done in the local console of Blue Iris.

To export a timelapse, disable the audio track and enable re-encoding video to H.264.

If you are exporting a single clip, you may choose a specific time range to export. Drag the green and red knobs to your desired start and stop points:
time range screenshot

Convert/export settings

Export Status

When you push "Begin Export", the export jobs are queued and then a small dialog appears to give you status updates.

From here, you can:

  • Open the Convert/Export List (also found in the Main Menu)
  • Enable automatic download of finished exports
  • Download finished exports manually

Export status dialog

The Convert/Export List

This dialog is found in the Main Menu, and shows active and recently-finished export jobs. You may download finished items by clicking on them.

Convert/Export List

HLS Streams

Blue Iris can stream any camera or group using the HLS protocol. Though it is not core functionality, UI3 provides the ability to consume these streams.

HLS has significant video delay, but that is configurable to some extent in Blue Iris's streaming profile configuration.

HLS streaming is only available for live video, but it works with individual cameras and groups alike.

Streaming with HLS in UI3

Right-click on any video stream and choose "Properties", then "Open HTTP Live Stream (HLS)". A special video player called Clappr will open in a dialog window.

If you right-click the HLS player, you have the option to "Open stream in New Tab". Opening an HLS stream in a new tab actually opens a different page called "livestream.htm".


One of the pages included with UI3 is "livestream.htm" which just plays an HLS stream from Blue Iris and does basically nothing else. The page takes a single URL parameter "cam" with the short name of the camera or group you wish to view. Example: livestream.htm?cam=index

If you omit the "cam" parameter, livestream.htm will attempt to load "index" (a.k.a. "all cameras" ).

MQTT Remote Control

Since UI3-216, MQTT can be configured as a communication channel to remotely control UI3 instances. MQTT is a lightweight publish/subscribe messaging system commonly used in home automation.


To use MQTT in UI3, you must first have access to an MQTT broker with WebSocket support, such as Eclipse Mosquitto™ software. Mosquitto is commonly installed as an addon to the popular Home Assistant OS running on a Raspberry Pi or a virtual machine or docker container, but the Mosquitto server can also be installed on Windows if desired. Installing and configuring an MQTT broker is outside the scope of this document.

UI3 Configuration

Go to UI3's Main Menu > UI Settings > MQTT Remote Control section and fill in the WebSocket URL, User Name, and Password fields. Adjust the Instance ID if you desire (it is randomly generated, but can be edited). For basic users, the MQTT Advanced options should be left at their default values. When ready, enable the MQTT Client via the toggle button labelled "Enable MQTT Client". Toast messages should quickly appear indicating success or failure of the connection to the MQTT broker.

What are WebSocket URLs?

WebSocket URLs are very similar to regular web URLs, except instead of beginning with http:// or https://, they begin with ws:// for unencrypted connections, or wss:// for connections that will be secured with TLS.

An example WebSocket URL is ws://homeassistant.local:1884/ which indicates that the connection should use an unencrypted connection to the host named homeassistant.local on TCP port 1884.

Remotely Control UI3's State

You can use UI3's MQTT Remote Control capabilities to change the current live group or camera, maximize or unmaximize the video player, and change the volume of audio streaming.

List of MQTT topics used by UI3
The group name or camera short name currently being live-viewed.
0 or 1 to indicate whether the UI is maximized.
Audio playback volume from 0 to 100 (for the video player's volume control).

Note the instance_id text in the MQTT topic list above. instance_id is placeholder text which must be replaced by the Instance ID as configured in UI Settings. It is this Instance ID which enables you to individually target specific UI3 instances when multiple UI3 instances are connected to the same MQTT broker. The Instance ID is randomly generated by each web browser you run UI3 in, but it can be modified manually if desired. It is saved in the browser's Local Storage along with all other UI settings.

UI3 subscribes to these topics with its own Instance ID, and reacts when other MQTT clients publish messages to them.

UI3 also publishes messages to these topics when the local state changes due to user-interaction, so that other MQTT clients can subscribe to them to learn the current state of the UI3 instance. This behavior coincidentally allows a UI3 instance to remotely control another UI3 instance if they are both connected to the same MQTT broker, and both have the same Instance ID assigned.

Audio and Text-to-Speech

Enable "Audio/TTS Events" within the advanced MQTT configuration, and you'll be able to command UI3 to play audio files and use text-to-speech to speak arbitrary text strings. When this option is enabled, UI3 will test if audio playback is allowed upon UI startup, and if the browser refuses, UI3 will require user input to finish loading. Some web browsers allow you to explicitly allow audio without user input on certain web sites, and this is recommended if you will be using UI3's audio features.

Audio/TTS Topics
Publish an audio file name to this topic, and UI3 will play the sound. For example, publish doorbell.mp3 to ui3/instance_id/playaudio. If a previous audio file is still playing, it will be immediately stopped and the new audio file will play. Sound volume is controlled by UI Settings > Event-Triggered Sounds > Sound Effect Volume.
This alternate topic lets you provide an arbitrary Player ID string for the purpose of allowing multiple sounds to be played concurrently. More about that below.*
Publish some text to this topic, and the web browser's text-to-speech engine will speak the text aloud. The voice can be selected via UI Settings > UI Status Sounds > Speech Voice.

Note the instance_id text in the MQTT topic list above. instance_id is placeholder text which must be replaced by the Instance ID as configured in UI Settings.

For these commands, if you use the text "global" as the Instance ID, then all connected UI3 instances will receive the message. For example, publish doorbell.mp3 to ui3/global/playaudio.

*{player_id}. Normally, UI3 will only allow one audio file to be played at the same time via MQTT message. To work around this, you can optionally provide any unique string in place of {player_id} to cause UI3 to use a different player object identified by that string. For example, you could publish airhorn.mp3 to ui3/global/playaudio/A and publish doorbell.mp3 to ui3/global/playaudio/B and both audio files would play concurrently.

For playaudio messages, the audio files are loaded from the www/sounds subdirectory of your Blue Iris installation. You can add your own custom audio files there or use the ones provided by default. mp3 and wav are the most widely-supported formats.

Consider NOT using the "retain" flag when sending audio or TTS commands to UI3. "retain" would make the messages be received, and audio played, every time a UI3 instance connects to the MQTT broker.

Online Status

MQTT clients can track whether an Instance ID has any connected UI3 instances by looking at children of the ui3/instance_id/online topic as shown in the following screenshot from MQTT Explorer:

MQTT Explorer Screenshot

The above example shows two UI3 windows both sharing the same Instance ID. One UI3 window is publishing and subscribed to ui3/test_id/state/#, while the other has an advanced configuration where it is only subscribing but not publishing its own local state changes.

The 16-character alphanumeric sequences seen here are randomly generated by each browser window running UI3 so that individual browser windows can report their online status to MQTT without overwriting each other when they share an Instance ID. The possible status messages are pub/sub, pub only, sub only, indicating which functionality is enabled for that browser window.


If you have trouble understanding how MQTT works, I suggest using MQTT Explorer to view the activity on your MQTT broker in real-time. This will enable you to easily see what UI3 is doing with MQTT topics. The tool can also publish messages so you can use it to test UI3's remote control capability.

The "All cameras" group is not actually named All cameras. This group is internally named Index and must be referred to as such for remote control purposes.

The vid topic is only used for live viewing at this time, but may be extended in the future to support timeline playback or clips/alerts.

It is recommended when publishing state changes to UI3, that you always use the "retain" flag. This provides the most consistent and predictable behavior. However when publishing playaudio or playtts messages, do NOT use the "retain" flag unless you want the audio to play every time UI3 loads.

Advanced Configuration

UI3 offers several advanced options for its MQTT client.

By default, UI3 performs two-way communication with the MQTT broker, both publishing its own state changes and subscribing to receive state changes from the broker. You can individually toggle the publish and subscribe functions in order to have the remote control work only one-way.

MQTT supports 3 different "QOS" values (0, 1, 2) for subscribing and for publishing. Non-zero QOS values attempt to offer additional guarantees of message delivery, but for most users, QOS 0 is sufficient and it is the fastest option. Advanced users may choose different QOS values individually for publishing and subscribing. QOS 0 ensures that messages are delivered at most one time. QOS 1 ensures that messages are delivered at least one time. QOS 2 ensures that messages are delivered exactly one time.

By default, UI3 publishes its state messages with the "Retain" flag set in order to help persist the UI state between page loads. If desired, you can turn this off.

PTZ Controls

UI3 offers several methods of controlling Pan-Tilt-Zoom (PTZ) cameras. For correct behavior, each camera must have the appropriate PTZ control profile chosen in Blue Iris. Not all cameras support all functions that are shown in the user interface.

Standard PTZ Controls

The primary method of PTZ input is via the PTZ button pad on the Live View tab, where buttons are available to pan, tilt, zoom, or adjust camera focus. Mouse over each button for a description of what each button does. The button at the center of the button pad is to "Stop" the camera, which is unnecessary in most cases but may be helpful if your camera is stuck in a moving state and the other buttons cannot stop it.

Preset Positions

Below the PTZ button pad, there are buttons for loading and setting PTZ presets.

Goto Preset

Click a button to instruct the camera to go to that preset position.

Set Preset

Long-press (click and hold) a button to set the preset to the camera's current position. You will be prompted to enter a name for the preset, and given the option to cancel the "Set" operation. If you proceed, the camera will be instructed to save the preset, and Blue Iris save a snapshot of the current view to show within the preset button.

If long-press doesn't work, you can access the "Set" functionality by right clicking each preset button to open a context menu.


Mousing over any preset button will show the name assigned to the preset, along with the saved snapshot.

3D Positioning

On supported cameras, the "Toggle 3D Positioning" button can be used to enable 3D Positioning mode, where you can click a spot in the camera's field of view and the camera will attempt to center its view on that position.

If you click and drag, you can draw a rectangle around the region you would like the camera to move to. Drag left-to-right to draw a red rectangle that will cause the camera to zoom in. Drag right-to-left to draw a blue rectangle that will cause the camera to zoom out.

For devices with a keyboard, you can hold the CTRL key to temporarily enable "3D Positioning" mode, even when not on the Live View tab. (TIP: the CTRL key + click method is also supported in Blue Iris's local console for basic 3D positioning.)

For devices with a mouse wheel, you can click with the mouse wheel instead of the primary mouse button to directly access "3D Positioning" mode without explicitly enabling it and without using the CTRL key.

* At this time, UI3 does not support 3D Positioning while viewing a camera group, only when viewing an individual camera.

3D Positioning Compatibility

If you know that your camera supports 3D positioning in its web interface, but you can't make it work in Blue Iris or in UI3, try selecting a different PTZ control profile for the camera in Blue Iris. Blue Iris has multiple choices of PTZ protocol for some popular camera manufacturers, such as Dahua.

As of Blue Iris, 3D positioning with zoom capability is supported with the "Dahua New V4" PTZ profile. Other PTZ profiles may offer limited or no support for 3D positioning.

3D Positioning support may change with Blue Iris updates and with camera firmware updates.

If none of the relevant PTZ profiles enable 3D Positioning with your camera, but you know your camera is capable of 3D positioning, Blue Iris Support may be able to help (requires an active support plan).


Hotkeys exist for most PTZ functions, and hotkeys work even if you are not on the Live View tab. With a default hotkey configuration, try the arrow keys to pan and tilt, + and - keys on the number bar to zoom, and [ and ] keys to adjust focus. The number keys 0-9 on the number bar are bound to goto PTZ presets. Holding the CTRL key will temporarily activate "3D Positioning" mode (see "3D Positioning" section above).


To view recorded video, you must use "Clips" tab at the top of the UI.


The "Alerts" tab is gone since UI3-120. "Alerts" is now one of many dropdown list items on the "Clips" tab. A "Clip" represents a single video file on disk. An "Alert" is a bookmark to a specific location in a clip. A single clip may have multiple associated alerts, or no associated alerts.


You can filter the Clips list by camera, group, date, and database view ("All clips", "Alerts", "New", "Sentry confirmed", etc.).

To filter by camera, simply maximize that camera by clicking on it in the main video area. To filter by other criteria, use the filter controls above the Clip list.

Screenshot of recording filters

Expanding the Filters

If you don't see the filter controls, that means you have collapsed them by clicking on the "Filter Clips by:" text. Click the "Filter Clips by:" text again to expand the filter controls section.

Context Menu

If you right click (long-press on touchscreens) on an alert or clip, a context menu appears.

Screenshot of clip list context menu
Clip list context menu actions

Admin privilege is required for some actions.

Flag Admin
Flags the specified item(s) to make them easier to find later.
Protect Admin
Protects the specified item(s) so they will not be deleted by Blue Iris's space-reclaiming algorithm.
Downloads the specified clip(s) file exactly as it exists on the server's disk. Only clips can be downloaded. If you attempt to download an alert, the browser will download the clip which contains the alert. The format of the downloaded clip is whatever format you have configured for the camera in Blue Iris.
Delete Admin
Deletes the specified item(s).
Enlarge/Shrink Thumbnails
Toggles between the standard layout and one that dedicates much more space to thumbnail images.
Enable/Disable Mouseover Thumbs
Enables or disables a much larger thumbnail that appears when you mouse over each clip.
Opens the interface for exporting the selected items as MP4, AVI, or WMV.
Opens a panel containing properties of the selected clip or alert.


If your device has a physical keyboard, you can hold SHIFT and/or CTRL keys while clicking to select multiple items for bulk operations.

Stats for Nerds

Inspired by YouTube's feature with the same name, UI3 has a "Stats for nerds" panel which shows an assortment of details about the video player. This information can be useful for troubleshooting, but otherwise it is just fun to look at.

To access this panel, right-click on UI3's video player and choose the "Stats for nerds" option.

Stats for nerds

"Stats for nerds" item descriptions
Many items in this panel only exist when streaming H.264. Other items may only exist while streaming Jpeg frames.

The size of the screen area available for video playback. When using DPI scaling or browser zoom, the zoom ratio is also shown here.
Stream Resolution
The resolution of the current video stream. Jpeg frames are dynamically adjusted to the ideal resolution to fit the viewport.
Native Resolution
The resolution of the current video stream. Jpeg frames are dynamically adjusted to the ideal resolution to fit the viewport.
Seek Position
Shows either "LIVE" or the current playback position as a percentage of the clip.
Frame Offset
The timestamp of the last-rendered frame relative to the start of the streaming connection.
Frame Time
H.264 The approximate date and time when the last-rendered frame was originally captured.
The current video and audio codecs.
Jpeg Loading Time
JPEG The amount of time it took to load the last jpeg frame.
Video Bit Rate
H.264 Measured bit rate of the video stream.
Audio Bit Rate
H.264 Measured bit rate of the audio stream.
Audio Buffer
H.264 The amount of audio (in milliseconds) which has been received but not yet played. If this reaches 0, it means no audio is playing.
Frame Size
H.264 The size in bytes of the last video frame.
Inter-Frame Time
H.264 The time in milliseconds between frame renders. If this graph jumps around a lot, it is evidence that the video stream is not smooth. Many cameras don't capture frames at a constant interval when they aren't streaming at their maximum frame rate, so it isn't uncommon to see a pattern like 50ms, 50ms, 100ms, 50ms, 50ms, 100ms.
Frame Timing Error
H.264 This is the difference between the time a frame was supposed to be rendered and the time it was actually rendered. The closer this is to zero, the better.
Network Delay
H.264 The estimated video delay caused by insufficient network speed. Values of a few hundred milliseconds are completely normal and nothing to worry about.
Player Delay
H.264 The estimated video delay caused by insufficient CPU speed. Values of a few hundred milliseconds are completely normal and nothing to worry about. A small amount of player delay is often intentional in order to keep the Frame Timing Error as close to zero as possible.
Delayed Frames
H.264 The number of frames that have been received but not yet decoded and rendered. This directly correlates with Player Delay and low values (0-2) are completely normal. A small number of delayed frames is often intentional in order to keep the Frame Timing Error as close to zero as possible.


  • Headings in the left toolbar can be clicked to collapse and expand their content.
  • The camera icon in the upper right corner is a quick way to download a snapshot of the current video.
  • Several UI elements have a custom context menu that is accessible by right clicking (long-press on touchscreens).
    These elements include:
    • Cameras
    • Alerts and Clips
    • The date filter on Clips tab
    • PTZ Preset buttons
    • Profile and Schedule controls
    • The Stoplight (in the status area at the bottom)
    • The heading that overlays the top of the video player during clip playback
    • The HLS Player
  • The "DISK" status bar in the Status area can be clicked as a shortcut to open the Disk Usage panel.

UI Extensions

Experienced web developers can extend UI3 with custom JavaScript and CSS.

Of course if you take the most obvious route and modify ui3.js and ui3.css files directly, you would have to re-apply your changes after every update! To solve this problem, UI3 attemps to load two files which do not exist in releases: ui3-local-overrides.js and ui3-local-overrides.css. You can create either or both of these files and place them in the "ui3" subdirectory of your Blue Iris installation's web root directory ("www"). These two files will be loaded after all the other script and style files, allowing you to conveniently override virtually any default functionality you wish, if you have the programming skills to do so.


For examples, see https://github.com/bp2008/ui3/wiki/Local-Overrides-Scripts-and-Styles

Quick Start - Globally Override Default Settings

At the bottom of the UI Settings panel is an item called 'Create Script: "ui3-local-overrides.js"'. This item is only visible if you have logged in to UI3 as a Blue Iris administrator.

When you click the "Download" link, your browser should download a copy of your current settings in the form of a ui3-local-overrides.js file. If you move this file into your "ui3" subdirectory, then all users will receive your current settings by default.

If you want to customize the default values in this auto-generated file, you should first understand some things:

  • If you manually edit a setting's value in the ui3-local-overrides.js script, you should also increment the Generation number. Each user (each web browser, really) will only adopt your new default value if the Generation associated with it is a higher number than the generation they had previously.

    If you make the change in your own web browser and re-download the ui3-local-overrides.js file, this will automatically increment all generation numbers. Then you just need to replace your old overrides file with the new one.
  • If you want your default value to ALWAYS be reloaded when UI3 is loaded, set "Always Reload" to true. Then, the Generation number does not matter, and your specified value will take effect every time UI3 is loaded regardless of how each user has configured it.
  • To prevent a setting from appearing in the UI Settings panel, change "true" to "false" for the "Options Window" parameter. Uncategorized settings don't appear in the options window anyway, and some items from the UI Settings panel aren't settings in the first place, but buttons (e.g. to forget saved credentials).

UI3 Settings Management (Import/Export/Reset Local Storage)

Visit storageinfo.htm to manage your browser's Local Storage, including the ability to View, Delete, Import, and Export the settings and other data that UI3 is storing.

Reset UI3 Settings

A basic "Factory Default" reset button is available on the reset.htm page, in case the main UI3 interface is unable to load.

URL Parameters

Several URL parameters can change UI3's startup behavior. Each parameter has an alternative short name which can be used to create shorter URLs.

Parameter Effect Example
Replace [minutes] with the desired integer number of minutes to set the Idle Timeout setting upon UI startup. Useful for systems that cannot save persistent settings. ui3.htm?timeout=0
UI3 loads with the left and top control bars hidden. This state persists between UI loads. ui3.htm?maximize=1
UI3 loads with the left and top control bars shown. ui3.htm?maximize=0
Note that UI3 cannot automatically full-screen itself due to security protections imposed by web browsers.
Please do a web search for how to open your favorite browser in full-screen or kiosk mode.
The "Live" tab is loaded. ui3.htm?tab=live
The "Clips" tab is loaded. ui3.htm?tab=clips
The "Timeline" tab is loaded. ui3.htm?tab=timeline
The clip list view specified by X is selected upon UI startup. Possible values of X: all, alerts, new, stored, aux1, aux2, aux3, aux4, aux5, aux6, aux7, aux8, aux9, aux10, aux11, aux12, aux13, flagged, new.clipboard, cancelled, confirmed, zonea, zoneb, zonec, zoned, zonee, zonef, zoneg, zoneh, dio, onvif, audio, external, memos, archive, export ui3.htm?tab=clips&clipview=alerts
The clip/alert list filter search input is pre-filled with this query. ui3.htm?tab=clips&clipview=alerts&clipsearch=car
Date to select as the start day in the clip/alert list calendar filter.

Can be in the format "YYYY-MM-DD" or it can be a linux epoch timestamp with precision in seconds or milliseconds. Regardless of format, date filtering in UI3 is based on whole days only.
Date to select as the end day in the clip/alert list calendar filter. ui3.htm?tab=clips&datestart=2020-1-1
The group with the specified name is loaded. ui3.htm?group=index
The camera with the specified "Short name" is loaded. ui3.htm?cam=porch

Opens a specific clip at UI3 startup. The value should be the numeric portion of a clip's database ID. For example, a clip might have database ID @21148130039, so a "rec=" argument to open this clip would be rec=21148130039. To open a clip at a specific time offset, append a hyphen and a number of milliseconds. For example, to open the clip at its 10-second mark, use rec=21148130039-10000.

This parameter also loads the Clips tab at UI3 startup.

To make it easy to share a link to a clip, this parameter is automatically entered into the address bar during clip playback.


Opens the timeline tab and seeks to the specified date and time. The "DATE" value can be:

  • A JavaScript timestamp (number of milliseconds since the unix epoch, ignoring leap seconds).
  • A negative number of milliseconds to offset from the current time (e.g. (-30000 to start 30 seconds back from "live").
  • A date and time string that is parseable by JavaScript's Date.parse() function (e.g. 2023-07-29.18:14:00). Be sure to properly URL-encode your string if you have difficulty using this.

To make it easy to share links, this parameter is automatically entered into the address bar during timeline playback.


The specified clip or timeline position will start paused. Live video currently can't be started paused.


Selects a specific streaming profile at UI3 startup. The value name must exactly match one of your streaming profiles. Streaming profile names are case-sensitive and should be URL-encoded when used in a URL parameter.

ProfileName Parameter

Multiple parameters can be combined
Separate multiple parameters with "&", like this: ui3.htm?tab=clips&clipview=alerts&cam=porch&maximize=1

Video Player

Troubleshooting Tip

If you experience choppy audio in UI3, or have trouble playing clips that were recorded in the MP4 format, try installing the K-Lite Codec Pack on your Blue Iris server. Beware of bundled adware when installing any codec pack. You can safely and conveniently get K-Lite Codecs from ninite.com.

Audio Streaming

UI3 supports one-way audio streaming from Blue Iris to UI3. Audio playback is only available when streaming H.264 video, due to the streaming methods used.

Video Codecs (Streaming Quality)

UI3 can stream video using two different compression methods: H.264 and Jpeg. H.264 is more efficient with network bandwidth, and usually achieves a higher frame rate, making it the most desirable choice in most circumstances. H.264 is the default streaming method in browsers which support it. Jpeg streaming is simpler and can be used in all browsers capable of running UI3.


UI3 can stream H.264 video if your browser supports it. You can check for H.264 compatibility by looking in the Streaming Quality dropdown list. If the only options there are "Jpeg" then your browser is not compatible. If H.264 is available, it often provides a much smoother video stream.

  • If your viewing device has insufficient CPU or network speed, H.264 video will become increasingly delayed. If this happens, UI3 will warn you and suggest that you try a different Streaming Quality option.

H.264 Streaming Profiles

Server-side profiles

Blue Iris provides three streaming profiles called simply "Streaming 0", "Streaming 1", and "Streaming 2". To find these in Blue Iris's local console, open Blue Iris Options > Web server tab > Advanced. Here, you can configure each of the encoder profiles.

The three H.264 encoder profiles are shared between Blue Iris's mobile apps, UI3, Remote Management, and even the legacy default.htm and jpegpull.htm pages. "Streaming 0" is used by default.

Some settings in the "Streaming 0" encoder options affect UI3's default client-side streaming profiles, while some settings are overridden by UI3.

Screenshot of Blue Iris's profile editor

Client-side profiles

UI3 provides more-intuitive quality choices such as "1080p", "720p", and "480p". These quality choices each represent a fully-configurable streaming profile, which you can edit by opening the Main Menu and choosing the Streaming Profiles option.

Each of UI3's streaming profiles must be based on one of the server-side profiles. All encoding parameters are inherited from this profile unless otherwise specified in UI3. UI3's default profiles are all based on Streaming 0, but they override the Max Frame Width, Max Frame Height, and Max Bit Rate parameters. Other parameters, such as Quality, are intentionally left blank so their values will be inherited from Streaming 0.

For internet streaming, it is recommended to use one of the built-in profiles with "VBR" in the name, as these use lower quality in order to achieve substantially lower average bit rates.

If you want UI3 to use a server-side streaming profile without overriding anything, simply create a new profile in UI3, give it a name, and base it on the desired server-side profile. Leave all the encoding parameters alone, and their values will be inherited from your chosen Base Server Profile.

If you want to share your profile changes with all browsers and devices, see the "Quick Start" section of UI Extensions.

Screenshot of the UI3 profile editor

H.264 Profile Configuration Tips

HVA (Hardware Video Acceleration)

You can choose a method of hardware accelerated video encoding if desired. Nvidia NVENC can be helpful if you have a supported GPU. Intel QSV in my experience simply does not work and Blue Iris falls back to software encoding. HVA is only settable in server-side profiles and can't be overridden by UI3.

Nvidia NVENC Encoding tips as of August 2023:

  • If Max Bit Rate is enabled, then Quality is ignored, in true CBR (Constant Bit Rate) fashion. This is different from the behavior of Blue Iris's software encoding, which is always Variable Bit Rate.
  • Video streaming may fail in various situations with Quality above 50. Results may vary.
  • Consumer-grade Nvidia GPUs have a limit on the number of simultaneous streams.


Although the audio codec can be configured in server-side streaming profiles, it has no effect. It is therefore not an option in UI3's streaming profile system. If you wish to configure the audio codec received by UI3, find the "Audio Codec" setting in UI3's settings panel.

Quality vs Bit Rate

Blue Iris will encode up to your specified Quality level, automatically reducing quality if necessary to stay within the bit rate limit. For streaming, it is recommended to always use the Limit bitrate setting, otherwise the actual bit rate can get excessively high and in extreme cases this can cause decoding errors.

The default quality value (50) is already quite high, so setting it higher is almost never a good idea for remote streaming! Actually, lower values like 20 can provide enormous bandwidth savings while retaining acceptable visual quality.

Lower bit rates work better with devices that have a slow CPU or slow network connection.

Maximum keyframe interval (GOP)

Also known as the i-frame interval. For UI3, you should set this as high as it goes, which is 300 in a server-side streaming profile. UI3 lets you set it as high as 1000 frames. I've seen stream stability problems with values much higher than 1000 frames so UI3 enforces 1000 as its limit.

Maximum B-frames between P-frames

UI3 is not compatible with B-frames. Keep this set to 0, though evidence suggests this setting has no effect anyway.

Advanced > Profile

"high" profile is recommended for most users. "baseline" profile may reduce CPU requirements slightly at the cost of image quality. Read more about H.264 profiles.

Advanced > Preset

  • "ultrafast" - Lowest CPU usage and lowest image quality
  • "superfast" - A good balance between CPU usage and image quality
  • "veryfast" - Slightly better image quality at the cost of higher CPU usage and some video delay

Zero frame latency

Recommended to be enabled for best UI responsiveness and compatibility. In testing, no perceptible difference was seen with this enabled or disabled.

Full range color

Controls whether Blue Iris will use RGB limited (16-235) or RGB full (0-255) color range when encoding video. Keep this disabled if you do not understand it, because in many hardware configurations enabling it can cause very dark and very bright details to be lost.


For advanced users only. Direct-to-wire introduces compatibility problems in UI3 and substantially reduces camera-switching responsiveness. However Direct-to-wire can be a helpful optimization for systems that will spent a large amount of time live streaming a single camera, because Blue Iris won't need to re-encode that video stream.

From Blue Iris Help File
When Direct to Wire is in effect, video is passed directly from a camera's direct-to-disc frame buffer to the browser UI3 and other clients. This has the huge benefit of using NO CPU for the decoding and re-encoding of the video. However, this also means the video will not have Blue Iris overlays and is limited to either the sub or main stream WITHOUT MODIFICATION-that is, it becomes imperative to manage the stream encoding properties on the camera side. You should have a reasonable key frame rate (0.40 or higher) and use H.264 (as UI3 and the phone apps cannot decode H.265 at this time).

"Direct to Wire" Compatibility Problems:

  • H.264 Only
  • Some H.264 streams may not be able to play reliably or at all. This will vary by client device, by camera, and by your choice of H.264 player in UI3.
  • Image processing functions provided by Blue Iris will not work. This includes text and image overlays, rotation, 360 dewarping, etc.
  • The resolution, bit rate, and other encoding parameters won't be adjustable via UI3.

Be aware if you choose to enable Direct-to-wire in the Streaming 0 profile, this will affect nearly all web streaming and make it more difficult to avoid the compatibility issues. Instead, create a new Streaming Profile in UI3 that has Direct-to-wire enabled, or use the Streaming 1 or Streaming 2 profiles.

Resize output frame width x height

UI3's client-side streaming profiles all override the width and height by default as one of their primary functions. The "Resize output frame width x height" setting in the server-side streaming profiles lets you do similarly for other client applications which do not offer their own resolution controls. Whether you should use this setting or not depends entirely on your personal preference for quality vs efficiency. Lower resolutions are more efficient to work with.

Retain aspect ratio within frame

Recommended to be enabled, unless you like stretching your video streams to fill a particular shape of display.

Allow UI3 overrides

Blue Iris's built-in streaming profiles have the option to allow or disallow "UI3 overrides". Disallowing UI3 overrides will prevent UI3's Streaming Profiles from working as intended, but may be useful for troubleshooting or as an advanced method of controlling your server's resource consumption.

Jpeg Streaming

Jpeg streaming is done by requesting Jpeg-compressed snapshots as quickly as possible. It is not very efficient with network bandwidth and it can't achieve high frame rates over the internet. However, being a simpler streaming method, it tends to "just work". Jpeg streaming is capable of extremely high resolutions and excellent image quality.

Audio playback is not available while streaming Jpeg snapshots.

Context Menu

If you right click (long-press on touchscreens) on a camera, a context menu appears. The first group of actions are specific to the current video stream, while most other options are specific to the camera you clicked on. Here, blue icons indicate actions that take effect on the Blue Iris server and require Admin privilege, while black icons indicate actions that occur in the web UI.

Screenshot of clip list context menu
Live View Context Menu Actions
Open image in new tab
Opens a snapshot of the current frame in a new tab.
Save image to disk
Downloads a high quality copy of the current frame.
Copy image address
Copies (to the clipboard) a URL for a high-quality jpeg snapshot from the current stream. If you are viewing a clip, the URL will honor your playback position.
Group Settings
Opens UI3's group settings panel where some display options can be adjusted, along with the resolution/scale of the group stream.
Camera Name
This item doesn't do anything. It serves as a separator and indicator of which camera you clicked.
Also called "Back to Group" if you are viewing a maximized camera, this item has the same effect as just clicking the camera would have had.
Trigger Now
Admin Triggers an alert for this camera in Blue Iris.
Start/Stop Recording
Admin Toggles manual recording for this camera in Blue Iris.
Snapshot in Blue Iris
Admin Instructs Blue Iris to save a snapshot for this camera. The snapshot will appear in your clip list.
Restart Camera
Admin Instructs Blue Iris to restart this camera. Useful mostly for debugging purposes or to fix streaming problems affecting just one camera.
Stats for nerds
Opens the "Stats for nerds" panel, containing low-level information about the current video and audio streams.
Admin Opens a properties panel containing many options for this camera.