Configuration - ntim/hyperion GitHub Wiki

The Hyperion daemon uses a JSON based configuration file. Hyperion uses a library for parsing JSON, this library allows the use of C-style comments.

HyperCon, config builder

Hyperion comes with a tool, _HyperCon_, for easy building of configuration files.

The tool simplifies the process of defining a correct basic configuration file. Fine tuning of device and setup specific configuration may be completed by 'hand', but this is not necessary as the tool remembers the last used settings. The configuration can therefor be easily tuned and re-generated without the need to redefine the entire configuration. On the left-side of the application-window the configuration of the led's around the TV can be configured. On the right-side an example is rendered of the TV setup. The image used can be selected by clicking on the TV with the right-mouse button. Application components can be disabled by completely removing their configuration block or by commenting them entirely.

HyperCon.jar

Main screen

Device settings

The first settings are to specify the device type and parameters related to the device type. Depending on the select 'type' different settings are applicable.

Frame settings

Settings to specify the led layout:

  • Direction: the direction in which the led are layout.
  • Led in top corner: true if you have a led in the top corners.
  • Led in bottom corner: true if you have a led in the bottom corners.
  • Horizontal #: The number of leds you have horizontally on the top and bottom. This excludes any corner leds. If you have less leds on the bottom then take note of the bottom gap setting.
  • Vertical #: The number of leds you have vertically on the sides. This excludes any corner leds.
  • bottom gap #: The number of leds missing in the bottom row. The amount of leds you specify here are taken from the middle of the bottom row with leds.
  • 1st LED offset: This specifies where you start counting the leds. The offset is an offset from the led on the top left.

Image processing

Settings to specify the integration area of the leds:

  • horizontal depth: The percentage of the screen height which is used for determining the color of the leds on the top and the bottom. For example 5% means that the top 5% and the bottom 5% is used.
  • vertical depth: The percentage of the screen width which is used for determining the color of the leds on the sides.
  • horizontal gap: The percentage of the screen height which is skipped for the top and the bottom leds before the integration area begins.
  • vertical gap: The percentage of the screen width which is skipped for the side leds before the integration area begins.
  • overlap: The overlap between integration areas. For example 100% overlap means that a led its entire integration area with the neighboring leds (Half with each neighbor)

Color transform

Settings for transforming pure 'RGB' values to colors on the leds. It is possible to specify multiple 'transformss'. Each transform is applicable for a range of leds. Each led should be mapped to exactly one tranform. The transforms contain the following items:

  • id: An unique identifier for this transform.
  • leds: A comma seperated list of led-indices (zero based) to which this transform applies. The setting also allows ranges of indices (eg '5-9').
  • hsv: Transform specification in the Hue-Saturation-Value domain. The config-object contains two values: 'saturationGain' and 'valueGain'.
  • red/green/blue: For each of the RGB color channels a transform is specified. The transform contains four configurable parameters: 'threshold', 'gamma', 'blacklevel', 'whitelevel'.

Example configuration file

The following part shows an example of a configuration similar to the ones created by HyperCon. For convenience not all led's are included. ```javascript // Automatically generated configuration file for 'Hyperion daemon' // Generated by: HyperCon (The Hyperion deamon configuration file builder

