Itemized movies
Mini poster, movie title, Rotten Tomatoes critic score, and audience score.
A guided operating manual for installing, verifying, previewing, testing, scheduling, and safely maintaining TautWeekly for Plex Portable v1.6.11 on Windows.
PS C:\TautWeekly> .\01-VERIFY-SETUP.bat [OK] Windows PowerShell 5.1+ [OK] config.json validated [OK] Tautulli API connected [OK] SMTP endpoint reachable [OK] Animated assets ready [OK] Schedule syntax valid NEXT: .\05-PREVIEW-ALL-EMAIL-TYPES.bat No Plex user email is sent by this step. PS C:\TautWeekly> |
Plex and Tautulli may be local, remote, Linux, NAS-hosted, or containerized. TautWeekly for Plex itself runs on Windows.
The included BAT files and scheduler installer are Windows-only. The Plex server and Tautulli do not have to run on the same computer.
Use a LAN URL such as http://media.example.test:8181 when Tautulli runs elsewhere.
The safe sequence moves from local validation to TestEmail before any production recipient or scheduler is touched.
Recommended examples: C:\TautWeekly or D:\Apps\TautWeekly. Do not run from inside the ZIP.
00-SETUP-FIRST.bat
After entering the Tautulli URL and API key, select any numbered users to exclude from weekly delivery.
01-VERIFY-SETUP.bat
02-LIST-USERS.bat 14-MANAGE-USER-EXCLUSIONS.bat
The second launcher updates only stable Tautulli IDs; it does not rerun SMTP or schedule setup.
03-PREVIEW-NEWSLETTER.bat 04-SEND-TEST.bat 05-PREVIEW-ALL-EMAIL-TYPES.bat 06-SEND-TEST-ALL-EMAIL-TYPES.bat
08-INSTALL-SCHEDULE.bat 09-VERIFY-SCHEDULE.bat
Automation exists only after you explicitly run 08-INSTALL-SCHEDULE.bat.
Each launcher has one job and an explicit risk boundary.
| Launcher | Purpose | Delivery risk |
|---|---|---|
| 00-SETUP-FIRST.bat | Guided setup; creates or intentionally rebuilds config.json with backup protection. | No email |
| 01-VERIFY-SETUP.bat | Checks Windows, config, Tautulli, SMTP reachability, assets, and schedule syntax. | No email |
| 02-LIST-USERS.bat | Shows user IDs, names, emails, active state, and notification eligibility. | No email |
| 03-PREVIEW-NEWSLETTER.bat | Builds the selected user’s current real branch as local HTML. | No email |
| 04-SEND-TEST.bat | Sends one simulated user newsletter through real SMTP to TestEmail only. | TestEmail only |
| 05-PREVIEW-ALL-EMAIL-TYPES.bat | Creates six deterministic local regression previews plus an index. | No email |
| 06-SEND-TEST-ALL-EMAIL-TYPES.bat | Sends all six regression states through the real MIME/CID pipeline to TestEmail. | TestEmail only |
| 07-SEND-WELCOME-NOW.bat | Sends a real one-off welcome to one selected Plex user and records welcome state. | Real recipient |
| 08-INSTALL-SCHEDULE.bat | Creates or replaces the configurable Windows Scheduled Task. | Automation change |
| 09-VERIFY-SCHEDULE.bat | Reads the task definition, trigger, executable, arguments, and next run. | No email |
| 10-REMOVE-SCHEDULE.bat | Deletes the TautWeekly for Plex Scheduled Task only. | Automation change |
| 11-SEND-ALL-NOW.bat | Runs a confirmed real newsletter send to every eligible user. | Bulk send |
| 12-VIEW-ACCESS-ROSTER.bat | Shows first-seen and welcome-state tracking. | No email |
| 13-REPAIR-MOVIE-TV-ASSETS.bat | Repairs required animated and email-safe local assets. | No email |
| 14-MANAGE-USER-EXCLUSIONS.bat | Shows the live Tautulli roster and updates only ExcludedUserIds. | Config only |
| TEST-FIRST.bat | Convenience entry point for safe verification/testing guidance. | No production mail |
Only the Windows runner is local. The media stack may live anywhere reachable on your LAN.
http://127.0.0.1:8181 is correct only when Tautulli runs on the same Windows host.
Use the remote host’s LAN address and published Tautulli port.
Direct Plex metadata can improve clearLogo support but is not required for newsletter operation.
"TautulliUrl": "http://media.example.test:8181"
The setup wizard writes these values to config.json and offers an interactive exclusion roster after the Tautulli connection; the distributed ZIP includes placeholders only.
From name/address, Reply-To, SMTP host, STARTTLS port, authentication, password, and TestEmail.
Tautulli URL/API key, history days, watched threshold, minimum episode duration, and optional Plex URL/token.
Excluded users/emails, schedule day/time, task name, production delay, and recent-access window.
| Setting | Meaning | Typical default |
|---|---|---|
| MaxMovies | Maximum normal New Releases movie cards. | 8 |
| MaxTv | Maximum normal New Releases TV cards. | 8 |
| DaysBack | Rolling calendar-day activity/release window. | 7 |
| RecentAccessDays | Window used to classify a newly detected user. | 7 |
| SendDelaySeconds | Pause between production recipients. | 10 |
| TestSendDelaySeconds | Pause between the six TestEmail regression messages. | 2 |
| ScheduleDay / ScheduleTime | Weekly local task trigger and email wording. | Friday / 09:30 |
Edit the live config.json, not config.example.json, after installation.
Run 14-MANAGE-USER-EXCLUSIONS.bat, choose comma-separated rows or ranges, press Enter to keep the current list, or type none to clear it. Treat displayed names and emails as private.
Every variant uses the same production renderer. There is no separate stale design-preview engine.
One-off onboarding without weekly stats, quiet copy, or warm-up copy.
WELCOMEONLY = TRUEFirst scheduled newsletter with onboarding replacing empty stats.
RECENTACCESS + ZEROFirst scheduled newsletter with populated personalized statistics.
RECENTACCESS + ACTIVITYPopulated established-user branch; sample stats are used only when necessary for visual testing.
NORMAL ACTIVITYZero activity after warm-up, showing “QUIET IN THIS SECTOR.”
WARMINGUP = FALSEZero activity during the initial system window, showing “STATS ARE WARMING UP.”
WARMINGUP = TRUEoutput\preview-all-00-INDEX.html output\preview-all-01-manual-welcome.html output\preview-all-02-new-user-no-history.html output\preview-all-03-new-user-with-history.html output\preview-all-04-normal-newsletter.html output\preview-all-05-established-quiet.html output\preview-all-06-established-warmup.html
All six real MIME/CID messages go exclusively to TestEmail; no selected Plex user receives them.
The final card additions apply to browser previews, TestEmail, welcome emails, normal newsletters, and quiet-week Latest Releases.
A short description begins after a consistently spaced genre and metadata block.
Genre appears directly under the title at 13px, font-weight 500, in the same muted color as description text. It shows the first two genres and adds , and more when more exist. No metadata means no empty row or spacing gap.
Only the three newest episode rows appear. Totals 1–3 show no footer; four shows 1 additional episode recently added; five or more shows X additional episodes recently added.
The additional count equals the total qualifying recently added episodes for that series minus the three displayed rows.
The installer builds a folder-relative task using the configured day, time, and task name.
ScheduleDay, ScheduleTime, and ScheduledTaskName drive installation.
The task points at the actual extracted folder rather than a fixed path.
09-VERIFY-SCHEDULE.bat checks executable, arguments, trigger, and next run.
Replacing application files does not require reinstalling the task unless path or task configuration changes.
08-INSTALL-SCHEDULE.bat 09-VERIFY-SCHEDULE.bat 10-REMOVE-SCHEDULE.bat
Complete the six-state browser and TestEmail checks before installing automation.
Application files can be replaced; your live credentials and history must be preserved.
config.jsonstate.jsonaccess-state.jsonconfig.json may contain the Tautulli API key, SMTP password, and optional Plex token.
The package supports password/relay SMTP through .NET SmtpClient’s STARTTLS model.
01-VERIFY-SETUP.bat tests SMTP host/port reachability. 04-SEND-TEST.bat validates credentials, sender policy, and real delivery.
Start with verification, then isolate data, SMTP, or scheduler behavior.
127.0.0.1 only when Tautulli runs on the same Windows host.09-VERIFY-SCHEDULE.bat. Check the executable, arguments, working directory, configured task name, trigger time, and whether the install folder was moved after task creation.The shortest safe path from extraction to scheduled delivery.
00-SETUP-FIRST.bat 01-VERIFY-SETUP.bat 02-LIST-USERS.bat 03-PREVIEW-NEWSLETTER.bat 04-SEND-TEST.bat 05-PREVIEW-ALL-EMAIL-TYPES.bat 06-SEND-TEST-ALL-EMAIL-TYPES.bat 09-VERIFY-SCHEDULE.bat # Only after all tests are approved: 08-INSTALL-SCHEDULE.bat
Local HTML shows structure and conditional content without sending mail.
Real SMTP and MIME/CID delivery validates actual mail-client rendering.
Install automation only after browser and TestEmail approval.
TV cards retain three visible episode rows and now calculate overflow from all child episodes added inside the newsletter window—even when Tautulli reports one show or season row. Movie genre formatting remains exactly as approved below the title. Six-state regression, ratings, scheduling, SMTP, state, and recipient throttling remain intact.
Tautulli may return one show or season row even when many episodes were added. TautWeekly for Plex now validates the child episode timestamps instead of mistaking the three displayed rows for the full count.
The card continues to show only the three newest recently-added episodes.
Four total becomes 1 additional episode recently added. Five or more uses the exact remaining number.
More vertical space is reserved so a wrapped episode or IMDb line cannot clip the gold footer.
The approved muted 13px, weight-500 genre row remains directly beneath the movie title, with the first two genres and “, and more” when needed.
The same approved genre line is used on regular movie cards and on movie-based hero layouts, whether the desktop hero uses a clearLogo or a text-title fallback.
Normal-flow blocks replace the fixed-height inner table. The title and genre remain adjacent, followed by a controlled gap before ratings.
The genre appears immediately below the clearLogo—or immediately below the fallback text title when a logo is unavailable.
The mobile banner remains logo-free. The genre appears directly beneath the normal text title.
13px, weight 500, muted description color, first two genres plus “, and more,” and no empty gap when metadata is unavailable.
Movie title or clearLogo Horror, Mystery, and more 2026 [critic rating] [audience rating] Description…
Pressing Enter at the optional Plex-token prompt now returns a blank value rather than terminating the setup wizard.
The optional token can be skipped while retaining Tautulli and text-title fallbacks.
The guide now correctly lists normal, quiet, and warm-up alongside the three onboarding states.
This cleanup does not alter newsletter content, recipients, state, SMTP, or scheduling.
Light viewing weeks reveal more detail without making heavy viewing weeks excessively tall.
Mini poster, movie title, Rotten Tomatoes critic score, and audience score.
Mini show poster, show title, Sxx EPxx episode title, and IMDb score.
At four or more, the card returns to the large-number format to protect email length.
The user with the most qualifying watch time wins; total plays break an exact-time tie. Every scheduled weekly email shows the same anonymous movie-play, TV-play, and total-time aggregate. Only the winner’s card receives the gold border, larger trophy, and “YOU WON” treatment.
Trending ranks a media title and displays its server-wide play count once. Binge Champion ranks a person by qualifying watch time, but never reveals that person’s name, user ID, or watched titles.
The compact 1–3 movie recap now matches the rest of the newsletter’s movie hierarchy.
Each row includes a mini poster, title, genre, and Rotten Tomatoes critic and audience scores.
Show the first two genres and append “, and more” when additional genres exist.
When metadata has no genre, the rating line moves up automatically with no blank space.
This includes production and portable previews, individual tests, six-state test suites, scheduled weekly newsletters, and all applicable recipient states.
Exactly one watched movie or one streamed episode no longer becomes a scalar under strict mode.
MovieItems and EpisodeItems are initialized and assigned explicitly as arrays before the adaptive renderer checks their counts.
Retains a valid zero-length array.
Remains an array instead of being unwrapped into a scalar.
Continues to render the adaptive poster rows normally.