Nucleus HTPC

1.1.9 Release:

  • Fixed several Remote Control Navigation and UX issues.

  • Added Binge-Watching custom overlay that checks your watch history and asks if you want to "Resume Where I Left Off" or "Start from the Beginning" when playing a TV show.

  • Added Collections page and Movies details overlay.

1 Like

Thank you for implementing Collections. When I chose collections it includes shows that have all been viewed and deleted.

I love the improvements I'm seeing Bobby

Morris

I'll add better sorting for next week. Thanks.

1 Like

Give me an idea of how you would like the collections to display and be sorted. Do you want the watched ones to not display when viewing the collections or just to have the ability to skip the watched ones? I only use collections for my grandkids movies so they can watch their movies one after the other in order. You know how kids are, they can watch the same thing 20 times. Give me an idea of how you use the collections. Thanks.

No dice on the Win11 machine. If it helps, I see this happening in Task Manager, like it's trying to start two of them at once until they start to cancel each other out like resonance and ultimately both close:

image

Here's some machine info...
Device name NEXUS-SHIP-11
Processor Intel(R) Pentium(R) Silver N5030 CPU @ 1.10GHz (1.10 GHz)
Installed RAM 8.00 GB (7.82 GB usable)
Graphics card Intel(R) UHD Graphics 605 (128 MB)
Storage 308 GB of 477 GB used
System type 64-bit operating system, x64-based processor
Pen and touch Touch support with 10 touch points
Edition Windows 11 Pro
Version 25H2
Installed on ‎7/‎20/‎2025
OS build 26200.8737
Experience Windows Feature Experience Pack 1000.26100.334.0

On the Win10 machine, I gave it a quick look and saw that collections were set up as rows instead of just continuing downward like TV Shows, which I'm more used to from a Channels UX perspective. And then in the rows, it was missing navigation arrows left/right like you have elsewhere when that is used, so I had to use touch to navigate.

For Collections I like them sorted by most recently updated. There is no reason to show a folder that has no recordings to show. I'm not a collector so I delete after viewing. Providing sorting options is probably best as others will probably want a different order.

Thank you,

Morris

If you close them both out, does it try to start up 2 again? Could you look in Event Viewer and see if the Application Logs have any errors related to it? Specifically .NET Runtime errors? Thanks.

Also, look of rogue mpv.exe instances running in Task Manager and exit them as well.

Instant errors upon starting...
<EventData>
  <Data Name="AppName">HTPC.exe</Data> 
  <Data Name="AppVersion">1.1.9.0</Data> 
  <Data Name="AppTimeStamp">6a0e0000</Data> 
  <Data Name="ModuleName">mpv-2.dll</Data> 
  <Data Name="ModuleVersion">2.0.0.0</Data> 
  <Data Name="ModuleTimeStamp">6a24b655</Data> 
  <Data Name="ExceptionCode">c000001d</Data> 
  <Data Name="FaultingOffset">00000000000b047a</Data> 
  <Data Name="ProcessId">0x262c</Data> 
  <Data Name="ProcessCreationTime">0x1dd108f26b76380</Data> 
  <Data Name="AppPath">C:\Users\...\NucleusHTPC\HTPC.exe</Data> 
  <Data Name="ModulePath">C:\Users\...\NucleusHTPC\mpv-2.dll</Data> 
  <Data Name="IntegratorReportId">24ba6323-769c-4d93-946c-493125a9dad6</Data> 
  <Data Name="PackageFullName" /> 
  <Data Name="PackageRelativeAppId" /> 
</EventData>
<EventData>
   <Data Name="**FilePath** " />
   <Data Name="**AppName** ">HTPC</Data>
   <Data Name="**StatusCode** ">0x0</Data>
   <Data Name="**MediumType** ">0x0</Data>