{ /// Device configuration contains the following fields: /// * 'name' : The user friendly name of the device (only used for display purposes) /// * 'type' : The type of the device or leds (known types for now are 'ws2801', 'ldp8806', /// 'lpd6803', 'sedu', 'adalight', 'lightpack', 'test' and 'none') /// * 'output' : The output specification depends on selected device. This can for example be the /// device specifier, device serial number, or the output file name /// * 'rate' : The baudrate of the output to the device /// * 'colorOrder' : The order of the color bytes ('rgb', 'rbg', 'bgr', etc.). "device" : { "name" : "MyPi", "type" : "ws2801", "output" : "/dev/spidev0.0", "rate" : 250000, "colorOrder" : "rgb" },

/// Color manipulation configuration used to tune the output colors to specific surroundings.
/// The configuration contains a list of color-transforms. Each transform contains the
/// following fields:
///  * 'id'   : The unique identifier of the color transformation (eg 'device_1')	///  * 'leds' : The indices (or index ranges) of the leds to which this color transform applies
///             (eg '0-5, 9, 11, 12-17'). The indices are zero based.	///  * 'hsv' : The manipulation in the Hue-Saturation-Value color domain with the following
///            tuning parameters:
///            - 'saturationGain'  The gain adjustement of the saturation
///            - 'valueGain'       The gain adjustement of the value
///  * 'red'/'green'/'blue' : The manipulation in the Red-Green-Blue color domain with the
///                           following tuning parameters for each channel:
///            - 'threshold'       The minimum required input value for the channel to be on
///                                (else zero)
///            - 'gamma'           The gamma-curve correction factor
///            - 'blacklevel'      The lowest possible value (when the channel is black)
///            - 'whitelevel'      The highest possible value (when the channel is white)
///
/// Next to the list with color transforms there is also a smoothing option.
///  * 'smoothing' : Smoothing of the colors in the time-domain with the following tuning
///                  parameters:
///            - 'type'            The type of smoothing algorithm ('linear' or 'none')
///            - 'time_ms'         The time constant for smoothing algorithm in milliseconds
///            - 'updateFrequency' The update frequency of the leds in Hz
"color" :
{
	"transform" :
	[
		{
			"id"   : "default",
			"leds" : "0-49",
			"hsv" :
			{
				"saturationGain" : 1.0000,
				"valueGain"      : 1.0000
			},
			"red" :
			{
				"threshold"  : 0.0000,
				"gamma"      : 1.0000,
				"blacklevel" : 0.0000,
				"whitelevel" : 1.0000
			},
			"green" :
			{
				"threshold"  : 0.0000,
				"gamma"      : 1.0000,
				"blacklevel" : 0.0000,
				"whitelevel" : 1.0000
			},
			"blue" :
			{
				"threshold"  : 0.0000,
				"gamma"      : 1.0000,
				"blacklevel" : 0.0000,
				"whitelevel" : 1.0000
			}
		}
	],
	"smoothing" :
	{
		"type"            : "none",
		"time_ms"         : 200,
		"updateFrequency" : 20.0000
	}
},

///  The configuration for each individual led. This contains the specification of the area
///  averaged of an input image for each led to determine its color. Each item in the list
///  contains the following fields:
///  * index: The index of the led. This determines its location in the string of leds; zero
///           being the first led.
///  * hscan: The fractional part of the image along the horizontal used for the averaging
///           (minimum and maximum inclusive)
///  * vscan: The fractional part of the image along the vertical used for the averaging
///           (minimum and maximum inclusive)
"leds" :
[
	{
		"index" : 0,
		"hscan" : { "minimum" : 0.4375, "maximum" : 0.5000 },
		"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
	},
	{
		"index" : 1,
		"hscan" : { "minimum" : 0.3750, "maximum" : 0.4375 },
		"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
	},
	{
		"index" : 2,
		"hscan" : { "minimum" : 0.3125, "maximum" : 0.3750 },
		"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
	},
	{
		"index" : 3,
		"hscan" : { "minimum" : 0.2500, "maximum" : 0.3125 },
		"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
	},
	{
		"index" : 4,
		"hscan" : { "minimum" : 0.1875, "maximum" : 0.2500 },
		"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
	},

: : { "index" : 47, "hscan" : { "minimum" : 0.6250, "maximum" : 0.6875 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { "index" : 48, "hscan" : { "minimum" : 0.5625, "maximum" : 0.6250 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { "index" : 49, "hscan" : { "minimum" : 0.5000, "maximum" : 0.5625 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } } ],

/// The black border configuration, contains the following items: 
///  * enable    : true if the detector should be activated
///  * threshold : Value below which a pixel is regarded as black
"blackborderdetector" : 
{
	"enable" : true,
	"threshold" : 0.01
},

/// The configuration of the effect engine, contains the following items:
///  * paths        : An array with absolute location(s) of directories with effects
///  * bootsequence : The effect selected as 'boot sequence'
"effects" :
{
	"paths" :
	[
		"/opt/hyperion/effects"
	]
},

"bootsequence" :
{
	"effect" : "Rainbow swirl fast",
	"duration_ms" : 3000
},

///  The configuration for the frame-grabber, contains the following items:
///   * width        : The width of the grabbed frames [pixels]
///   * height       : The height of the grabbed frames [pixels]
///   * frequency_Hz : The frequency of the frame grab [Hz]
"framegrabber" :
{
	"width" : 64,
	"height" : 64,
	"frequency_Hz" : 10.0
},

/// The configuration of the XBMC connection used to enable and disable the frame-grabber. Contains the following fields:
///  * xbmcAddress  : The IP address of the XBMC-host
///  * xbmcTcpPort  : The TCP-port of the XBMC-server
///  * grabVideo    : Flag indicating that the frame-grabber is on(true) during video playback
///  * grabPictures : Flag indicating that the frame-grabber is on(true) during picture show
///  * grabAudio    : Flag indicating that the frame-grabber is on(true) during audio playback
///  * grabMenu     : Flag indicating that the frame-grabber is on(true) in the XBMC menu
"xbmcVideoChecker" :
{
	"xbmcAddress" : "127.0.0.1",
	"xbmcTcpPort" : 9090,
	"grabVideo" : true,
	"grabPictures" : true,
	"grabAudio" : true,
	"grabMenu" : false,
            "grabScreensaver" : true,
            "enable3DDetection" : true
},

    /// Configuration for the embedded V4L2 grabber
    ///  * device          : V4L2 Device to use [default="/dev/video0"]
    ///  * input           : V4L2 input to use [default=0]
    ///  * standard        : Video standard (no-change/PAL/NTSC) [default="no-change"]
    ///  * width                : V4L2 width to set [default=-1]
    ///  * height               : V4L2 height to set [default=-1]
    ///  * frameDecimation      : Frame decimation factor [default=2]
    ///  * sizeDecimation       : Size decimation factor [default=8]
    ///  * priority             : Hyperion priority channel [default=800]
    ///  * mode                 : 3D mode to use 2D/3DSBS/3DTAB (note: no autodetection) [default="2D"]
    ///  * cropLeft             : Cropping from the left [default=0]
    ///  * cropRight            : Cropping from the right [default=0]
    ///  * cropTop              : Cropping from the top [default=0]
    ///  * cropBottom           : Cropping from the bottom [default=0]
    ///  * redSignalThreshold   : Signal threshold for the red channel between 0.0 and 1.0 [default=0.0]
    ///  * greenSignalThreshold : Signal threshold for the green channel between 0.0 and 1.0 [default=0.0]      
    ///  * blueSignalThreshold  : Signal threshold for the blue channel between 0.0 and 1.0 [default=0.0]

// "grabber-v4l2" : // { // "device" : "/dev/video0", // "input" : 0, // "standard" : "PAL", // "width" : -1, // "height" : -1, // "frameDecimation" : 2, // "sizeDecimation" : 8, // "priority" : 800, // "mode" : "2D", // "cropLeft" : 10, // "cropRight" : 10, // "cropTop" : 1, // "cropBottom" : 1,
// "redSignalThreshold" : 0.1, // "greenSignalThreshold" : 0.1, // "blueSignalThreshold" : 0.1 // },

/// The configuration of the Json server which enables the json remote interface
///  * port : Port at which the json server is started
"jsonServer" :
{
	"port" : 19444
},

/// The configuration of the Proto server which enables the protobuffer remote interface
///  * port : Port at which the protobuffer server is started
"protoServer" :
{
	"port" : 19445
},

/// The configuration of the boblight server which enables the boblight remote interface
///  * port : Port at which the boblight server is started

// "boblightServer" : // { // "port" : 19333 // },

"endOfJson" : "endOfJson"

}


<h4>Replacing the default configuration</h4>
After creating your own configuration file you can copy the new configuration file to the Pi and overwrite the default file:

sudo cp my_config.json /etc/hyperion.config.json initctl restart hyperion

⚠️ **GitHub.com Fallback** ⚠️