Jump to content

Air Date Fixer — Corrects upcoming dates for your timezone outside the US


Recommended Posts

Blueskies278
Posted (edited)

Currently Alpha, Not Yet Released

 

If you're outside the US, you've probably noticed some shows appear in your Upcoming/Latest lists a day early (or late) — a show airing at 8–10pm US Eastern actually lands in the early hours of the next day in UK/European time, but Emby often shows the raw US broadcast date instead.

I originally built this as a standalone Docker container/script. After 3 months of testing ironing out the bugs, I decided it was worth turning into a proper Emby plugin so it's easier to set up and run natively.

I'm now running the plugin version on my UGEEN iDX6011 Pro through about 4 weeks of real-world testing before considering a beta release. If there's genuine interest, I'll release the first beta once testing wraps up — just wanted to gauge interest and share what's coming.

Air Date Fixer corrects this automatically, using Trakt's timezone-aware broadcast schedule data:

  • Pulls each show's real broadcast timezone and converts it properly to your own local date
  • Only touches US/Canada-broadcast shows — everything else is left untouched
  • Works across three levels: episodes you already have files for, episodes already in your library without files yet, and future/upcoming episodes that only exist in cached metadata (so it also fixes what shows up under "Yesterday"/upcoming date headings, not just episode detail pages)
  • Runs automatically in the background — no manual scripts or cron jobs needed
  • Self-heals if Emby's own metadata refresh reverts a date

Requires a (free) Trakt account and API app (no VIP needed) — this is needed because Trakt is the only source that tells the plugin what time of day and timezone a show actually airs in (e.g. "8pm US Eastern"), which is the missing piece needed to work out whether it lands on a different calendar day once converted to your local time. Metadata sources like TMDB only give a plain date with no time/timezone attached, so there's nothing there to calculate the correction from.

AirDateFixer_ThumbImage.png

Screenshot 2026-07-11 at 13.19.51.png

Edited by Blueskies278
  • Like 1
sh0rty
Posted

Really interested. The upcomng section for non US users was always bothering me. There was a project almost a decade ago that replaced US airdates with european ones, but it unfortunately died.

  • Like 1
Blueskies278
Posted
9 hours ago, sh0rty said:

Really interested. The upcomng section for non US users was always bothering me. There was a project almost a decade ago that replaced US airdates with european ones, but it unfortunately died.

The date issues for non-US users also bothered me. Air Date Fixer is created from the ground up. The Alpha plugin is about 97% done, just a few more tweaks.😀

  • Like 1
Blueskies278
Posted

I’ve encountered a significant bug that requires a full rebuild. I apologize for the delay and will keep you updated on our progress.🙂

  • Like 1
Posted (edited)

Please note that Alpha 1 is in very early development. Unfortunately, it's only compatible with Emby Server version 4.9.5.0.

While I haven't encountered any issues with Alpha 1, there may be many bugs you might encounter with your setup. Please use with caution.

I'm currently working on a more robust version of the Air Date Fixer plugin, and it's looking very promising so far.

 

 

 

 

 

EmbyAirDateFixer.dll

Edited by Blueskies278
sh0rty
Posted (edited)

OK, I set everything up. But thhe Plugin does not work on my system. Airdates in TV Show Forecast did not change.

2026-07-27 11:26:21.347 Error App: [AirDateFixer] Failed to write external token backup to 'C:\Users\blingbling\AppData\Roaming\Emby-Server\programdata\plugins\AirDateFixerBackup' - fresh-install self-healing will not work until this path is writable
	*** Error Report ***
	Version: 4.9.5.0
	Command line: C:\Users\blingbling\AppData\Roaming\Emby-Server\system\EmbyServer.dll -service
	Operating system: Microsoft Windows 10.0.26200
	OS/Process: x64/x64
	Framework: .NET 8.0.27
	Runtime: C:/Users/blingbling/AppData/Roaming/Emby-Server/system/System.Private.CoreLib.dll
	Processor count: 4
	Data path: C:\Users\blingbling\AppData\Roaming\Emby-Server\programdata
	Application path: C:\Users\blingbling\AppData\Roaming\Emby-Server\system
	System.UnauthorizedAccessException: System.UnauthorizedAccessException: Access to the path 'C:\Users\blingbling\AppData\Roaming\Emby-Server\programdata\plugins\AirDateFixerBackup' is denied.
	   at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
	   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
	   at System.IO.File.WriteToFile(String path, FileMode mode, String contents, Encoding encoding)
	   at EmbyAirDateFixer.TraktEntryPoint.SaveTokens(TokenData tokens)
	Source: System.Private.CoreLib
	TargetSite: Microsoft.Win32.SafeHandles.SafeFileHandle CreateFile(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, System.IO.FileOptions)
	
