Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/description_update.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ jobs:
context: .
push: true
tags: |
binarygeek119/posterr:latest
binarygeek119/posterr:${{ github.run_number }}
binarygeek119/posterrx:latest
binarygeek119/posterrx:${{ github.run_number }}
- name: Run a one-line script
run: echo Hello, world!
- name: Run a multi-line script
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@ jobs:
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: |
binarygeek119/posterr:testing
binarygeek119/posterr:${{ github.run_number }}
binarygeek119/posterrx:testing
binarygeek119/posterrx:${{ github.run_number }}
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ RUN apk add net-tools

ENV NODE_ENV=production

# Posterr talks to Plex, Jellyfin, Emby, and Kodi over HTTP(S) from settings (no extra image packages).
# PosterX talks to Plex, Jellyfin, Emby, and Kodi over HTTP(S) from settings (no extra image packages).
# In Docker, set the media server "host" to a container name on a shared network, or host.docker.internal
# (see docker-compose.yml extra_hosts and docker-compose.media-servers.example.yml).
#
Expand Down
62 changes: 32 additions & 30 deletions README.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion classes/core/posterMetadataDb.js
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ function logLegacySavedImageHint() {
if (n > 0) return;
console.log(
new Date().toLocaleString() +
" Posterr: cached images are still under saved/imagecache; move files to config/cache/imagecache (and mp3cache → config/cache/mp3cache), or copy your old saved/ tree into config/cache/."
" PosterX: cached images are still under saved/imagecache; move files to config/cache/imagecache (and mp3cache → config/cache/mp3cache), or copy your old saved/ tree into config/cache/."
);
} catch (e) {
/* ignore */
Expand Down
8 changes: 4 additions & 4 deletions classes/mediaservers/embyJellyfinBase.js
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ class EmbyJellyfinBase {
_mediaBrowserAuthorizationHeader(key) {
const ver = (posterrPackage && posterrPackage.version) || "1.0";
const tok = String(key).replace(/\\/g, "\\\\").replace(/"/g, '\\"');
return `MediaBrowser Client="Posterr", Device="Posterr", DeviceId="posterr", Version="${ver}", Token="${tok}"`;
return `MediaBrowser Client="PosterX", Device="PosterX", DeviceId="posterx", Version="${ver}", Token="${tok}"`;
}

/**
Expand Down Expand Up @@ -404,7 +404,7 @@ class EmbyJellyfinBase {
: "";
if (!key) {
throw new Error(
`${this.appName}: no API key in settings. Create one in the server dashboard (Jellyfin: Dashboard → API Keys) and paste it into Posterr’s server token field.`
`${this.appName}: no API key in settings. Create one in the server dashboard (Jellyfin: Dashboard → API Keys) and paste it into PosterX’s server token field.`
);
}
const params = { ...(options.params || {}) };
Expand Down Expand Up @@ -451,9 +451,9 @@ class EmbyJellyfinBase {
const status = e.response && e.response.status;
if (status === 401) {
if (this._usesLegacyEmbyTokenQueryAuth()) {
e.message += ` | ${this.appName}: HTTP 401 — wrong or revoked API key, or the key lacks access. Regenerate the key in the server dashboard and update Posterr. If you use a reverse proxy, ensure it forwards the X-Emby-Token header (Posterr also sends api_key on the query string).`;
e.message += ` | ${this.appName}: HTTP 401 — wrong or revoked API key, or the key lacks access. Regenerate the key in the server dashboard and update PosterX. If you use a reverse proxy, ensure it forwards the X-Emby-Token header (PosterX also sends api_key on the query string).`;
} else {
e.message += ` | Jellyfin: HTTP 401 — invalid or revoked API key (Dashboard → API Keys), or the server blocked the request. Posterr uses Authorization: MediaBrowser (required on Jellyfin 10.11+ when legacy X-Emby-Token is disabled). Ensure your reverse proxy forwards the Authorization header if you use one.`;
e.message += ` | Jellyfin: HTTP 401 — invalid or revoked API key (Dashboard → API Keys), or the server blocked the request. PosterX uses Authorization: MediaBrowser (required on Jellyfin 10.11+ when legacy X-Emby-Token is disabled). Ensure your reverse proxy forwards the Authorization header if you use one.`;
}
}
const d = e.response && e.response.data;
Expand Down
Binary file modified config/posterr-poster-metadata.db
Binary file not shown.
2 changes: 1 addition & 1 deletion docker-compose.debug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ version: "3.8"

services:
posterr:
image: posterr
image: posterrx
build:
context: .
dockerfile: ./Dockerfile
Expand Down
10 changes: 5 additions & 5 deletions docker-compose.media-servers.example.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
# Example: Posterr + Jellyfin on one Docker network.
# Example: PosterX + Jellyfin on one Docker network.
# Copy to docker-compose.override.yml or merge into your stack, then:
# docker compose -f docker-compose.yml -f docker-compose.media-servers.example.yml up -d
#
# If you use this file without docker-compose.yml, add volume mounts for Posterr:
# If you use this file without docker-compose.yml, add volume mounts for PosterX:
# config → /usr/src/app/config
# config → /usr/src/app/config (includes cache/, ads/, ads-view/, poster DBs, etc.)
#
# Posterr settings:
# PosterX settings:
# Server type: Jellyfin
# Host: jellyfin (service name — NOT localhost)
# Port: 8096
# API key: (from Jellyfin Dashboard → API Keys)
# Libraries: names of your Jellyfin libraries (comma-separated)
#
# Emby: use image emby/embyserver (or linuxserver/emby), service name e.g. emby, port 8096, API key in Emby.
# Kodi: usually on the Docker host or an HTPC — in Posterr settings use host.docker.internal (with extra_hosts in
# Kodi: usually on the Docker host or an HTPC — in PosterX settings use host.docker.internal (with extra_hosts in
# docker-compose.yml on Linux), or the host LAN IP. Port: Kodi HTTP control port (often 8080). Token: blank or user:pass.
# (Running Kodi inside Docker is uncommon; if you do, put Posterr on the same network and use the Kodi service name.)
# (Running Kodi inside Docker is uncommon; if you do, put PosterX on the same network and use the Kodi service name.)

version: "3.8"

Expand Down
8 changes: 4 additions & 4 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# Posterr — requires Docker Engine 20.10+ for host.docker.internal (Linux).
# Jellyfin / Emby / Kodi / Plex are reached over HTTP from Posterr settings (no extra container packages).
# PosterX — requires Docker Engine 20.10+ for host.docker.internal (Linux).
# Jellyfin / Emby / Kodi / Plex are reached over HTTP from PosterX settings (no extra container packages).
#
# Volumes:
# config/ — settings.json, cache/, ads/, ads-view/, custom-pictures/, SQLite DBs (mount whole config dir).
# Optional: public/custom — legacy uploads; on first run Posterr copies into config/ if those folders are empty.
# Optional: public/custom — legacy uploads; on first run PosterX copies into config/ if those folders are empty.

version: "3.8"

services:
posterr:
image: posterr
image: posterrx
container_name: posterr
build:
context: .
Expand Down
12 changes: 6 additions & 6 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ if(args.length == 2){
}

console.log("-------------------------------------------------------");
console.log(" POSTERR - Your media display");
console.log(" POSTERX - Your media display");
console.log(" Developed by Matt Petersen - Brisbane Australia");
console.log(" ");
console.log(" Version: " + pjson.version);
Expand Down Expand Up @@ -423,7 +423,7 @@ if (!fs.existsSync(dir)) {
fs.mkdirSync(dir);
}

// Prevent multiple Posterr processes from running at the same time.
// Prevent multiple PosterX processes from running at the same time.
const APP_LOCK_FILE = path.join(CONFIG_ROOT, "posterr-app.lock");
let appLockHeld = false;

Expand Down Expand Up @@ -471,13 +471,13 @@ function acquireAppLockOrExit() {
appLockHeld = true;
console.log(
new Date().toLocaleString() +
" Posterr: removed stale process lock and continued startup"
" PosterX: removed stale process lock and continued startup"
);
return;
}
console.log(
new Date().toLocaleString() +
" ✘✘ WARNING ✘✘ - Another Posterr instance is already running (pid " +
" ✘✘ WARNING ✘✘ - Another PosterX instance is already running (pid " +
lockPid +
"). Exiting this process."
);
Expand Down Expand Up @@ -3191,7 +3191,7 @@ async function startup(clearCache) {
console.log("");
}
else {
console.log("*** You are running the latest version of Posterr ***");
console.log("*** You are running the latest version of PosterX ***");
console.log("");
}
}
Expand Down Expand Up @@ -4488,7 +4488,7 @@ app.get(BASEURL + "/ads/data", (req, res) => {
}
});

// Used by the web client to check connection status to Posterr, and also to determine if there was a cold start that was missed
// Used by the web client to check connection status to PosterX, and also to determine if there was a cold start that was missed

app.get(BASEURL + "/conncheck", (req, res) => {
res.send({ "status": cold_start_time, "sleep": sleep });
Expand Down
2 changes: 1 addition & 1 deletion launch-posterr.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ $env:POSTERR_SYNC_DEBUG = "true"
$repoRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location $repoRoot

Write-Host "Starting Posterr from $repoRoot ..."
Write-Host "Starting PosterX from $repoRoot ..."
node ".\index.js"
2 changes: 1 addition & 1 deletion launch-posterr.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ export POSTERR_JELLYFIN_LIBRARY_FIRST_PAGE_TIMEOUT_MS="45000"
export POSTERR_JELLYFIN_LIBRARY_PAGE_LIMIT="150"
export POSTERR_SYNC_DEBUG="true"

echo "Starting Posterr from $SCRIPT_DIR ..."
echo "Starting PosterX from $SCRIPT_DIR ..."
node "./index.js"
2 changes: 1 addition & 1 deletion myviews/ads.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover">
<meta http-equiv="Cache-control" content="public">
<title>Posterr - Ads</title>
<title>PosterX - Ads</title>
<link rel="shortcut icon" type="image/png" href="<%=baseUrl%>/favicons/favicon.ico" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<link rel="stylesheet" href="<%=baseUrl%>/css/light.min.css">
Expand Down
11 changes: 6 additions & 5 deletions myviews/debug.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<html lang="en">
<!--
***********************************************************
* Posterr - Your home media display *
* PosterX - Your home media display *
* Developed by Matt Petersen - Brisbane, Australia *
***********************************************************
-->
Expand All @@ -22,17 +22,18 @@
<link rel="stylesheet" href="<%=baseUrl%>/css/light.min.css">
<!-- <script src="/js/script.js"></script> -->

<title>Posterr Debug Page</title>
<title>PosterX Debug Page</title>
<link rel="shortcut icon" type="image/png" href="<%=baseUrl%>/favicons/favicon.ico"/>
</head>

<body>
<h1> <i class="fal fa-debug" style="font-size: 48px; color:forestgreen;"></i> Posterr Debug Page</h1>
<h1> <i class="fal fa-debug" style="font-size: 48px; color:forestgreen;"></i> PosterX Debug Page</h1>
</br>
<p>Use this page to help debug any connectivity issues with Posterr</p>
<p>Use this page to help debug any connectivity issues with PosterX</p>
<p class="text-muted">Support (maintainer): <a href="https://discord.gg/vftKQvpT" target="_blank" rel="noopener noreferrer">Discord — discord.gg/vftKQvpT</a></p>
</br>
<h3>Software Version</h3>
<p>Posterr Verson: <%=version%></p>
<p>PosterX Verson: <%=version%></p>
</br>
<h3>Tests</h3>
<p class="text-muted">Open server logs for output. Media server tests match your <strong>Server type</strong> (Plex, Jellyfin, Emby, or Kodi). On-demand test lists libraries/sources, then up to 5 titles from the first — same idea as the legacy Plex check.</p>
Expand Down
4 changes: 2 additions & 2 deletions myviews/header.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<html lang="en">
<!--
***********************************************************
* Posterr - Your home media display *
* PosterX - Your home media display *
* Developed by Matt Petersen - Brisbane, Australia *
***********************************************************
-->
Expand Down Expand Up @@ -48,7 +48,7 @@
<style>.bannerBigText { color: <%=globals.titleColour%>; }</style>
<%}%>

<title>Posterr</title>
<title>PosterX</title>
<link rel="shortcut icon" type="image/png" href="<%=baseUrl%>/favicons/favicon.ico"/>
</head>
<body>
Expand Down
2 changes: 1 addition & 1 deletion myviews/index.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta http-equiv="Cache-control" content="public">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Posterr</title>
<title>PosterX</title>
<link rel="shortcut icon" type="image/png" href="<%=baseUrl%>/favicons/favicon.ico"/>
<style>
html, body {
Expand Down
7 changes: 4 additions & 3 deletions myviews/logon.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<html lang="en">
<!--
***********************************************************
* Posterr - Your home media display *
* PosterX - Your home media display *
* Developed by Matt Petersen - Brisbane, Australia *
***********************************************************
-->
Expand All @@ -24,7 +24,7 @@

<!-- <script src="/js/script.js"></script> -->

<title>Posterr - Settings Login</title>
<title>PosterX - Settings Login</title>
<link rel="shortcut icon" type="image/png" href="<%=baseUrl%>/favicons/favicon.ico" />
<style>
div {
Expand All @@ -40,8 +40,9 @@ color: whitesmoke;

<br class="container d-flex align-items-center justify-content-center no-content" style="position: fixed; position: 50%,50%">
<div style="color: lightgoldenrodyellow;">
<h1>Posterr Settings</h1>
<h1>PosterX Settings</h1>
<p class="lead">Media display software for Plex, Jellyfin, Emby, Kodi, Sonarr, Radarr, Lidarr, and Readarr.</p>
<p class="small"><a href="https://discord.gg/vftKQvpT" target="_blank" rel="noopener noreferrer">PosterX Discord (support)</a></p>
</div>

<form method="POST" action="<%=baseUrl%>/logon">
Expand Down
2 changes: 1 addition & 1 deletion myviews/now-showing.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover">
<meta http-equiv="Cache-control" content="public">
<title>Posterr - Now Showing</title>
<title>PosterX - Now Showing</title>
<link rel="shortcut icon" type="image/png" href="<%=baseUrl%>/favicons/favicon.ico" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<link rel="stylesheet" href="<%=baseUrl%>/css/light.min.css">
Expand Down
2 changes: 1 addition & 1 deletion myviews/posters/posters.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ function startInactivityCheck(element, delay, callbackInactivity, callbackActive

function noConnection() {
cardHtml = `<div class="container d-flex align-items-center justify-content-center no-content"><div class="d-flex">
<div class="settingsLink">Lost connectivity with Posterr server!</br>Attempting to restore connection..</div></div></div>`
<div class="settingsLink">Lost connectivity with PosterX server!</br>Attempting to restore connection..</div></div></div>`
$(".cardHolder").html(cardHtml);
$("body").css("background-color","black");
}
Expand Down
4 changes: 2 additions & 2 deletions myviews/settings-ads.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<link rel="stylesheet" href="<%=baseUrl%>/css/settings-styles.css">
<link rel="stylesheet" href="<%=baseUrl%>/css/light.min.css">
<link rel="stylesheet" href="<%=baseUrl%>/css/font-awesome.min.css">
<title>Posterr - ADS Settings</title>
<title>PosterX - ADS Settings</title>
<link rel="shortcut icon" type="image/png" href="<%=baseUrl%>/favicons/favicon.ico" />
</head>
<body>
Expand All @@ -20,7 +20,7 @@
<div class="container">
<nav aria-label="breadcrumb" class="main-breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="<%=baseUrl%>/">Posterr</a></li>
<li class="breadcrumb-item"><a href="<%=baseUrl%>/">PosterX</a></li>
<li class="breadcrumb-item"><a href="<%=baseUrl%>/settings">Settings</a></li>
<li class="breadcrumb-item active" aria-current="page">ADS</li>
</ol>
Expand Down
4 changes: 2 additions & 2 deletions myviews/settings-cache.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<link rel="stylesheet" href="<%=baseUrl%>/css/settings-styles.css">
<link rel="stylesheet" href="<%=baseUrl%>/css/light.min.css">
<link rel="stylesheet" href="<%=baseUrl%>/css/font-awesome.min.css">
<title>Posterr — Cache</title>
<title>PosterX — Cache</title>
<link rel="shortcut icon" type="image/png" href="<%=baseUrl%>/favicons/favicon.ico" />
<style>
.cache-chart-wrap { position: relative; height: 280px; max-width: 100%; }
Expand Down Expand Up @@ -59,7 +59,7 @@
<div class="container">
<nav aria-label="breadcrumb" class="main-breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="<%=baseUrl%>/">Posterr</a></li>
<li class="breadcrumb-item"><a href="<%=baseUrl%>/">PosterX</a></li>
<li class="breadcrumb-item"><a href="<%=baseUrl%>/settings">Settings</a></li>
<li class="breadcrumb-item active" aria-current="page">Cache</li>
</ol>
Expand Down
4 changes: 2 additions & 2 deletions myviews/settings-holidays.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="Cache-control" content="public">
<title>Posterr - Holidays Settings</title>
<title>PosterX - Holidays Settings</title>
<link rel="shortcut icon" type="image/png" href="<%=baseUrl%>/favicons/favicon.ico"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<link rel="stylesheet" href="<%=baseUrl%>/css/light.min.css">
Expand All @@ -18,7 +18,7 @@
<div class="container">
<nav aria-label="breadcrumb" class="main-breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="<%=baseUrl%>/">Posterr</a></li>
<li class="breadcrumb-item"><a href="<%=baseUrl%>/">PosterX</a></li>
<li class="breadcrumb-item"><a href="<%=baseUrl%>/settings">Settings</a></li>
<li class="breadcrumb-item active" aria-current="page">Holidays</li>
</ol>
Expand Down
6 changes: 3 additions & 3 deletions myviews/settings-now-showing.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<link rel="stylesheet" href="<%=baseUrl%>/css/settings-styles.css">
<link rel="stylesheet" href="<%=baseUrl%>/css/light.min.css">
<link rel="stylesheet" href="<%=baseUrl%>/css/font-awesome.min.css">
<title>Posterr — Now Showing Settings</title>
<title>PosterX — Now Showing Settings</title>
<link rel="shortcut icon" type="image/png" href="<%=baseUrl%>/favicons/favicon.ico" />
</head>
<body>
Expand All @@ -20,7 +20,7 @@
<div class="container">
<nav aria-label="breadcrumb" class="main-breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="<%=baseUrl%>/">Posterr</a></li>
<li class="breadcrumb-item"><a href="<%=baseUrl%>/">PosterX</a></li>
<li class="breadcrumb-item"><a href="<%=baseUrl%>/settings">Settings</a></li>
<li class="breadcrumb-item active" aria-current="page">Now Showing</li>
</ol>
Expand Down Expand Up @@ -70,7 +70,7 @@
<p class="small mb-3"><a class="font-weight-bold" href="<%=baseUrl%>/now-showing">Open dedicated Now Showing view</a></p>
<p class="text-muted small">This page uses its own database and powers the <a href="<%=baseUrl%>/now-showing"><code class="text-primary"><%=baseUrl%>/now-showing</code></a> screen view.</p>
<h5 class="mt-4">Home poster carousel</h5>
<p class="text-muted small mb-3">Optional: show your saved list as slides on the main Posterr page (<code><%=baseUrl%>/</code>). Requires at least one movie below with banner and logo (TMDB).</p>
<p class="text-muted small mb-3">Optional: show your saved list as slides on the main PosterX page (<code><%=baseUrl%>/</code>). Requires at least one movie below with banner and logo (TMDB).</p>
<form method="post" action="<%=baseUrl%>/settings/now-showing/screen" class="mb-4 pb-4 border-bottom">
<div class="form-check mb-2">
<input type="checkbox" class="form-check-input" id="nsListOnHome" name="enableNowShowingListInPoster" value="true" <%= settings.enableNowShowingListInPoster === "true" ? "checked" : "" %>>
Expand Down
Loading
Loading