Skip to content

Commit 2f58fd4

Browse files
committed
docs: clarify catalog and favorites rails
1 parent 9dd7d09 commit 2f58fd4

3 files changed

Lines changed: 62 additions & 4 deletions

File tree

AniLibertyStrmPlugin.Tests/BuildConfigurationTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,16 @@ public void PublicReadme_DocumentsOperationalCapabilities()
134134
{
135135
var root = FindRepoRoot();
136136
var readme = File.ReadAllText(Path.Combine(root, "README.md"));
137+
var configPage = File.ReadAllText(Path.Combine(root, "Configuration", "configPage.html"));
137138

138139
Assert.Contains("Append picked folder", readme, StringComparison.Ordinal);
140+
Assert.Contains("Full Catalog and Favorites Are Separate Rails", readme, StringComparison.Ordinal);
141+
Assert.Contains("Do not point **All Titles STRM Path** and **Favorites STRM Path** at the same directory", readme, StringComparison.Ordinal);
142+
Assert.Contains("Each output", readme, StringComparison.Ordinal);
143+
Assert.Contains("Running a scheduled task is not enough by itself", readme, StringComparison.Ordinal);
144+
Assert.Contains("If the matching enable flag is off", readme, StringComparison.Ordinal);
145+
Assert.Contains("Requires **Generate full catalog library** to be enabled", readme, StringComparison.Ordinal);
146+
Assert.Contains("Requires **Generate favorites library** to be enabled", readme, StringComparison.Ordinal);
139147
Assert.Contains("Mirror Governance, plain rule", readme, StringComparison.Ordinal);
140148
Assert.Contains("does not delete anything", readme, StringComparison.Ordinal);
141149
Assert.Contains("Existing `.nfo` files and artwork that were not generated by this plugin are preserved", readme, StringComparison.Ordinal);
@@ -145,6 +153,9 @@ public void PublicReadme_DocumentsOperationalCapabilities()
145153
Assert.Contains("Run manually through **Sync AniLiberty watch progress to Jellyfin**", readme, StringComparison.Ordinal);
146154
Assert.Contains("If the server has exactly one Jellyfin user", readme, StringComparison.Ordinal);
147155
Assert.Contains("Sync step (seconds)", readme, StringComparison.Ordinal);
156+
Assert.Contains("Do not reuse the favorites path", configPage, StringComparison.Ordinal);
157+
Assert.Contains("When OFF, the task exits without updating Favorites STRM Path", configPage, StringComparison.Ordinal);
158+
Assert.Contains("When OFF, the task exits without updating All Titles STRM Path", configPage, StringComparison.Ordinal);
148159
}
149160

150161
[Fact]

Configuration/configPage.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@ <h2 class="sectionTitle">
306306
</label>
307307
</div>
308308
<div class="fieldDescription picker-note">
309+
Use a dedicated full-catalog output root. Do not reuse the favorites path.
309310
The browser directory picker can only return the selected folder name.
310311
Enable append mode to add that folder name to the current path instead of replacing it.
311312
</div>
@@ -326,6 +327,7 @@ <h2 class="sectionTitle">
326327
</label>
327328
</div>
328329
<div class="fieldDescription picker-note">
330+
Use a dedicated favorites output root. Do not reuse the full-catalog path.
329331
The browser directory picker can only return the selected folder name.
330332
Enable append mode to add that folder name to the current path instead of replacing it.
331333
</div>
@@ -344,11 +346,17 @@ <h2 class="sectionTitle">
344346
<input id="EnableFavorites" is="emby-checkbox" type="checkbox">
345347
<span>Generate favorites library</span>
346348
</label>
349+
<div class="fieldDescription">
350+
Controls the Favorites scheduled task. When OFF, the task exits without updating Favorites STRM Path.
351+
</div>
347352

348353
<label class="checkboxContainer">
349354
<input id="EnableAll" is="emby-checkbox" type="checkbox">
350355
<span>Generate full catalog library</span>
351356
</label>
357+
<div class="fieldDescription">
358+
Controls the full-catalog scheduled task. When OFF, the task exits without updating All Titles STRM Path.
359+
</div>
352360

353361
<!-- All titles -->
354362
<fieldset>

README.md

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,38 @@ server path. For Docker and headless servers, type the real server-visible path
204204
**Append picked folder** only when the current text box already contains the parent path and you
205205
want the picker to append one child folder name.
206206