2026-07-27 11:26:21.347 Info App: [AirDateFixer] === LoadOrSeedTokens returned: non-null ===
2026-07-27 11:26:21.347 Info App: [AirDateFixer] Starting refresh. Target timezone: W. Europe Standard Time
2026-07-27 11:26:21.902 Error App: [AirDateFixer] Failed to fetch episode from https://api.trakt.tv/shows/agatha-all-along/next_episode?extended=full
	*** Error Report ***
	Version: 4.9.5.0
	Command line: C:\Users\blingbling\AppData\Roaming\Emby-Server\system\EmbyServer.dll -service
	Operating system: Microsoft Windows 10.0.26200
	OS/Process: x64/x64
	Framework: .NET 8.0.27
	Runtime: C:/Users/blingbling/AppData/Roaming/Emby-Server/system/System.Private.CoreLib.dll
	Processor count: 4
	Data path: C:\Users\blingbling\AppData\Roaming\Emby-Server\programdata
	Application path: C:\Users\blingbling\AppData\Roaming\Emby-Server\system
	System.Text.Json.JsonReaderException: System.Text.Json.JsonReaderException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. LineNumber: 0 | BytePositionInLine: 0.
	   at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader& json, ExceptionResource resource, Byte nextByte, ReadOnlySpan`1 bytes)
	   at System.Text.Json.JsonDocument.Parse(ReadOnlySpan`1 utf8JsonSpan, JsonReaderOptions readerOptions, MetadataDb& database, StackRowStack& stack)
	   at System.Text.Json.JsonDocument.Parse(ReadOnlyMemory`1 utf8Json, JsonReaderOptions readerOptions, Byte[] extraRentedArrayPoolBytes, PooledByteBufferWriter extraPooledByteBufferWriter)
	   at System.Text.Json.JsonDocument.ParseAsyncCore(Stream utf8Json, JsonDocumentOptions options, CancellationToken cancellationToken)
	   at EmbyAirDateFixer.TraktEntryPoint.FetchAndCacheEpisode(String url, String tmdbId, TokenData tokens, TimeZoneInfo targetTz, String showTimezoneId)
	Source: System.Text.Json
	TargetSite: Void ThrowJsonReaderException(System.Text.Json.Utf8JsonReader ByRef, System.Text.Json.ExceptionResource, Byte, System.ReadOnlySpan`1[System.Byte])
	
2026-07-27 11:26:22.928 Error App: [AirDateFixer] Failed to fetch episode from https://api.trakt.tv/shows/ahsoka/next_episode?extended=full
	*** Error Report ***
	Version: 4.9.5.0
	Command line: C:\Users\blingbling\AppData\Roaming\Emby-Server\system\EmbyServer.dll -service
	Operating system: Microsoft Windows 10.0.26200
	OS/Process: x64/x64
	Framework: .NET 8.0.27
	Runtime: C:/Users/blingbling/AppData/Roaming/Emby-Server/system/System.Private.CoreLib.dll
	Processor count: 4
	Data path: C:\Users\blingbling\AppData\Roaming\Emby-Server\programdata
	Application path: C:\Users\blingbling\AppData\Roaming\Emby-Server\system
	System.Text.Json.JsonReaderException: System.Text.Json.JsonReaderException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. LineNumber: 0 | BytePositionInLine: 0.
	   at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader& json, ExceptionResource resource, Byte nextByte, ReadOnlySpan`1 bytes)
	   at System.Text.Json.JsonDocument.Parse(ReadOnlySpan`1 utf8JsonSpan, JsonReaderOptions readerOptions, MetadataDb& database, StackRowStack& stack)
	   at System.Text.Json.JsonDocument.Parse(ReadOnlyMemory`1 utf8Json, JsonReaderOptions readerOptions, Byte[] extraRentedArrayPoolBytes, PooledByteBufferWriter extraPooledByteBufferWriter)
	   at System.Text.Json.JsonDocument.ParseAsyncCore(Stream utf8Json, JsonDocumentOptions options, CancellationToken cancellationToken)
	   at EmbyAirDateFixer.TraktEntryPoint.FetchAndCacheEpisode(String url, String tmdbId, TokenData tokens, TimeZoneInfo targetTz, String showTimezoneId)
	Source: System.Text.Json
	TargetSite: Void ThrowJsonReaderException(System.Text.Json.Utf8JsonReader ByRef, System.Text.Json.ExceptionResource, Byte, System.ReadOnlySpan`1[System.Byte])

