Skip to content

Instantly share code, notes, and snippets.

@retrozenith
Last active January 26, 2026 20:01
Show Gist options
  • Select an option

  • Save retrozenith/947f062dbe0fd64c30577a3379df0d74 to your computer and use it in GitHub Desktop.

Select an option

Save retrozenith/947f062dbe0fd64c30577a3379df0d74 to your computer and use it in GitHub Desktop.
<?xml version="1.0"?>
<!-- StreamyStats Unraid Template -->
<!-- Created: 2025-01-26 -->
<!-- Source: https://github.com/fredrikburmester/streamystats -->
<!--
How to use:
1. wget -O /boot/config/plugins/dockerMan/templates-user/streamystats.xml "https://gist.githubusercontent.com/retrozenith/947f062dbe0fd64c30577a3379df0d74/raw/bf558d71197a03acf7ae76cf431530f3d4740216/unraid-streamystats-aio.xml"
2. Docker tab > Add Container > Select streamystats template
3. Change POSTGRES_PASSWORD and SESSION_SECRET (use: openssl rand -base64 32)
-->
<Container version="2">
<Name>streamystats</Name>
<Repository>fredrikburmester/streamystats-v2-aio:latest</Repository>
<Registry>https://hub.docker.com/r/fredrikburmester/streamystats-v2-aio</Registry>
<Network>bridge</Network>
<MyIP/>
<Shell>sh</Shell>
<Privileged>false</Privileged>
<Support>https://github.com/fredrikburmester/streamystats</Support>
<Project>https://github.com/fredrikburmester/streamystats</Project>
<Overview>StreamyStats is an advanced analytics and statistics platform for Jellyfin media servers. Track watch time, monitor live sessions, analyze user behavior, and get AI-powered recommendations. Features include comprehensive dashboards, library statistics, multi-server support, AI chat with your library, and data import from Jellystat and Playback Reporting Plugin. Built with Next.js, TypeScript, and includes PostgreSQL database (no external database required).</Overview>
<Category>MediaApp:Other Status:Stable</Category>
<WebUI>http://[IP]:[PORT:3000]</WebUI>
<TemplateURL/>
<Icon>https://raw.githubusercontent.com/fredrikburmester/streamystats/refs/heads/main/apps/nextjs-app/public/web-app-manifest-512x512.png</Icon>
<ExtraParams>--restart=unless-stopped</ExtraParams>
<PostArgs/>
<CPUset/>
<DateInstalled></DateInstalled>
<DonateText/>
<DonateLink/>
<Requires/>
<Config Name="WebUI Port" Target="3000" Default="3000" Mode="tcp" Description="Web interface port" Type="Port" Display="always" Required="true" Mask="false">3000</Config>
<Config Name="Data Directory" Target="/var/lib/postgresql/data" Default="/mnt/user/appdata/streamystats/data" Mode="rw" Description="PostgreSQL data storage" Type="Path" Display="always" Required="true" Mask="false">/mnt/user/appdata/streamystats/data</Config>
<Config Name="POSTGRES_USER" Target="POSTGRES_USER" Default="postgres" Mode="" Description="PostgreSQL username" Type="Variable" Display="always" Required="true" Mask="false">postgres</Config>
<Config Name="POSTGRES_PASSWORD" Target="POSTGRES_PASSWORD" Default="postgres" Mode="" Description="PostgreSQL password (change this!)" Type="Variable" Display="always" Required="true" Mask="true">postgres</Config>
<Config Name="POSTGRES_DB" Target="POSTGRES_DB" Default="streamystats" Mode="" Description="PostgreSQL database name" Type="Variable" Display="always" Required="true" Mask="false">streamystats</Config>
<Config Name="DATABASE_URL" Target="DATABASE_URL" Default="postgresql://postgres:postgres@localhost:5432/streamystats" Mode="" Description="Database connection URL (update if you changed user/password)" Type="Variable" Display="always" Required="true" Mask="false">postgresql://postgres:postgres@localhost:5432/streamystats</Config>
<Config Name="SESSION_SECRET" Target="SESSION_SECRET" Default="" Mode="" Description="Secret key for sessions (generate a random string)" Type="Variable" Display="always" Required="true" Mask="true"></Config>
<Config Name="NODE_ENV" Target="NODE_ENV" Default="production" Mode="" Description="Node environment" Type="Variable" Display="advanced" Required="false" Mask="false">production</Config>
<Config Name="SESSION_POLL_INTERVAL_MS" Target="SESSION_POLL_INTERVAL_MS" Default="5000" Mode="" Description="Session polling interval in milliseconds" Type="Variable" Display="advanced" Required="false" Mask="false">5000</Config>
<Config Name="CRON_ACTIVITY_SYNC" Target="CRON_ACTIVITY_SYNC" Default="*/1 * * * *" Mode="" Description="Activity sync schedule (cron format)" Type="Variable" Display="advanced" Required="false" Mask="false">*/1 * * * *</Config>
<Config Name="CRON_RECENT_ITEMS_SYNC" Target="CRON_RECENT_ITEMS_SYNC" Default="*/1 * * * *" Mode="" Description="Recent items sync schedule (cron format)" Type="Variable" Display="advanced" Required="false" Mask="false">*/1 * * * *</Config>
<Config Name="CRON_USER_SYNC" Target="CRON_USER_SYNC" Default="*/1 * * * *" Mode="" Description="User sync schedule (cron format)" Type="Variable" Display="advanced" Required="false" Mask="false">*/1 * * * *</Config>
<Config Name="CRON_PEOPLE_SYNC" Target="CRON_PEOPLE_SYNC" Default="*/15 * * * *" Mode="" Description="People sync schedule (cron format)" Type="Variable" Display="advanced" Required="false" Mask="false">*/15 * * * *</Config>
<Config Name="CRON_EMBEDDINGS_SYNC" Target="CRON_EMBEDDINGS_SYNC" Default="*/15 * * * *" Mode="" Description="Embeddings sync schedule (cron format)" Type="Variable" Display="advanced" Required="false" Mask="false">*/15 * * * *</Config>
<Config Name="CRON_GEOLOCATION_SYNC" Target="CRON_GEOLOCATION_SYNC" Default="*/5 * * * *" Mode="" Description="Geolocation sync schedule (cron format)" Type="Variable" Display="advanced" Required="false" Mask="false">*/5 * * * *</Config>
<Config Name="CRON_FINGERPRINT_SYNC" Target="CRON_FINGERPRINT_SYNC" Default="0 4 * * *" Mode="" Description="Fingerprint sync schedule (cron format)" Type="Variable" Display="advanced" Required="false" Mask="false">0 4 * * *</Config>
<Config Name="CRON_JOB_CLEANUP" Target="CRON_JOB_CLEANUP" Default="*/1 * * * *" Mode="" Description="Job cleanup schedule (cron format)" Type="Variable" Display="advanced" Required="false" Mask="false">*/1 * * * *</Config>
<Config Name="CRON_OLD_JOB_CLEANUP" Target="CRON_OLD_JOB_CLEANUP" Default="0 3 * * *" Mode="" Description="Old job cleanup schedule (cron format)" Type="Variable" Display="advanced" Required="false" Mask="false">0 3 * * *</Config>
<Config Name="CRON_FULL_SYNC" Target="CRON_FULL_SYNC" Default="0 2 * * *" Mode="" Description="Full sync schedule (cron format)" Type="Variable" Display="advanced" Required="false" Mask="false">0 2 * * *</Config>
<Config Name="CRON_DELETED_ITEMS_CLEANUP" Target="CRON_DELETED_ITEMS_CLEANUP" Default="0 * * * *" Mode="" Description="Deleted items cleanup schedule (cron format)" Type="Variable" Display="advanced" Required="false" Mask="false">0 * * * *</Config>
<Config Name="SKIP_STARTUP_FULL_SYNC" Target="SKIP_STARTUP_FULL_SYNC" Default="false" Mode="" Description="Skip full sync on startup (true/false)" Type="Variable" Display="advanced" Required="false" Mask="false">false</Config>
</Container>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment