# \[Iris\] Can't figure out how to display metadata from snapserver post 3.61.1

**URL:** <https://discourse.mopidy.com/t/iris-cant-figure-out-how-to-display-metadata-from-snapserver-post-3-61-1/5512>\
**Category:** Help and support\
**Created:** [July 3, 2022, 7:33pm UTC](https://discourse.mopidy.com/t/iris-cant-figure-out-how-to-display-metadata-from-snapserver-post-3-61-1/5512 "2022-07-03T19:33:52Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![shadowking001](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.mopidy.com/shadowking001/32/2285_2.png) [@shadowking001](https://discourse.mopidy.com/u/shadowking001)\
**Post date:** [July 3, 2022, 7:33pm UTC](https://discourse.mopidy.com/t/iris-cant-figure-out-how-to-display-metadata-from-snapserver-post-3-61-1/5512/1 "2022-07-03T19:33:53Z")

</div>

Hello everybody,

I’m running Iris for a while and I will never thank enough @jaedb for it. And the Mopidy team of course.  
Actually, I’m sticking with the 3.61.1 version, because of more recent versions are using snapserver 0.26 which is still not deployed in the Debian 11 stable.

But to prepare myself when it will be, I dropped Iris and Snapserver in a vm to do some preventive troubleshooting. And if I managed to get a snap stream working, I can’t figure out how to show metadata in the output panels.

In 3.61.1, I’m using the `control_url` directive pointing to my FQDN in /etc/snapserver.conf and everything works smoothly. With snapserver 0.26, we must now use the `controlscript=meta_mpd.py` instead, but it seems not working out of the box.

My mopidy config :

```auto
[core]
cache_dir = /var/cache/mopidy
config_dir = /etc/mopidy
data_dir = /var/lib/mopidy
max_tracklist_length = 10000
restore_state = false

[logging]
verbosity = 0
format = %(levelname)-8s [%(threadName)s] %(name)s %(message)s
color = false
config_file =

[audio]
mixer = software
mixer_volume =
output = audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format =S16LE ! wavenc ! filesink location=/tmp/snapfifo
buffer_time =

[proxy]
scheme =
hostname =
port =
username =
password =

[local]
enabled = true
max_search_results = 100
media_dir = /home/lawrence/Musique
scan_timeout = 1000
scan_flush_threshold = 100
scan_follow_symlinks = false
included_file_extensions =
excluded_file_extensions =
  .cue
  .directory
  .html
  .jpeg
  .jpg
  .log
  .nfo
  .pdf
  .png
  .txt
  .zip
directories =
  Albums local:directory?type=album
  Artists local:directory?type=artist
  Composers local:directory?type=artist&role=composer
  Genres local:directory?type=genre
  Performers local:directory?type=artist&role=performer
  Release Years local:directory?type=date&format=%25Y
  Tracks local:directory?type=track
  Last Week's Updates local:directory?max-age=604800
  Last Month's Updates local:directory?max-age=2592000
timeout = 10
use_artist_sortname = false
album_art_files =
  *.jpg
  *.jpeg
  *.png

[iris]
enabled = true
country = NZ
locale = en_NZ
verify_certificates = false
snapcast_enabled = true
snapcast_host = localhost
snapcast_port = 1780
snapcast_ssl = false
snapcast_stream = Default
spotify_authorization_url = https://jamesbarnsley.co.nz/iris/auth_spotify.php
lastfm_authorization_url = https://jamesbarnsley.co.nz/iris/auth_lastfm.php
genius_authorization_url = https://jamesbarnsley.co.nz/iris/auth_genius.php
data_dir = $XDG_DATA_DIR/iris

[file]
enabled = true
media_dirs =
  $XDG_MUSIC_DIR|Music
  ~/|Home
excluded_file_extensions =
  .directory
  .html
  .jpeg
  .jpg
  .log
  .nfo
  .pdf
  .png
  .txt
  .zip
show_dotfiles = false
follow_symlinks = false
metadata_timeout = 1000

[http]
enabled = true
hostname = 0.0.0.0
port = 6680
zeroconf = Mopidy HTTP server on $hostname
allowed_origins =
csrf_protection = true
default_app = iris

[m3u]
enabled = true
base_dir =
default_encoding = latin-1
default_extension = .m3u8
playlists_dir =

[softwaremixer]
enabled = true

[stream]
enabled = true
protocols =
  http
  https
  mms
  rtmp
  rtmps
  rtsp
metadata_blacklist =
timeout = 5000

[mpd]
enabled = true
hostname = 0.0.0.0
port = 6600
password =
max_connections = 20
connection_timeout = 60
zeroconf = Mopidy MPD server on $hostname
command_blacklist =
  listall
  listallinfo
default_playlist_scheme = m3u

```

My snapserver config :

```auto
###############################################################################
# ______ #
# / _____ ) #
# ( ( ________  _________  ________  _____ ______  ____ #
# \____\ | _ \ (____ || _ \ /___)|___ | / ___)| | | ||___ | / ___) #
# _____) )| | | |/___ || |_| || ___||____ || | \ V / | ____ || | #
# ( ______/ |_| |_|\_____ || __/ (___/ |_____)|_| \_/ |_____)|_| #
# |_| #
# #
# Snapserver config file #
# #
###############################################################################

# default values are commented
# uncomment and edit to change them

# Settings can be overwritten on command line with:
# "--<section>.<name>=<value>", e.g. --server.threads=4

# General server settings #####################################################
#
[server]
# Number of additional worker threads to use
# - For values < 0 the number of threads will be 2 (on single and dual cores)
# or 4 (for quad and more cores)
# - 0 will utilize just the processes main thread and might cause audio drops
# in case there are a couple of longer running tasks, such as encoding
# multiple audio streams
#threads = -1

# the pid file when running as daemon
#pidfile = /var/run/snapserver/pid

# the user to run as when daemonized
#user = snapserver
# the group to run as when daemonized
#group = snapserver

# directory where persistent data is stored (server.json)
# if empty, data dir will be
# - "/var/lib/snapserver/" when running as daemon
# - "$HOME/.config/snapserver/" when not running as daemon
#datadir =

#
###############################################################################

# HTTP RPC ####################################################################
#
[http]
# enable HTTP Json RPC (HTTP POST and websockets)
enabled = true

# address to listen on, can be specified multiple times
# use "0.0.0.0" to bind to any IPv4 address or :: to bind to any IPv6 address
# or "127.0.0.1" or "::1" to bind to localhost IPv4 or IPv6, respectively
# use the address of a specific network interface to just listen to and accept
# connections from that interface
bind_to_address = 0.0.0.0

# which port the server should listen to
#port = 1780

# serve a website from the doc_root location
# disabled if commented or empty
doc_root = /usr/share/snapserver/snapweb

# Hostname or IP under which clients can reach this host
# used to serve cached cover art
# use <hostname> as placeholder for your actual host name
#host = <hostname>

#
###############################################################################

# TCP RPC #####################################################################
#
[tcp]
# enable TCP Json RPC
enabled = true

# address to listen on, can be specified multiple times
# use "0.0.0.0" to bind to any IPv4 address or :: to bind to any IPv6 address
# or "127.0.0.1" or "::1" to bind to localhost IPv4 or IPv6, respectively
# use the address of a specific network interface to just listen to and accept
# connections from that interface
bind_to_address = 0.0.0.0

# which port the server should listen to
#port = 1705
#
###############################################################################

# Stream settings #############################################################
#
[stream]
# address to listen on, can be specified multiple times
# use "0.0.0.0" to bind to any IPv4 address or :: to bind to any IPv6 address
# or "127.0.0.1" or "::1" to bind to localhost IPv4 or IPv6, respectively
# use the address of a specific network interface to just listen to and accept
# connections from that interface
#bind_to_address = 0.0.0.0

# which port the server should listen to
#port = 1704

# source URI of the PCM input stream, can be configured multiple times
# The following notation is used in this paragraph:
# <angle brackets>: the whole expression must be replaced with your specific setting
# [square brackets]: the whole expression is optional and can be left out
# [key=value]: if you leave this option out, "value" will be the default for "key"
#
# Format: TYPE://host/path?name=<name>[&codec=<codec>][&sampleformat=<sampleformat>][&chunk_ms=<chunk ms>][&controlscript=<control script filename>]
# parameters have the form "key=value", they are concatenated with an "&" character
# parameter "name" is mandatory for all sources, while codec, sampleformat and chunk_ms are optional
# and will override the default codec, sampleformat or chunk_ms settings
# Non blocking sources support the dryout_ms parameter: when no new data is read from the source, send silence to the clients
# Available types are:
# pipe: pipe:///<path/to/pipe>?name=<name>[&mode=create][&dryout_ms=2000], mode can be "create" or "read"
# librespot: librespot:///<path/to/librespot>?name=<name>[&dryout_ms=2000][&username=<my username>&password=<my password>][&devicename=Snapcast][&bitrate=320][&wd_timeout=7800][&volume=100][&onevent=""][&nomalize=false][&autoplay=false][&params=<generic librepsot process arguments>]
# note that you need to have the librespot binary on your machine
# sampleformat will be set to "44100:16:2"
# file: file:///<path/to/PCM/file>?name=<name>
# process: process:///<path/to/process>?name=<name>[&dryout_ms=2000][&wd_timeout=0][&log_stderr=false][&params=<process arguments>]
# airplay: airplay:///<path/to/airplay>?name=<name>[&dryout_ms=2000][&port=5000]
# note that you need to have the airplay binary on your machine
# sampleformat will be set to "44100:16:2"
# tcp server: tcp://<listen IP, e.g. 127.0.0.1>:<port>?name=<name>[&mode=server]
# tcp client: tcp://<server IP, e.g. 127.0.0.1>:<port>?name=<name>&mode=client
# alsa: alsa://?name=<name>&device=<alsa device>[&send_silence=false][&idle_threshold=100][&silence_threshold_percent=0.0]
# meta: meta:///<name of source#1>/<name of source#2>/.../<name of source#N>?name=<name>
#source = pipe:///tmp/snapfifo?name=default
#source = tcp://127.0.0.1?name=mopidy_tcp
source = pipe:///tmp/snapfifo?name=Default&sampleformat=48000:16:2&controlscript=meta_mpd.py
#stream = pipe:///tmp/snapfifo?name=Default&sampleformat=48000:16:2&controlscript=meta_mpd.py

# Default sample format: <sample rate>:<bits per sample>:<channels>
#sampleformat = 48000:16:2

# Default transport codec
# (flac|ogg|opus|pcm)[:options]
# Start Snapserver with "--stream:codec=<codec>:?" to get codec specific options
#codec = flac

# Default source stream read chunk size [ms].
# The server will continously read this number of milliseconds from the source into buffer and pass this buffer to the encoder.
# The encoded buffer is sent to the clients. Some codecs have a higher latency and will need more data, e.g. Flac will need ~26ms chunks
#chunk_ms = 20

# Buffer [ms]
# The end-to-end latency, from capturing a sample on the server until the sample is played-out on the client
#buffer = 1000

# Send audio to muted clients
#send_to_muted = false
#
###############################################################################

# Logging options #############################################################
#
[logging]

# log sink [null,system,stdout,stderr,file:<filename>]
# when left empty: if running as daemon "system" else "stdout"
#sink =

# log filter <tag>:<level>[,<tag>:<level>]*
# with tag = * or <log tag> and level = [trace,debug,info,notice,warning,error,fatal]
filter = *:debug
#
###############################################################################

```

What I get in the Iris output panel :  
 ![iris_snap_output_panel](https://canada1.discourse-cdn.com/flex036/uploads/mopidy/original/2X/2/231a46f6633d10c496e57b5a323dadc9ef6298d6.png)

Although I am debug logging snapserver, I don’t have any clue about what to do to make it behave like in 3.61.1 :

![iris_snap_output_panel_2](https://canada1.discourse-cdn.com/flex036/uploads/mopidy/original/2X/a/a634dc6fea69a930a3f5eaff56a0676b5b2903d5.png)

Thanks for you reading,

LP

---

<div class="post-metadata">

**Author:** ![shadowking001](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.mopidy.com/shadowking001/32/2285_2.png) [@shadowking001](https://discourse.mopidy.com/u/shadowking001)\
**Post date:** [July 15, 2022, 5:56pm UTC](https://discourse.mopidy.com/t/iris-cant-figure-out-how-to-display-metadata-from-snapserver-post-3-61-1/5512/2 "2022-07-15T17:56:32Z")

</div>

Any idea anyone ? Still stucked.

---

<div class="post-metadata">

**Author:** ![jaedb](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.mopidy.com/jaedb/32/2340_2.png) [@jaedb](https://discourse.mopidy.com/u/jaedb)\
**Post date:** [July 30, 2022, 3:26am UTC](https://discourse.mopidy.com/t/iris-cant-figure-out-how-to-display-metadata-from-snapserver-post-3-61-1/5512/3 "2022-07-30T03:26:25Z")

</div>

Snapserver’s new `controlscript` now takes a more complete approach for what Iris was doing. In `3.61.1`, Iris maintained metadata updates and pushed these to the Snapserver’s `meta` attribute. Now, however, the API Iris used was deprecated in favour of `controlscript`.

Long story short, the next Snapserver release will bundle a Mopidy-tailored `mopidy_meta.py`. This will take care of most setups out-of-the-box. You’ll just need to update your stream to `controlscript=mopidy_meta.py` and you’ll be back in business. You can read more about this here: [meta\_mpd.py loses stable connection with MPD · Issue #997 · badaix/snapcast · GitHub](https://github.com/badaix/snapcast/issues/997)

If you simply cannot wait, download [`mopidy_meta.py`](https://github.com/badaix/snapcast/blob/develop/server/etc/plug-ins/meta_mopidy.py) and use it with the current version of Snapserver.

---

<div class="post-metadata">

**Author:** ![shadowking001](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.mopidy.com/shadowking001/32/2285_2.png) [@shadowking001](https://discourse.mopidy.com/u/shadowking001)\
**Post date:** [July 30, 2022, 7:37am UTC](https://discourse.mopidy.com/t/iris-cant-figure-out-how-to-display-metadata-from-snapserver-post-3-61-1/5512/4 "2022-07-30T07:37:29Z")

</div>

Thanks @jaedb, then I’ll just wait, my 3.61.1 setup is still perfectly functionnal at the moment.  
The topic can be closed.

---

<div class="post-metadata">

**Author:** ![system](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.mopidy.com/system/32/1_2.png) [@system](https://discourse.mopidy.com/u/system)\
**Post date:** [August 2, 2022, 7:37am UTC](https://discourse.mopidy.com/t/iris-cant-figure-out-how-to-display-metadata-from-snapserver-post-3-61-1/5512/5 "2022-08-02T07:37:48Z")

</div>

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.