Clicking a Series Link form the error logs gives me this:
image.png.11db85fda3ec79f1a07c22caad9d1654.png

Edited by sh0rty
Blueskies278
Posted (edited)
7 hours ago, sh0rty said:

OK, I set everything up. But thhe Plugin does not work on my system. Airdates in TV Show Forecast did not change.

2026-07-27 11:26:21.347 Error App: [AirDateFixer] Failed to write external token backup to 'C:\Users\blingbling\AppData\Roaming\Emby-Server\programdata\plugins\AirDateFixerBackup' - fresh-install self-healing will not work until this path is writable
	*** Error Report ***
	Version: 4.9.5.0
	Command line: C:\Users\blingbling\AppData\Roaming\Emby-Server\system\EmbyServer.dll -service
	Operating system: Microsoft Windows 10.0.26200
	OS/Process: x64/x64
	Framework: .NET 8.0.27
	Runtime: C:/Users/blingbling/AppData/Roaming/Emby-Server/system/System.Private.CoreLib.dll
	Processor count: 4
	Data path: C:\Users\blingbling\AppData\Roaming\Emby-Server\programdata
	Application path: C:\Users\blingbling\AppData\Roaming\Emby-Server\system
	System.UnauthorizedAccessException: System.UnauthorizedAccessException: Access to the path 'C:\Users\blingbling\AppData\Roaming\Emby-Server\programdata\plugins\AirDateFixerBackup' is denied.
	   at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
	   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
	   at System.IO.File.WriteToFile(String path, FileMode mode, String contents, Encoding encoding)
	   at EmbyAirDateFixer.TraktEntryPoint.SaveTokens(TokenData tokens)
	Source: System.Private.CoreLib
	TargetSite: Microsoft.Win32.SafeHandles.SafeFileHandle CreateFile(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, System.IO.FileOptions)
	
2026-07-27 11:26:21.347 Info App: [AirDateFixer] === LoadOrSeedTokens returned: non-null ===
2026-07-27 11:26:21.347 Info App: [AirDateFixer] Starting refresh. Target timezone: W. Europe Standard Time
2026-07-27 11:26:21.902 Error App: [AirDateFixer] Failed to fetch episode from https://api.trakt.tv/shows/agatha-all-along/next_episode?extended=full
	*** Error Report ***
	Version: 4.9.5.0
	Command line: C:\Users\blingbling\AppData\Roaming\Emby-Server\system\EmbyServer.dll -service
	Operating system: Microsoft Windows 10.0.26200
	OS/Process: x64/x64
	Framework: .NET 8.0.27
	Runtime: C:/Users/blingbling/AppData/Roaming/Emby-Server/system/System.Private.CoreLib.dll
	Processor count: 4
	Data path: C:\Users\blingbling\AppData\Roaming\Emby-Server\programdata
	Application path: C:\Users\blingbling\AppData\Roaming\Emby-Server\system
	System.Text.Json.JsonReaderException: System.Text.Json.JsonReaderException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. LineNumber: 0 | BytePositionInLine: 0.
	   at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader& json, ExceptionResource resource, Byte nextByte, ReadOnlySpan`1 bytes)
	   at System.Text.Json.JsonDocument.Parse(ReadOnlySpan`1 utf8JsonSpan, JsonReaderOptions readerOptions, MetadataDb& database, StackRowStack& stack)
	   at System.Text.Json.JsonDocument.Parse(ReadOnlyMemory`1 utf8Json, JsonReaderOptions readerOptions, Byte[] extraRentedArrayPoolBytes, PooledByteBufferWriter extraPooledByteBufferWriter)
	   at System.Text.Json.JsonDocument.ParseAsyncCore(Stream utf8Json, JsonDocumentOptions options, CancellationToken cancellationToken)
	   at EmbyAirDateFixer.TraktEntryPoint.FetchAndCacheEpisode(String url, String tmdbId, TokenData tokens, TimeZoneInfo targetTz, String showTimezoneId)
	Source: System.Text.Json
	TargetSite: Void ThrowJsonReaderException(System.Text.Json.Utf8JsonReader ByRef, System.Text.Json.ExceptionResource, Byte, System.ReadOnlySpan`1[System.Byte])
	
