Commit Graph

2788 Commits

Author SHA1 Message Date
Christian Benincasa
073cd58d51 Merge remote-tracking branch 'origin/main' into dev v1.3.0-dev.1 2026-03-27 15:24:37 -04:00
Christian Benincasa
5af3c93dda fix: invalidate channel query after saving edit channel form
Fixes: #1742
2026-03-27 14:03:45 -04:00
Christian Benincasa
89eb55c82c fix: parse tvshow.uniqueid tag as array in nfo parser
Fixes: #1749
2026-03-27 13:47:56 -04:00
Christian Benincasa
00eda6d78c feat: native playback API (#1718) 2026-03-27 12:52:54 -04:00
Christian Benincasa
3e8f944055 refactor: type consolidation part 1 (#1740)
Consolidates the ContentProgram type with the new Program API types. A
ContentProgram now reuses the new types. This is the beginning of a
massive simplification of API types and many code paths around Tunarr
2026-03-27 12:08:38 -04:00
Christian Benincasa
3af479008b fix: add more randomness to filler picker (#1746)
Rework the filler picker to add more randomness and better weighting
behavior. Specifically:

1. Shuffle incoming filler lists
2. Filler weights only added to sampling if they have a program that can
   fit in the requested time slot
3. Once a list is chosen, we shuffle the programs within that list
4. The rest of the algorithm remains the same with weighted sampling of
   programs with slight adjustments based on last-seen and duration.
v1.2.7
2026-03-27 12:08:26 -04:00
Christian Benincasa
7e99d6f015 Merge remote-tracking branch 'origin/main' into dev 2026-03-27 11:56:56 -04:00
Corey Vaillancourt
18dd66cb6e fix: improve user experience of bottom navigation (#1739)
This change improves bottom navigation in the following ways:
- Adds labels and proper ARIA handling
- Highlights active item (including related subpages)
- Adds badge support from System page
- Fixes to stay above page content.

Co-authored-by: Corey Vaillancourt <coreyjv@gmail.com>
2026-03-27 11:49:24 -04:00
Jason Dove
29b635e89c fix: aresample requires hz, so convert from khz (#1745)
* fix: aresample requires hz, so convert from khz

* fix: always send khz to loudnorm filter; convert inside
2026-03-26 19:35:19 -04:00
Corey Vaillancourt
ba5b64c78c feat: add WebVTT sidecar subtitle support for HLS streams (#1734) 2026-03-26 16:17:15 -04:00
Corey Vaillancourt
e76528ef69 chore: ignore files generated from JetBrains IDEs (#1735) 2026-03-24 20:04:07 -04:00
Corey Vaillancourt
ccd072fe02 fix: improve mobile container size on small devices (#1738) 2026-03-24 20:03:20 -04:00
Corey Vaillancourt
f4efbf315b feat: serve HLS master playlist via FFmpeg -master_pl_name (#1731)
* feat: serve HLS master playlist via FFmpeg -master_pl_name

Switch the primary HLS endpoint to return a master playlist(playlist.m3u8)
generated by FFmpeg, with the variant playlist(stream.m3u8) served from
the /{sessionType}/stream.m3u8 sub-path.

This is a prerequisite for adding WebVTT subtitle tracks via
#EXT-X-MEDIA tags in the master playlist.

- Add -master_pl_name playlist.m3u8 to HlsOutputFormat and
HlsDirectOutputFormat so FFmpeg writes both playlists
- Track masterPlaylistPath in BaseHlsSession
- Add HlsSession.getMasterPlaylist() which reads playlist.m3u8
and rewrites the relative stream.m3u8 URI to an absolute server path
- streamApi: serve master playlist at /:id.m3u8; serve trimmed variant
playlist when clients request /:id/:sessionType/stream.m3u8
- Add unit tests for both output format classes and getMasterPlaylist()

* fix: use hls options instead of hardcoded stream name

---------

Co-authored-by: Corey Vaillancourt <coreyjv@gmail.com>
2026-03-24 10:33:54 -04:00
www2000
1fb1e538ce fix: add 480p descriptions and add 576p resolution
Updated descriptions for 720x480 to include NTSC and add 720x576 resolutions for pal broadcasts.
2026-03-23 12:45:39 -04:00
Christian Benincasa
3f5e536d71 fix: allow more granular trust proxy settings
Allow setting all variant of supported trust proxy settings from
https://fastify.dev/docs/latest/Reference/Server/#trustproxy, except for
a custom function. Allows for specifying >=1 IP or CIDR ranges, n-th hop
trust.
2026-03-23 12:31:19 -04:00
Christian Benincasa
c98fc89233 refactor: add log line for scanning so it is clear 2026-03-23 10:44:45 -04:00
Christian Benincasa
87974b629c test: add "integration" style tests that check basic transcoding pipelines 2026-03-23 10:41:06 -04:00
Christian Benincasa
7ab2d5773d refactor: explicit return types for static loggers 2026-03-23 10:38:25 -04:00
Corey Vaillancourt
fadabc6fb8 fix: lazy initialize logger so logging works
Logging wasn't working because they were using a static field initializer
which ran before the logger factory was initialized. Switch to a lazy
initialization so it's initialized on first use and logs with
the defined root logger.
2026-03-23 10:38:25 -04:00
Christian Benincasa
ddd2613735 fix: allow unsetting loudnorm config v1.2.6 2026-03-20 16:42:04 -04:00
Christian Benincasa
464de4ce71 fix: enable passing loudnorm params to ffmpeg pipeline v1.2.5 2026-03-20 16:31:24 -04:00
Christian Benincasa
6123497f27 refactor: use lightweight bootstrap process when generating openapi 2026-03-19 16:27:14 -04:00
Christian Benincasa
c3383272ae Merge remote-tracking branch 'origin/dev' 2026-03-19 16:00:24 -04:00
Christian Benincasa
2a37f88047 chore: upgrade versions of a various github actions 2026-03-19 15:52:57 -04:00
Christian Benincasa
2ea5565c37 test: fix tests for filler picker bug v1.2.4 2026-03-19 15:44:22 -04:00
Christian Benincasa
66b2676233 chore: fix build 2026-03-19 15:44:22 -04:00
Christian Benincasa
1c39f48288 fix: ensure effective "now" timestamp passed to filler picker
wall clock time is not necessarily stream time now due to workahead
2026-03-19 15:44:22 -04:00
Christian Benincasa
d3529f2c6f fix: properly calculator time since for filler list cooldowns
this is a side effect of the previous units mismatch bug
2026-03-19 15:44:22 -04:00
Christian Benincasa
cd488cd259 fix: ensure hardware padded vaapi pipelines hwdownload before watermark overlay 2026-03-19 15:44:22 -04:00
Christian Benincasa
d80863c2b9 fix: properly count discontinuity sequences without parsing master playlist 2026-03-19 15:44:22 -04:00
Christian Benincasa
8933b9873b chore: update hls.js to latest version 2026-03-19 15:44:22 -04:00
Christian Benincasa
0c8a5b7aed refactor: downgrade log level for meilisearch task watcher 2026-03-19 14:53:07 -04:00
Christian Benincasa
4abd307b06 fix: actually specify pad_opencl filter 2026-03-19 10:44:45 -04:00
Christian Benincasa
12cccc1540 fix: remove built-in changelog from system page 2026-03-18 16:15:43 -04:00
Christian Benincasa
70b430f470 fix: better unparseable smart collection parse handling
Ensures that stateful errors are checked in the mutex block
2026-03-18 13:12:52 -04:00
Christian Benincasa
9affa59cf8 fix: properly preview channel icon for watermark when none is set
Fixes: #1668
2026-03-18 12:16:25 -04:00
Christian Benincasa
c07cd898c9 fix: ensure no empty discontinuity periods in generated playlists (#1722) v1.2.3 2026-03-18 11:28:19 -04:00
Christian Benincasa
b74ad3d619 fix: properly convert per-filler-list cooldown to millis 2026-03-18 11:26:58 -04:00
Christian Benincasa
e5e8d7353b fix: ensure no empty discontinuity periods in generated playlists 2026-03-18 10:12:51 -04:00
Christian Benincasa
eb898c253f fix: explicitly upload software overlay frames in QSV pipeline
Also removes erroneous gpu_copy option
2026-03-17 21:55:22 -04:00
Christian Benincasa
dff248fefd fix: use system fonts for error screen
Tunarr does not package font files anymore
2026-03-17 21:55:22 -04:00
Christian Benincasa
f1e80316e8 build: add shell.nix for local development (#1721)
Adds `shell.nix` with dependencies required for local development, so I
don't need to have them installed globally.

Launch using `nix-shell`.

on linux:

```bash
% nix-shell
Tunarr dev environment
  node: v22.22.0
  pnpm: 10.28.0
  ffmpeg: ffmpeg version n7.1.1-56-gc2184b65d2-20250716 Copyright (c) 2000-2025 the FFmpeg developers

[nix-shell:~/code/tunarr]$
```

on mac:

```bash
% nix-shell
Tunarr dev environment
  node: v22.22.1
  pnpm: 10.28.0
  ffmpeg: ffmpeg version 7.1.3 Copyright (c) 2000-2025 the FFmpeg developers

[nix-shell:~/code/tunarr]$
```
2026-03-17 13:12:35 -04:00
Jason Dove
9139e49275 build: simplify shell.nix shell hook 2026-03-17 11:41:32 -05:00
Jason Dove
97ccbbf5e5 build: update shell.nix to use ffmpeg 7 2026-03-17 11:34:25 -05:00
Jason Dove
392d2282e8 build: add shell.nix for local development 2026-03-17 10:50:05 -05:00
Christian Benincasa
d7ed74e999 fix: remove minByIp segment mappings when clients disconnect v1.2.2 2026-03-16 13:37:15 -04:00
Christian Benincasa
71c245c36c fix: do not double-count discontinuities in HlsPlaylistMutator 2026-03-16 13:37:14 -04:00
Christian Benincasa
240a1db0c7 fix: vaapi tonemap pixel format fixes (#1720) 2026-03-16 12:24:55 -04:00
Christian Benincasa
56e3e25473 fix: custom show form state fixes
* Navigate back to custom shows table page after creating new custom
  show
* Properly clear form state after saving new custom show
* Properly update form state after updating existing custom show
2026-03-16 12:16:48 -04:00
Christian Benincasa
44602d651a test: fix TonemapVaapiFilter tests 2026-03-16 12:08:28 -04:00