207+
### Full Catalog and Favorites Are Separate Rails
208+
209+
AniLiberty STRM Plugin deliberately writes the full catalog and favorites into different output
210+
roots:
211+
212+
- **All Titles STRM Path** is the full-catalog reconstruction rail.
213+
- **Favorites STRM Path** is the personal favorites reconstruction rail.
214+
215+
The rails are operated separately:
216+
217+
- **Generate full catalog library** enables or disables the full-catalog rail.
218+
- **Generate favorites library** enables or disables the favorites rail.
219+
- **Generate AniLiberty STRM library** updates only the full-catalog root.
220+
- **Generate AniLiberty STRM (Favorites Only)** updates only the favorites root and requires a valid
221+
AniLiberty token.
222+
223+
Running a scheduled task is not enough by itself. If the matching enable flag is off, or the matching
224+
path is empty, that task exits without generating files. Save plugin settings before running either
225+
task.
226+
227+
This is not duplication by accident. Favorites are often a smaller, authenticated operational
228+
surface that you may want to scan, schedule, or expose separately from the full catalog. In Jellyfin
229+
you can add them as two separate libraries, for example:
230+
231+
- `/media/aniliberty-strm/all`
232+
- `/media/aniliberty-strm/favorites`
233+
234+
Do not point **All Titles STRM Path** and **Favorites STRM Path** at the same directory. Each output
235+
root owns its own `.aniliberty-strm-plugin/manifest.json`; cleanup decisions are made per root. If
236+
both rails share one folder, one rail can treat the other rail's generated files as stale, especially
237+
when **Stale generated files** is set to `Delete managed stale files`.
238+
207239
Recommended first run:
208240

209241
1. Open **Dashboard → Plugins → AniLiberty STRM**.
@@ -223,14 +255,17 @@ The first successful run creates the governance manifest
223255
artwork, and skip-control files where the upstream signal contains them.
224256

225257
For favorites, complete **AniLiberty authentication** first, set **Favorites STRM Path** to a
226-
container-visible path such as `/media/aniliberty-strm/favorites`, then run
227-
**Generate AniLiberty STRM (Favorites Only)**.
258+
container-visible path such as `/media/aniliberty-strm/favorites`, keep **Generate favorites
259+
library** enabled, then run **Generate AniLiberty STRM (Favorites Only)**. Add that favorites path
260+
as a separate Jellyfin library if you want a dedicated favorites surface.
228261

229262
If the output directory stays empty, check these control points:
230263

231264
- The plugin path is the Docker container path, not the host path.
232265
- The mounted folder is writable by the Jellyfin container user.
233266
- The selected rail is enabled in plugin settings.
267+
- The scheduled task matches the path you expect: full catalog task writes only **All Titles STRM Path**,
268+
favorites task writes only **Favorites STRM Path**.
234269
- The scheduled task was run after saving settings.
235270
- Favorites generation has a valid AniLiberty token.
236271
- Playback clients can reach **Jellyfin Playback Proxy Base URL** if the playback proxy is enabled.
@@ -295,8 +330,8 @@ Open **Dashboard → Plugins → AniLiberty STRM**.
295330

296331
| Field | Meaning |
297332
|------------------------------|-------------------------------------------------------------------------|
298-
| **All Titles STRM Path** | Root for the full-catalog reconstruction rail. Leave empty to disable. |
299-
| **Favorites STRM Path** | Root for the favorites reconstruction rail. |
333+
| **All Titles STRM Path** | Dedicated root for the full-catalog reconstruction rail. Leave empty to disable. |
334+
| **Favorites STRM Path** | Dedicated root for the favorites reconstruction rail. Keep it separate from the full-catalog root. |
300335
| **Preferred Resolution** | HLS quality policy for STRM playback entries: 1080 / 720 / 480. |
301336
| **Generate favorites library** | Enables the favorites orchestration rail. |
302337
| **Generate full catalog library** | Enables the full-catalog orchestration rail. |
@@ -378,14 +413,18 @@ Three orchestration rails appear under **Dashboard → Scheduled Tasks → AniLi
378413

379414
1. **Full Catalog Reconstruction Rail**
380415
- Acquires the complete AniLiberty catalog signal from `/anime/catalog/releases`.
416+
- Requires **Generate full catalog library** to be enabled.
381417
- Applies `AllTitlesPageSize` and `AllTitlesMaxPages` as acquisition pressure controls.
382418
- Produces STRM playback entries, metadata, skip markers, thumbnails, and optional chapters
383419
under **All Titles STRM Path**.
420+
- Does nothing when **All Titles STRM Path** is empty.
384421
- By default runs **once per day**.
385422

386423
2. **Favorites Reconstruction Rail**
387424
- Requires a valid `AniLibertyToken`.
425+
- Requires **Generate favorites library** to be enabled.
388426
- Converts the authenticated favorites signal into the same governed media surface under **Favorites STRM Path**.
427+
- Does nothing when **Favorites STRM Path** is empty.
389428
- Has no default trigger; you can enable and schedule it as you like.
390429

391430
3. **Watch-State Recovery Rail**

0 commit comments

Comments
 (0)