2026-07-27 11:26:22.928 Error App: [AirDateFixer] Failed to fetch episode from https://api.trakt.tv/shows/ahsoka/next_episode?extended=full
	*** Error Report ***
	Version: 4.9.5.0
	Command line: C:\Users\blingbling\AppData\Roaming\Emby-Server\system\EmbyServer.dll -service
	Operating system: Microsoft Windows 10.0.26200
	OS/Process: x64/x64
	Framework: .NET 8.0.27
	Runtime: C:/Users/blingbling/AppData/Roaming/Emby-Server/system/System.Private.CoreLib.dll
	Processor count: 4
	Data path: C:\Users\blingbling\AppData\Roaming\Emby-Server\programdata
	Application path: C:\Users\blingbling\AppData\Roaming\Emby-Server\system
	System.Text.Json.JsonReaderException: System.Text.Json.JsonReaderException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. LineNumber: 0 | BytePositionInLine: 0.
	   at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader& json, ExceptionResource resource, Byte nextByte, ReadOnlySpan`1 bytes)
	   at System.Text.Json.JsonDocument.Parse(ReadOnlySpan`1 utf8JsonSpan, JsonReaderOptions readerOptions, MetadataDb& database, StackRowStack& stack)
	   at System.Text.Json.JsonDocument.Parse(ReadOnlyMemory`1 utf8Json, JsonReaderOptions readerOptions, Byte[] extraRentedArrayPoolBytes, PooledByteBufferWriter extraPooledByteBufferWriter)
	   at System.Text.Json.JsonDocument.ParseAsyncCore(Stream utf8Json, JsonDocumentOptions options, CancellationToken cancellationToken)
	   at EmbyAirDateFixer.TraktEntryPoint.FetchAndCacheEpisode(String url, String tmdbId, TokenData tokens, TimeZoneInfo targetTz, String showTimezoneId)
	Source: System.Text.Json
	TargetSite: Void ThrowJsonReaderException(System.Text.Json.Utf8JsonReader ByRef, System.Text.Json.ExceptionResource, Byte, System.ReadOnlySpan`1[System.Byte])

Clicking a Series Link form the error logs gives me this:
image.png.11db85fda3ec79f1a07c22caad9d1654.png

So sorry for the delay! The new version is a total rewrite with a completely different approach—I genuinely thought it would take weeks. Somehow I've made amazing progress and am just fixing a few minor bugs now. Fingers crossed! If all goes well, V2 will be up in a few hours. I can see why the other developer abandoned his project. This project is very complicated but I'm not going to give up.😀

Edited by Blueskies278
  • Like 1
Blueskies278
Posted (edited)

@sh0rty

Almost done, just cleaning up V2! I was going to give it a few more days of testing, but if you're eager to try it out, let me know and I'll upload it soon—as soon as I finish rewriting the new Air Date Fixer document. Update: Discovered a new bug.

Edited by Blueskies278
Posted
3 hours ago, Blueskies278 said:

@sh0rty

Almost done, just cleaning up V2! I was going to give it a few more days of testing, but if you're eager to try it out, let me know and I'll upload it soon—as soon as I finish rewriting the new Air Date Fixer document. Update: Discovered a new bug.

Now that Trakt only allows one device without VIP, have you thought about using Simkl? It seems they also provide region based Release Data on the Web page. The API provides broadcast data not as region based but ISO with Offset, but couldn't that be converted by the plugin based on the timezone setting set in it? Souce -> https://api.simkl.org/conventions/dates

    {
        "title": "Faceless Men",
        "description": "While Rhaenyra and Daemon focus on how best to deal with Ormund, tensions among their neglected allies begin to erupt.",
        "season": 3,
        "episode": 6,
        "type": "episode",
        "aired": true,
        "img": "20\/203532593c102da18e",
        "date": "2026-07-26T21:00:00-04:00",
        "ids": {
            "simkl_id": 14767323
        }
    }




 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...