</EventData>
Got one of those, too...
<EventData>
  <Data>Application: HTPC.exe CoreCLR Version: 10.0.926.27113 .NET Version: 10.0.9 Description: The process was terminated due to an unhandled exception. Exception Info: System.DllNotFoundException: Unable to load DLL 'mpv-2.dll' or one of its dependencies: A dynamic link library (DLL) initialization routine failed. (0x8007045A) at HTPC.Core.Interop.Libmpv.mpv_create() at HTPC.Core.Interop.Libmpv.mpv_create() at HTPC.Services.MpvPlaybackService.InitializeMpv() in D:\a\HTPC\HTPC\Services\MpvPlaybackService.cs:line 77 at HTPC.Services.MpvPlaybackService..ctor(ILogger`1 logger, IServiceScopeFactory scopeFactory, ServerManagerService serverManager) in D:\a\HTPC\HTPC\Services\MpvPlaybackService.cs:line 43 at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Constructor(Object obj, IntPtr* args) at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr) at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(ServiceIdentifier serviceIdentifier) at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(ServiceIdentifier serviceIdentifier, ServiceProviderEngineScope serviceProviderEngineScope) at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at HTPC.Program.Main(String[] args) in D:\a\HTPC\HTPC\Program.cs:line 99</Data> 
  </EventData>

They are opening and closing too fast for a human to react as what I showed above happens instantly and multiple times.

Nothing like that, unfortunately!

I just released v1.2.0. This release is mainly a bug fix that fixes 2 issues, older CPU's not loading mpv-2.dll and Collections View display issue. I will have more updates for Collections on the next release, including sorting.

I added the version number on the Settings page and fixed a windowed view bug as well.

2 Likes

The next release will have changes in the Recordings page that allows for finding and viewing upcoming content.

To exit full screen, press the f key and it will toggle to a windowed view.

I will add a light theme at some point in the future, after I finish with all the layout changes.

@Bobby_Vaughn

I'm having a problem with channel changes. I can watch a channel (doesn't matter what channel), but if I stop that channel and try another one, I either get a blank screen or a frozen picture of what's on that channel, but the timer runs as if a video is showing. This happens on both CDVR servers I run, on separate PCs, so I don't believe it's a server issue. Is there a log file for Nucleus that I can check for errors? Thanks.

@daldana7296 I'll look into it. What source seems to be the issue? TVE, OTA, FAST channels, etc. You can use the channels DVR logs to see what transpired during failed tunes.

It happens on any combination of channels, 1st channel can be TVE, OTA, or FAST, 2nd channel can also be any one of those. The CDVR log doesn't show any error, it shows the normal statistics and buffer entries as if the 2nd channel is playing, but it's not.

I'm viewing on a Windows 11 laptop and both servers are also Windows 11.

I'll test it out over the next few days. Thanks.

V 1.1.9 and 1.2.0 will not launch. When I try and launch it there is a spinning wheel for a moment and then nothing. I get the following envents in Event log:

Event 1000, Application Error
Faulting application name: HTPC.exe, version: 1.2.0.0, time stamp: 0x6a0e0000
Faulting module name: KERNELBASE.dll, version: 10.0.26100.8737, time stamp: 0x82bf07fa
Exception code: 0xe0434352
Fault offset: 0x00000000000c1c0a
Faulting process id: 0x223C
Faulting application start time: 0x1DD130E97DC4A48
Faulting application path: C:\Users\Morris\AppData\Local\Programs\NucleusHTPC\HTPC.exe
Faulting module path: C:\WINDOWS\System32\KERNELBASE.dll
Report Id: b7529440-52b8-4ce4-bbcf-4794118e4d1b
Faulting package full name: 
Faulting package-relative application ID: 

=======================================================================

1000 .NET Runtime

Category: Microsoft.Extensions.Hosting.Internal.Host
EventId: 11

Hosting failed to start

Exception: 
System.IO.IOException: Failed to bind to address http://localhost:55001.
 ---> System.AggregateException: One or more errors occurred. (An attempt was made to access a socket in a way forbidden by its access permissions.) (An attempt was made to access a socket in a way forbidden by its access permissions.)
 ---> System.Net.Sockets.SocketException (10013): An attempt was made to access a socket in a way forbidden by its access permissions.
   at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName)
   at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Bind(EndPoint localEP)
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint)
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind()
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<<StartAsync>g__OnBind|0>d.MoveNext()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) System.Net.Sockets.SocketException (10013): An attempt was made to access a socket in a way forbidden by its access permissions.
   at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName)
   at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Bind(EndPoint localEP)
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint)
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind()
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<<StartAsync>g__OnBind|0>d.MoveNext()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)<---

   --- End of inner exception stack trace ---
   at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>b__14_1(IHostedService service, CancellationToken token)
   at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation)

===========================================================

1026 .NET Runtime

Application: HTPC.exe
CoreCLR Version: 10.0.926.27113
.NET Version: 10.0.9
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.IOException: Failed to bind to address http://localhost:55001.
 ---> System.AggregateException: One or more errors occurred. (An attempt was made to access a socket in a way forbidden by its access permissions.) (An attempt was made to access a socket in a way forbidden by its access permissions.)
 ---> System.Net.Sockets.SocketException (10013): An attempt was made to access a socket in a way forbidden by its access permissions.
   at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName)
   at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Bind(EndPoint localEP)
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint)
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind()
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<<StartAsync>g__OnBind|0>d.MoveNext()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) System.Net.Sockets.SocketException (10013): An attempt was made to access a socket in a way forbidden by its access permissions.
   at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName)
   at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Bind(EndPoint localEP)
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint)
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind()
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<<StartAsync>g__OnBind|0>d.MoveNext()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)<---

   --- End of inner exception stack trace ---
   at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>b__14_1(IHostedService service, CancellationToken token)
   at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation)
   at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Start(IHost host)
   at HTPC.Program.Main(String[] args) in D:\a\HTPC\HTPC\Program.cs:line 88

It looks like the Kestrel server failed to bind to port 55001 and caused a crash. I'm actually not using the Kestrel server yet. I'll change it to disable if port conflict found. You may be able to run it if the port is available now. Would you look in Task Manager see if there it is running in the background and if it isn't, try to run the app again and see if it works.

I don't see it and all is the same. Before posting I'd tried restarting and also uninstall and install.

Thanks for trying. One last question, what CPU is your PC using?

My CPU is an I9-1300K

@daldana7296 @Morris_Altman Would y'all install this test release and see if it fixes the issues you are having?
I removed the Kestrel Server which should fix your issue, Morris.
I improved the way the channels are closed out when tuning a new one, which should improve the issue you see daldana.

Let me know if it works, please and thank you for the help.