Latest commit

History

89 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TvOverlay mod

  • Feel free to explore mods with variants of extended notification popup's max width in apk folder
  • The files naming rule: TvOverlay_{width}.apk, where {width} is the max width (in pixels) of notification popup. It's 260px in the original app
  • Works ONLY for 'default' notification layout mode, so the modded width won't be set on Minimalist and Icon Only layouts, so the original width is applied on these layouts
  • Only width is customized since the layout height of ExoPlayer seems to be auto-adjusted to satisfy aspect ratio of source media
  • The app is cloned (package name is com.tabdeveloper.tvoverlay_clone) so it can be installed and working while the original app is installed on the same device. No reason to use both simultaneously but if needed make sure to assign different ports to api server
  • Personally: 384px width is totally fine for 720p video stream on 65″ 4K screen. Also there are no plans to customize the app any further or add any other width variants
  • Credits to original app's author
# APK sign:
SHA-256: b3c03fcf6a8707d87dfc2ae5f37121ff69d32aa96b235b4cd5afd477e82b6b50
SHA-1: 029651080e62de5cf048c3db68c98bd5cfb87881
MD5: 885044bb7b8faca30e010b0d28b28778

TvOverlay

Elevate your Android TV experience with TVOverlay – the ultimate app that turns your TV into an information hub like never before. Whether you're a casual viewer or a tech enthusiast, TVOverlay enhances your TV content by overlaying essential information and giving you complete control over its appearance.

Watch it on YouTube: https://www.youtube.com/watch?v=mdsY084-pr8

Key FeaturesHow To UsePremium FeaturesUse casesRest APIIssues, suggestions & feature requests

Key Features

  1. Clock:
    Stay on schedule with our clock feature, and as a premium user, personalize it to match your style. Choose from a variety of colors and text options to make it uniquely yours.


Default clock being displayed at the corner of the screen

  1. Notifications:
    Receive notifications from multiple sources, including your Android phone (with TvOverlay Remote app), REST API, and Home Assistant. TVOverlay offers three default notification layouts – Default, Minimalist, and Icon Only – to suit your preferences. Premium users can even design their own notification layouts for a truly tailored experience.


Sample notifications for Default, Minimalist and Icon Only layouts

  1. Fixed Notifications:
    Keep important information at a glance with fixed notifications. These compact alerts remain visible in the corner of your TV screen for a specified time or until you dismiss them.


Fixed notification examples for: Phone battery ; Light On; Twitch channel online

  1. Overlay Background:
    Control the ambiance with our background layer, which sits between overlay content and your TV content. Could be used to artifically change the TV brightness without dealing with menus. Premium users enjoy additional customization options.


Example of background visibility going to 50%, then 95% and back to 0%

  1. Control everywhere & Presets for Efficiency:
    Manage TvOverlay effortlessly using its companion app, TvOverlay Remote. Alternatively, control it via Rest API or MQTT, making it compatible with Home Assistant and your smart home ecosystem. Save time and effort with Presets, to apply multiple settings at once and streamline your experience.


TvOverlay being controlled by TvOverlay remote (left) and Home Assistant via MQTT (Right)

Premium Features

On TvOverlay Remote, users can have access to Premium features by purchasing a one-time In-app product. This purchase unlocks:

  • Multiple devices: be able to control multiple TvOverlay devices on the same remote app
  • Customization: personalize Notifications, Clock & Background. Change colors, font styles and more
  • Presets: create new presets to apply multiple settings at once
  • Helps the developer to continue working on this project :)


Clock & background customization (Left) and Notification customization (middle and right)

How To Use

  1. Install TvOverlay on your AndroidTv via PlayStore

  2. Run TvOverlay and finish all setup steps:

    • Draw over other apps permission: Permission required to create an overlay. Depending on the Android version and manufacturer this option may not be available on a system setting menu. In this case, you will have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell appops set com.tabdeveloper.tvoverlay SYSTEM_ALERT_WINDOW allow

    • Battery optmization: This step is optional, but recommended to avoid the app being killed by the system. If you cannot access the system option to disable battery optimizationn, you may have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell dumpsys deviceidle whitelist +com.tabdeveloper.tvoverlay

  3. (optional) Install TvOverlay Remote on an android device via PlayStore

    • Make sure that you both devices are on the same network and connect it by scanning the QR code on TvOverlay main screen, or connect mannualy by input its host and IP.
    • (Optional) On Notification, you can give permission to mirror your device notifications to TvOverlay.
  4. (optional) Connect to MQTT server

    • If you have a MQTT server running, you can connect your TvOverlay device to it to control its main functions. On the TvOverlay or TvOverlay Remote app, find the MQTT option and fill your server information.
    • On TvOverlay app MQTT settings you can enable Display status on change to better debug if you have problems.
    • If you are using MQTT on Home Assistant, a new device will be created on connection. By default, it will be named TvOverlay - [Device Model]
  5. (optional) Connect to Home Assistant

    • Follow the samples on the Home Assistant section to be able to send Notifications, Fixed Notifications and manage all the settings.
  6. (optional) Import Postman Collection

    • For better understanding of the Rest API, you can import Postman a collection of samples in the Postman section
    • Be sure to modify the Variables to the correct host and port.

Use cases

DescriptionPlataformImageLink
Notification on person arriveHome Assistant🔗
Notification with image when a motion is detect in a cameraHome Assistant🔗
Fixed notification for phone batteryHome Assistant🔗
Fixed notification indicating light onHome Assistant🔗
Fixed notification indicating twitch channel onlineHome Assistant🔗
Fixed notification indicating weatherHome Assistant🔗
Darker screen after sunset; reseting after sunrisingHome Assistant with MQTT🔗

Rest API

Notification

To send a notification, POST on {{host}}:{{ip}}/notify a notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the notification. Can be used to edit a notification while in queue or being displayed.string[random]
titleThe main text of the notification.stringnull
messageThe secondary text of the notification.stringnull
sourceExtra info text for the notification.stringnull
imageThe image to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
videoThe video URL to display in the notification. Supports RTSP, HLS, DASH, and SmoothStreaming. (since 1.0.2)stringnull
largeIconThe large icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconThe small icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconColorThe color tint for the smallIcon. Accepts 6 or 8 digit color hex. The '#' is optional.stringnull
cornerThe position of the notification on the screen. Can be bottom_start, bottom_end, top_start, or top_end.stringnull (uses hot corner setting)
durationThe duration that the notification will stay visible in seconds.integernull (uses duration setting)

Fixed notification

To add a fixed notification, POST on {{host}}:{{ip}}/notify_fixed a fixed notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the fixed notification. Can be used to edit or remove the notification.string[random]
visibleWhether the fixed notification is visible.booleantrue
iconThe icon to display in the fixed notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
messageThe text to display in the fixed notification.stringnull
messageColorThe color of the text in the fixed notification.string#FFFFFF
iconColorThe color tint for the icon in the fixed notification.stringnull
borderColorThe color of the border around the fixed notification.string#FFFFFF
backgroundColorThe background color of the fixed notification.string#66000000
shapeThe shape of the fixed notification frame. Can be circle, rounded, or rectangular.stringrounded
expirationThe time when the fixed notification will be removed. Valid formats: 1695693410 (Epoch time), 1y2w3d4h5m6s (duration format) or 123 (for seconds)string or integernull

Overlay

To modify the overlay, POST on {{host}}:{{ip}}/set/overlay an overlay json object.

NameDescriptionTypeDefault ValueOptional
clockOverlayVisibilityHow visible the clock isinteger (0~95)null
overlayVisibilityHow visible the overlay background isinteger (0~95)null
hotCornerposition on the screen. accept values: bottom_start, bottom_end, top_start, top_endstringnull

Notification settings

To change notifications settings, POST on {{host}}:{{ip}}/set/notifications a notification settings json object.

NameDescriptionTypeDefault ValueOptional
displayNotificationsWhether notifications are displayed.booleannull
displayFixedNotificationsWhether fixed notifications are displayed.booleannull
notificationLayoutNameThe name of the notification layout to use.stringnull
notificationDurationThe duration in seconds that notifications are displayed.integernull
fixedNotificationsVisibilityThe visibility of fixed notifications, from 0 to 95. A value of -1 makes fixed notifications have the same visibility as the clock.integer (-1~95)null

Settings

To change settings, POST on {{host}}:{{ip}}/set/settings a settings json object.

NameDescriptionTypeDefault ValueOptional
deviceNameThe name of the TV device.stringnull
remotePortThe port of the TV device.stringnull
displayDebugWhether to display debug information on the overlay.booleannull
pixelShiftWhether to move the overlay every 2 minutes to avoid screen burn-in.booleannull

MQTT

To change MQTT settings, POST on {{host}}:{{ip}}/set/mqtt a MQTT settings json object.

NameDescriptionTypeDefault ValueOptional
displayMqttStatusChangeWhether to display a message when MQTT connects or disconnects.booleannull
mqttConfigSet or replace MQTT config and try to connect.objectnull
mqttConfig.brokerThe URL of the MQTT broker.stringN/A
mqttConfig.portThe port of the MQTT broker.integerN/A
mqttConfig.userThe username for the MQTT broker.stringnull
mqttConfig.passwordThe password for the MQTT broker.stringnull

Issues, suggestions & feature requests

For Issues, suggestions & feature requests, create a Issue.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

89 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TvOverlay mod

  • Feel free to explore mods with variants of extended notification popup's max width in apk folder
  • The files naming rule: TvOverlay_{width}.apk, where {width} is the max width (in pixels) of notification popup. It's 260px in the original app
  • Works ONLY for 'default' notification layout mode, so the modded width won't be set on Minimalist and Icon Only layouts, so the original width is applied on these layouts
  • Only width is customized since the layout height of ExoPlayer seems to be auto-adjusted to satisfy aspect ratio of source media
  • The app is cloned (package name is com.tabdeveloper.tvoverlay_clone) so it can be installed and working while the original app is installed on the same device. No reason to use both simultaneously but if needed make sure to assign different ports to api server
  • Personally: 384px width is totally fine for 720p video stream on 65″ 4K screen. Also there are no plans to customize the app any further or add any other width variants
  • Credits to original app's author
# APK sign:
SHA-256: b3c03fcf6a8707d87dfc2ae5f37121ff69d32aa96b235b4cd5afd477e82b6b50
SHA-1: 029651080e62de5cf048c3db68c98bd5cfb87881
MD5: 885044bb7b8faca30e010b0d28b28778

TvOverlay

Elevate your Android TV experience with TVOverlay – the ultimate app that turns your TV into an information hub like never before. Whether you're a casual viewer or a tech enthusiast, TVOverlay enhances your TV content by overlaying essential information and giving you complete control over its appearance.

Watch it on YouTube: https://www.youtube.com/watch?v=mdsY084-pr8

Key FeaturesHow To UsePremium FeaturesUse casesRest APIIssues, suggestions & feature requests

Key Features

  1. Clock:
    Stay on schedule with our clock feature, and as a premium user, personalize it to match your style. Choose from a variety of colors and text options to make it uniquely yours.


Default clock being displayed at the corner of the screen

  1. Notifications:
    Receive notifications from multiple sources, including your Android phone (with TvOverlay Remote app), REST API, and Home Assistant. TVOverlay offers three default notification layouts – Default, Minimalist, and Icon Only – to suit your preferences. Premium users can even design their own notification layouts for a truly tailored experience.


Sample notifications for Default, Minimalist and Icon Only layouts

  1. Fixed Notifications:
    Keep important information at a glance with fixed notifications. These compact alerts remain visible in the corner of your TV screen for a specified time or until you dismiss them.


Fixed notification examples for: Phone battery ; Light On; Twitch channel online

  1. Overlay Background:
    Control the ambiance with our background layer, which sits between overlay content and your TV content. Could be used to artifically change the TV brightness without dealing with menus. Premium users enjoy additional customization options.


Example of background visibility going to 50%, then 95% and back to 0%

  1. Control everywhere & Presets for Efficiency:
    Manage TvOverlay effortlessly using its companion app, TvOverlay Remote. Alternatively, control it via Rest API or MQTT, making it compatible with Home Assistant and your smart home ecosystem. Save time and effort with Presets, to apply multiple settings at once and streamline your experience.


TvOverlay being controlled by TvOverlay remote (left) and Home Assistant via MQTT (Right)

Premium Features

On TvOverlay Remote, users can have access to Premium features by purchasing a one-time In-app product. This purchase unlocks:

  • Multiple devices: be able to control multiple TvOverlay devices on the same remote app
  • Customization: personalize Notifications, Clock & Background. Change colors, font styles and more
  • Presets: create new presets to apply multiple settings at once
  • Helps the developer to continue working on this project :)


Clock & background customization (Left) and Notification customization (middle and right)

How To Use

  1. Install TvOverlay on your AndroidTv via PlayStore

  2. Run TvOverlay and finish all setup steps:

    • Draw over other apps permission: Permission required to create an overlay. Depending on the Android version and manufacturer this option may not be available on a system setting menu. In this case, you will have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell appops set com.tabdeveloper.tvoverlay SYSTEM_ALERT_WINDOW allow

    • Battery optmization: This step is optional, but recommended to avoid the app being killed by the system. If you cannot access the system option to disable battery optimizationn, you may have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell dumpsys deviceidle whitelist +com.tabdeveloper.tvoverlay

  3. (optional) Install TvOverlay Remote on an android device via PlayStore

    • Make sure that you both devices are on the same network and connect it by scanning the QR code on TvOverlay main screen, or connect mannualy by input its host and IP.
    • (Optional) On Notification, you can give permission to mirror your device notifications to TvOverlay.
  4. (optional) Connect to MQTT server

    • If you have a MQTT server running, you can connect your TvOverlay device to it to control its main functions. On the TvOverlay or TvOverlay Remote app, find the MQTT option and fill your server information.
    • On TvOverlay app MQTT settings you can enable Display status on change to better debug if you have problems.
    • If you are using MQTT on Home Assistant, a new device will be created on connection. By default, it will be named TvOverlay - [Device Model]
  5. (optional) Connect to Home Assistant

    • Follow the samples on the Home Assistant section to be able to send Notifications, Fixed Notifications and manage all the settings.
  6. (optional) Import Postman Collection

    • For better understanding of the Rest API, you can import Postman a collection of samples in the Postman section
    • Be sure to modify the Variables to the correct host and port.

Use cases

DescriptionPlataformImageLink
Notification on person arriveHome Assistant🔗
Notification with image when a motion is detect in a cameraHome Assistant🔗
Fixed notification for phone batteryHome Assistant🔗
Fixed notification indicating light onHome Assistant🔗
Fixed notification indicating twitch channel onlineHome Assistant🔗
Fixed notification indicating weatherHome Assistant🔗
Darker screen after sunset; reseting after sunrisingHome Assistant with MQTT🔗

Rest API

Notification

To send a notification, POST on {{host}}:{{ip}}/notify a notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the notification. Can be used to edit a notification while in queue or being displayed.string[random]
titleThe main text of the notification.stringnull
messageThe secondary text of the notification.stringnull
sourceExtra info text for the notification.stringnull
imageThe image to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
videoThe video URL to display in the notification. Supports RTSP, HLS, DASH, and SmoothStreaming. (since 1.0.2)stringnull
largeIconThe large icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconThe small icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconColorThe color tint for the smallIcon. Accepts 6 or 8 digit color hex. The '#' is optional.stringnull
cornerThe position of the notification on the screen. Can be bottom_start, bottom_end, top_start, or top_end.stringnull (uses hot corner setting)
durationThe duration that the notification will stay visible in seconds.integernull (uses duration setting)

Fixed notification

To add a fixed notification, POST on {{host}}:{{ip}}/notify_fixed a fixed notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the fixed notification. Can be used to edit or remove the notification.string[random]
visibleWhether the fixed notification is visible.booleantrue
iconThe icon to display in the fixed notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
messageThe text to display in the fixed notification.stringnull
messageColorThe color of the text in the fixed notification.string#FFFFFF
iconColorThe color tint for the icon in the fixed notification.stringnull
borderColorThe color of the border around the fixed notification.string#FFFFFF
backgroundColorThe background color of the fixed notification.string#66000000
shapeThe shape of the fixed notification frame. Can be circle, rounded, or rectangular.stringrounded
expirationThe time when the fixed notification will be removed. Valid formats: 1695693410 (Epoch time), 1y2w3d4h5m6s (duration format) or 123 (for seconds)string or integernull

Overlay

To modify the overlay, POST on {{host}}:{{ip}}/set/overlay an overlay json object.

NameDescriptionTypeDefault ValueOptional
clockOverlayVisibilityHow visible the clock isinteger (0~95)null
overlayVisibilityHow visible the overlay background isinteger (0~95)null
hotCornerposition on the screen. accept values: bottom_start, bottom_end, top_start, top_endstringnull

Notification settings

To change notifications settings, POST on {{host}}:{{ip}}/set/notifications a notification settings json object.

NameDescriptionTypeDefault ValueOptional
displayNotificationsWhether notifications are displayed.booleannull
displayFixedNotificationsWhether fixed notifications are displayed.booleannull
notificationLayoutNameThe name of the notification layout to use.stringnull
notificationDurationThe duration in seconds that notifications are displayed.integernull
fixedNotificationsVisibilityThe visibility of fixed notifications, from 0 to 95. A value of -1 makes fixed notifications have the same visibility as the clock.integer (-1~95)null

Settings

To change settings, POST on {{host}}:{{ip}}/set/settings a settings json object.

NameDescriptionTypeDefault ValueOptional
deviceNameThe name of the TV device.stringnull
remotePortThe port of the TV device.stringnull
displayDebugWhether to display debug information on the overlay.booleannull
pixelShiftWhether to move the overlay every 2 minutes to avoid screen burn-in.booleannull

MQTT

To change MQTT settings, POST on {{host}}:{{ip}}/set/mqtt a MQTT settings json object.

NameDescriptionTypeDefault ValueOptional
displayMqttStatusChangeWhether to display a message when MQTT connects or disconnects.booleannull
mqttConfigSet or replace MQTT config and try to connect.objectnull
mqttConfig.brokerThe URL of the MQTT broker.stringN/A
mqttConfig.portThe port of the MQTT broker.integerN/A
mqttConfig.userThe username for the MQTT broker.stringnull
mqttConfig.passwordThe password for the MQTT broker.stringnull

Issues, suggestions & feature requests

For Issues, suggestions & feature requests, create a Issue.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

89 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TvOverlay mod

  • Feel free to explore mods with variants of extended notification popup's max width in apk folder
  • The files naming rule: TvOverlay_{width}.apk, where {width} is the max width (in pixels) of notification popup. It's 260px in the original app
  • Works ONLY for 'default' notification layout mode, so the modded width won't be set on Minimalist and Icon Only layouts, so the original width is applied on these layouts
  • Only width is customized since the layout height of ExoPlayer seems to be auto-adjusted to satisfy aspect ratio of source media
  • The app is cloned (package name is com.tabdeveloper.tvoverlay_clone) so it can be installed and working while the original app is installed on the same device. No reason to use both simultaneously but if needed make sure to assign different ports to api server
  • Personally: 384px width is totally fine for 720p video stream on 65″ 4K screen. Also there are no plans to customize the app any further or add any other width variants
  • Credits to original app's author
# APK sign:
SHA-256: b3c03fcf6a8707d87dfc2ae5f37121ff69d32aa96b235b4cd5afd477e82b6b50
SHA-1: 029651080e62de5cf048c3db68c98bd5cfb87881
MD5: 885044bb7b8faca30e010b0d28b28778

TvOverlay

Elevate your Android TV experience with TVOverlay – the ultimate app that turns your TV into an information hub like never before. Whether you're a casual viewer or a tech enthusiast, TVOverlay enhances your TV content by overlaying essential information and giving you complete control over its appearance.

Watch it on YouTube: https://www.youtube.com/watch?v=mdsY084-pr8

Key FeaturesHow To UsePremium FeaturesUse casesRest APIIssues, suggestions & feature requests

Key Features

  1. Clock:
    Stay on schedule with our clock feature, and as a premium user, personalize it to match your style. Choose from a variety of colors and text options to make it uniquely yours.


Default clock being displayed at the corner of the screen

  1. Notifications:
    Receive notifications from multiple sources, including your Android phone (with TvOverlay Remote app), REST API, and Home Assistant. TVOverlay offers three default notification layouts – Default, Minimalist, and Icon Only – to suit your preferences. Premium users can even design their own notification layouts for a truly tailored experience.


Sample notifications for Default, Minimalist and Icon Only layouts

  1. Fixed Notifications:
    Keep important information at a glance with fixed notifications. These compact alerts remain visible in the corner of your TV screen for a specified time or until you dismiss them.


Fixed notification examples for: Phone battery ; Light On; Twitch channel online

  1. Overlay Background:
    Control the ambiance with our background layer, which sits between overlay content and your TV content. Could be used to artifically change the TV brightness without dealing with menus. Premium users enjoy additional customization options.


Example of background visibility going to 50%, then 95% and back to 0%

  1. Control everywhere & Presets for Efficiency:
    Manage TvOverlay effortlessly using its companion app, TvOverlay Remote. Alternatively, control it via Rest API or MQTT, making it compatible with Home Assistant and your smart home ecosystem. Save time and effort with Presets, to apply multiple settings at once and streamline your experience.


TvOverlay being controlled by TvOverlay remote (left) and Home Assistant via MQTT (Right)

Premium Features

On TvOverlay Remote, users can have access to Premium features by purchasing a one-time In-app product. This purchase unlocks:

  • Multiple devices: be able to control multiple TvOverlay devices on the same remote app
  • Customization: personalize Notifications, Clock & Background. Change colors, font styles and more
  • Presets: create new presets to apply multiple settings at once
  • Helps the developer to continue working on this project :)


Clock & background customization (Left) and Notification customization (middle and right)

How To Use

  1. Install TvOverlay on your AndroidTv via PlayStore

  2. Run TvOverlay and finish all setup steps:

    • Draw over other apps permission: Permission required to create an overlay. Depending on the Android version and manufacturer this option may not be available on a system setting menu. In this case, you will have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell appops set com.tabdeveloper.tvoverlay SYSTEM_ALERT_WINDOW allow

    • Battery optmization: This step is optional, but recommended to avoid the app being killed by the system. If you cannot access the system option to disable battery optimizationn, you may have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell dumpsys deviceidle whitelist +com.tabdeveloper.tvoverlay

  3. (optional) Install TvOverlay Remote on an android device via PlayStore

    • Make sure that you both devices are on the same network and connect it by scanning the QR code on TvOverlay main screen, or connect mannualy by input its host and IP.
    • (Optional) On Notification, you can give permission to mirror your device notifications to TvOverlay.
  4. (optional) Connect to MQTT server

    • If you have a MQTT server running, you can connect your TvOverlay device to it to control its main functions. On the TvOverlay or TvOverlay Remote app, find the MQTT option and fill your server information.
    • On TvOverlay app MQTT settings you can enable Display status on change to better debug if you have problems.
    • If you are using MQTT on Home Assistant, a new device will be created on connection. By default, it will be named TvOverlay - [Device Model]
  5. (optional) Connect to Home Assistant

    • Follow the samples on the Home Assistant section to be able to send Notifications, Fixed Notifications and manage all the settings.
  6. (optional) Import Postman Collection

    • For better understanding of the Rest API, you can import Postman a collection of samples in the Postman section
    • Be sure to modify the Variables to the correct host and port.

Use cases

DescriptionPlataformImageLink
Notification on person arriveHome Assistant🔗
Notification with image when a motion is detect in a cameraHome Assistant🔗
Fixed notification for phone batteryHome Assistant🔗
Fixed notification indicating light onHome Assistant🔗
Fixed notification indicating twitch channel onlineHome Assistant🔗
Fixed notification indicating weatherHome Assistant🔗
Darker screen after sunset; reseting after sunrisingHome Assistant with MQTT🔗

Rest API

Notification

To send a notification, POST on {{host}}:{{ip}}/notify a notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the notification. Can be used to edit a notification while in queue or being displayed.string[random]
titleThe main text of the notification.stringnull
messageThe secondary text of the notification.stringnull
sourceExtra info text for the notification.stringnull
imageThe image to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
videoThe video URL to display in the notification. Supports RTSP, HLS, DASH, and SmoothStreaming. (since 1.0.2)stringnull
largeIconThe large icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconThe small icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconColorThe color tint for the smallIcon. Accepts 6 or 8 digit color hex. The '#' is optional.stringnull
cornerThe position of the notification on the screen. Can be bottom_start, bottom_end, top_start, or top_end.stringnull (uses hot corner setting)
durationThe duration that the notification will stay visible in seconds.integernull (uses duration setting)

Fixed notification

To add a fixed notification, POST on {{host}}:{{ip}}/notify_fixed a fixed notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the fixed notification. Can be used to edit or remove the notification.string[random]
visibleWhether the fixed notification is visible.booleantrue
iconThe icon to display in the fixed notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
messageThe text to display in the fixed notification.stringnull
messageColorThe color of the text in the fixed notification.string#FFFFFF
iconColorThe color tint for the icon in the fixed notification.stringnull
borderColorThe color of the border around the fixed notification.string#FFFFFF
backgroundColorThe background color of the fixed notification.string#66000000
shapeThe shape of the fixed notification frame. Can be circle, rounded, or rectangular.stringrounded
expirationThe time when the fixed notification will be removed. Valid formats: 1695693410 (Epoch time), 1y2w3d4h5m6s (duration format) or 123 (for seconds)string or integernull

Overlay

To modify the overlay, POST on {{host}}:{{ip}}/set/overlay an overlay json object.

NameDescriptionTypeDefault ValueOptional
clockOverlayVisibilityHow visible the clock isinteger (0~95)null
overlayVisibilityHow visible the overlay background isinteger (0~95)null
hotCornerposition on the screen. accept values: bottom_start, bottom_end, top_start, top_endstringnull

Notification settings

To change notifications settings, POST on {{host}}:{{ip}}/set/notifications a notification settings json object.

NameDescriptionTypeDefault ValueOptional
displayNotificationsWhether notifications are displayed.booleannull
displayFixedNotificationsWhether fixed notifications are displayed.booleannull
notificationLayoutNameThe name of the notification layout to use.stringnull
notificationDurationThe duration in seconds that notifications are displayed.integernull
fixedNotificationsVisibilityThe visibility of fixed notifications, from 0 to 95. A value of -1 makes fixed notifications have the same visibility as the clock.integer (-1~95)null

Settings

To change settings, POST on {{host}}:{{ip}}/set/settings a settings json object.

NameDescriptionTypeDefault ValueOptional
deviceNameThe name of the TV device.stringnull
remotePortThe port of the TV device.stringnull
displayDebugWhether to display debug information on the overlay.booleannull
pixelShiftWhether to move the overlay every 2 minutes to avoid screen burn-in.booleannull

MQTT

To change MQTT settings, POST on {{host}}:{{ip}}/set/mqtt a MQTT settings json object.

NameDescriptionTypeDefault ValueOptional
displayMqttStatusChangeWhether to display a message when MQTT connects or disconnects.booleannull
mqttConfigSet or replace MQTT config and try to connect.objectnull
mqttConfig.brokerThe URL of the MQTT broker.stringN/A
mqttConfig.portThe port of the MQTT broker.integerN/A
mqttConfig.userThe username for the MQTT broker.stringnull
mqttConfig.passwordThe password for the MQTT broker.stringnull

Issues, suggestions & feature requests

For Issues, suggestions & feature requests, create a Issue.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

89 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TvOverlay mod

  • Feel free to explore mods with variants of extended notification popup's max width in apk folder
  • The files naming rule: TvOverlay_{width}.apk, where {width} is the max width (in pixels) of notification popup. It's 260px in the original app
  • Works ONLY for 'default' notification layout mode, so the modded width won't be set on Minimalist and Icon Only layouts, so the original width is applied on these layouts
  • Only width is customized since the layout height of ExoPlayer seems to be auto-adjusted to satisfy aspect ratio of source media
  • The app is cloned (package name is com.tabdeveloper.tvoverlay_clone) so it can be installed and working while the original app is installed on the same device. No reason to use both simultaneously but if needed make sure to assign different ports to api server
  • Personally: 384px width is totally fine for 720p video stream on 65″ 4K screen. Also there are no plans to customize the app any further or add any other width variants
  • Credits to original app's author
# APK sign:
SHA-256: b3c03fcf6a8707d87dfc2ae5f37121ff69d32aa96b235b4cd5afd477e82b6b50
SHA-1: 029651080e62de5cf048c3db68c98bd5cfb87881
MD5: 885044bb7b8faca30e010b0d28b28778

TvOverlay

Elevate your Android TV experience with TVOverlay – the ultimate app that turns your TV into an information hub like never before. Whether you're a casual viewer or a tech enthusiast, TVOverlay enhances your TV content by overlaying essential information and giving you complete control over its appearance.

Watch it on YouTube: https://www.youtube.com/watch?v=mdsY084-pr8

Key FeaturesHow To UsePremium FeaturesUse casesRest APIIssues, suggestions & feature requests

Key Features

  1. Clock:
    Stay on schedule with our clock feature, and as a premium user, personalize it to match your style. Choose from a variety of colors and text options to make it uniquely yours.


Default clock being displayed at the corner of the screen

  1. Notifications:
    Receive notifications from multiple sources, including your Android phone (with TvOverlay Remote app), REST API, and Home Assistant. TVOverlay offers three default notification layouts – Default, Minimalist, and Icon Only – to suit your preferences. Premium users can even design their own notification layouts for a truly tailored experience.


Sample notifications for Default, Minimalist and Icon Only layouts

  1. Fixed Notifications:
    Keep important information at a glance with fixed notifications. These compact alerts remain visible in the corner of your TV screen for a specified time or until you dismiss them.


Fixed notification examples for: Phone battery ; Light On; Twitch channel online

  1. Overlay Background:
    Control the ambiance with our background layer, which sits between overlay content and your TV content. Could be used to artifically change the TV brightness without dealing with menus. Premium users enjoy additional customization options.


Example of background visibility going to 50%, then 95% and back to 0%

  1. Control everywhere & Presets for Efficiency:
    Manage TvOverlay effortlessly using its companion app, TvOverlay Remote. Alternatively, control it via Rest API or MQTT, making it compatible with Home Assistant and your smart home ecosystem. Save time and effort with Presets, to apply multiple settings at once and streamline your experience.


TvOverlay being controlled by TvOverlay remote (left) and Home Assistant via MQTT (Right)

Premium Features

On TvOverlay Remote, users can have access to Premium features by purchasing a one-time In-app product. This purchase unlocks:

  • Multiple devices: be able to control multiple TvOverlay devices on the same remote app
  • Customization: personalize Notifications, Clock & Background. Change colors, font styles and more
  • Presets: create new presets to apply multiple settings at once
  • Helps the developer to continue working on this project :)


Clock & background customization (Left) and Notification customization (middle and right)

How To Use

  1. Install TvOverlay on your AndroidTv via PlayStore

  2. Run TvOverlay and finish all setup steps:

    • Draw over other apps permission: Permission required to create an overlay. Depending on the Android version and manufacturer this option may not be available on a system setting menu. In this case, you will have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell appops set com.tabdeveloper.tvoverlay SYSTEM_ALERT_WINDOW allow

    • Battery optmization: This step is optional, but recommended to avoid the app being killed by the system. If you cannot access the system option to disable battery optimizationn, you may have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell dumpsys deviceidle whitelist +com.tabdeveloper.tvoverlay

  3. (optional) Install TvOverlay Remote on an android device via PlayStore

    • Make sure that you both devices are on the same network and connect it by scanning the QR code on TvOverlay main screen, or connect mannualy by input its host and IP.
    • (Optional) On Notification, you can give permission to mirror your device notifications to TvOverlay.
  4. (optional) Connect to MQTT server

    • If you have a MQTT server running, you can connect your TvOverlay device to it to control its main functions. On the TvOverlay or TvOverlay Remote app, find the MQTT option and fill your server information.
    • On TvOverlay app MQTT settings you can enable Display status on change to better debug if you have problems.
    • If you are using MQTT on Home Assistant, a new device will be created on connection. By default, it will be named TvOverlay - [Device Model]
  5. (optional) Connect to Home Assistant

    • Follow the samples on the Home Assistant section to be able to send Notifications, Fixed Notifications and manage all the settings.
  6. (optional) Import Postman Collection

    • For better understanding of the Rest API, you can import Postman a collection of samples in the Postman section
    • Be sure to modify the Variables to the correct host and port.

Use cases

DescriptionPlataformImageLink
Notification on person arriveHome Assistant🔗
Notification with image when a motion is detect in a cameraHome Assistant🔗
Fixed notification for phone batteryHome Assistant🔗
Fixed notification indicating light onHome Assistant🔗
Fixed notification indicating twitch channel onlineHome Assistant🔗
Fixed notification indicating weatherHome Assistant🔗
Darker screen after sunset; reseting after sunrisingHome Assistant with MQTT🔗

Rest API

Notification

To send a notification, POST on {{host}}:{{ip}}/notify a notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the notification. Can be used to edit a notification while in queue or being displayed.string[random]
titleThe main text of the notification.stringnull
messageThe secondary text of the notification.stringnull
sourceExtra info text for the notification.stringnull
imageThe image to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
videoThe video URL to display in the notification. Supports RTSP, HLS, DASH, and SmoothStreaming. (since 1.0.2)stringnull
largeIconThe large icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconThe small icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconColorThe color tint for the smallIcon. Accepts 6 or 8 digit color hex. The '#' is optional.stringnull
cornerThe position of the notification on the screen. Can be bottom_start, bottom_end, top_start, or top_end.stringnull (uses hot corner setting)
durationThe duration that the notification will stay visible in seconds.integernull (uses duration setting)

Fixed notification

To add a fixed notification, POST on {{host}}:{{ip}}/notify_fixed a fixed notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the fixed notification. Can be used to edit or remove the notification.string[random]
visibleWhether the fixed notification is visible.booleantrue
iconThe icon to display in the fixed notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
messageThe text to display in the fixed notification.stringnull
messageColorThe color of the text in the fixed notification.string#FFFFFF
iconColorThe color tint for the icon in the fixed notification.stringnull
borderColorThe color of the border around the fixed notification.string#FFFFFF
backgroundColorThe background color of the fixed notification.string#66000000
shapeThe shape of the fixed notification frame. Can be circle, rounded, or rectangular.stringrounded
expirationThe time when the fixed notification will be removed. Valid formats: 1695693410 (Epoch time), 1y2w3d4h5m6s (duration format) or 123 (for seconds)string or integernull

Overlay

To modify the overlay, POST on {{host}}:{{ip}}/set/overlay an overlay json object.

NameDescriptionTypeDefault ValueOptional
clockOverlayVisibilityHow visible the clock isinteger (0~95)null
overlayVisibilityHow visible the overlay background isinteger (0~95)null
hotCornerposition on the screen. accept values: bottom_start, bottom_end, top_start, top_endstringnull

Notification settings

To change notifications settings, POST on {{host}}:{{ip}}/set/notifications a notification settings json object.

NameDescriptionTypeDefault ValueOptional
displayNotificationsWhether notifications are displayed.booleannull
displayFixedNotificationsWhether fixed notifications are displayed.booleannull
notificationLayoutNameThe name of the notification layout to use.stringnull
notificationDurationThe duration in seconds that notifications are displayed.integernull
fixedNotificationsVisibilityThe visibility of fixed notifications, from 0 to 95. A value of -1 makes fixed notifications have the same visibility as the clock.integer (-1~95)null

Settings

To change settings, POST on {{host}}:{{ip}}/set/settings a settings json object.

NameDescriptionTypeDefault ValueOptional
deviceNameThe name of the TV device.stringnull
remotePortThe port of the TV device.stringnull
displayDebugWhether to display debug information on the overlay.booleannull
pixelShiftWhether to move the overlay every 2 minutes to avoid screen burn-in.booleannull

MQTT

To change MQTT settings, POST on {{host}}:{{ip}}/set/mqtt a MQTT settings json object.

NameDescriptionTypeDefault ValueOptional
displayMqttStatusChangeWhether to display a message when MQTT connects or disconnects.booleannull
mqttConfigSet or replace MQTT config and try to connect.objectnull
mqttConfig.brokerThe URL of the MQTT broker.stringN/A
mqttConfig.portThe port of the MQTT broker.integerN/A
mqttConfig.userThe username for the MQTT broker.stringnull
mqttConfig.passwordThe password for the MQTT broker.stringnull

Issues, suggestions & feature requests

For Issues, suggestions & feature requests, create a Issue.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

89 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TvOverlay mod

  • Feel free to explore mods with variants of extended notification popup's max width in apk folder
  • The files naming rule: TvOverlay_{width}.apk, where {width} is the max width (in pixels) of notification popup. It's 260px in the original app
  • Works ONLY for 'default' notification layout mode, so the modded width won't be set on Minimalist and Icon Only layouts, so the original width is applied on these layouts
  • Only width is customized since the layout height of ExoPlayer seems to be auto-adjusted to satisfy aspect ratio of source media
  • The app is cloned (package name is com.tabdeveloper.tvoverlay_clone) so it can be installed and working while the original app is installed on the same device. No reason to use both simultaneously but if needed make sure to assign different ports to api server
  • Personally: 384px width is totally fine for 720p video stream on 65″ 4K screen. Also there are no plans to customize the app any further or add any other width variants
  • Credits to original app's author
# APK sign:
SHA-256: b3c03fcf6a8707d87dfc2ae5f37121ff69d32aa96b235b4cd5afd477e82b6b50
SHA-1: 029651080e62de5cf048c3db68c98bd5cfb87881
MD5: 885044bb7b8faca30e010b0d28b28778

TvOverlay

Elevate your Android TV experience with TVOverlay – the ultimate app that turns your TV into an information hub like never before. Whether you're a casual viewer or a tech enthusiast, TVOverlay enhances your TV content by overlaying essential information and giving you complete control over its appearance.

Watch it on YouTube: https://www.youtube.com/watch?v=mdsY084-pr8

Key FeaturesHow To UsePremium FeaturesUse casesRest APIIssues, suggestions & feature requests

Key Features

  1. Clock:
    Stay on schedule with our clock feature, and as a premium user, personalize it to match your style. Choose from a variety of colors and text options to make it uniquely yours.


Default clock being displayed at the corner of the screen

  1. Notifications:
    Receive notifications from multiple sources, including your Android phone (with TvOverlay Remote app), REST API, and Home Assistant. TVOverlay offers three default notification layouts – Default, Minimalist, and Icon Only – to suit your preferences. Premium users can even design their own notification layouts for a truly tailored experience.


Sample notifications for Default, Minimalist and Icon Only layouts

  1. Fixed Notifications:
    Keep important information at a glance with fixed notifications. These compact alerts remain visible in the corner of your TV screen for a specified time or until you dismiss them.


Fixed notification examples for: Phone battery ; Light On; Twitch channel online

  1. Overlay Background:
    Control the ambiance with our background layer, which sits between overlay content and your TV content. Could be used to artifically change the TV brightness without dealing with menus. Premium users enjoy additional customization options.


Example of background visibility going to 50%, then 95% and back to 0%

  1. Control everywhere & Presets for Efficiency:
    Manage TvOverlay effortlessly using its companion app, TvOverlay Remote. Alternatively, control it via Rest API or MQTT, making it compatible with Home Assistant and your smart home ecosystem. Save time and effort with Presets, to apply multiple settings at once and streamline your experience.


TvOverlay being controlled by TvOverlay remote (left) and Home Assistant via MQTT (Right)

Premium Features

On TvOverlay Remote, users can have access to Premium features by purchasing a one-time In-app product. This purchase unlocks:

  • Multiple devices: be able to control multiple TvOverlay devices on the same remote app
  • Customization: personalize Notifications, Clock & Background. Change colors, font styles and more
  • Presets: create new presets to apply multiple settings at once
  • Helps the developer to continue working on this project :)


Clock & background customization (Left) and Notification customization (middle and right)

How To Use

  1. Install TvOverlay on your AndroidTv via PlayStore

  2. Run TvOverlay and finish all setup steps:

    • Draw over other apps permission: Permission required to create an overlay. Depending on the Android version and manufacturer this option may not be available on a system setting menu. In this case, you will have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell appops set com.tabdeveloper.tvoverlay SYSTEM_ALERT_WINDOW allow

    • Battery optmization: This step is optional, but recommended to avoid the app being killed by the system. If you cannot access the system option to disable battery optimizationn, you may have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell dumpsys deviceidle whitelist +com.tabdeveloper.tvoverlay

  3. (optional) Install TvOverlay Remote on an android device via PlayStore

    • Make sure that you both devices are on the same network and connect it by scanning the QR code on TvOverlay main screen, or connect mannualy by input its host and IP.
    • (Optional) On Notification, you can give permission to mirror your device notifications to TvOverlay.
  4. (optional) Connect to MQTT server

    • If you have a MQTT server running, you can connect your TvOverlay device to it to control its main functions. On the TvOverlay or TvOverlay Remote app, find the MQTT option and fill your server information.
    • On TvOverlay app MQTT settings you can enable Display status on change to better debug if you have problems.
    • If you are using MQTT on Home Assistant, a new device will be created on connection. By default, it will be named TvOverlay - [Device Model]
  5. (optional) Connect to Home Assistant

    • Follow the samples on the Home Assistant section to be able to send Notifications, Fixed Notifications and manage all the settings.
  6. (optional) Import Postman Collection

    • For better understanding of the Rest API, you can import Postman a collection of samples in the Postman section
    • Be sure to modify the Variables to the correct host and port.

Use cases

DescriptionPlataformImageLink
Notification on person arriveHome Assistant🔗
Notification with image when a motion is detect in a cameraHome Assistant🔗
Fixed notification for phone batteryHome Assistant🔗
Fixed notification indicating light onHome Assistant🔗
Fixed notification indicating twitch channel onlineHome Assistant🔗
Fixed notification indicating weatherHome Assistant🔗
Darker screen after sunset; reseting after sunrisingHome Assistant with MQTT🔗

Rest API

Notification

To send a notification, POST on {{host}}:{{ip}}/notify a notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the notification. Can be used to edit a notification while in queue or being displayed.string[random]
titleThe main text of the notification.stringnull
messageThe secondary text of the notification.stringnull
sourceExtra info text for the notification.stringnull
imageThe image to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
videoThe video URL to display in the notification. Supports RTSP, HLS, DASH, and SmoothStreaming. (since 1.0.2)stringnull
largeIconThe large icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconThe small icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconColorThe color tint for the smallIcon. Accepts 6 or 8 digit color hex. The '#' is optional.stringnull
cornerThe position of the notification on the screen. Can be bottom_start, bottom_end, top_start, or top_end.stringnull (uses hot corner setting)
durationThe duration that the notification will stay visible in seconds.integernull (uses duration setting)

Fixed notification

To add a fixed notification, POST on {{host}}:{{ip}}/notify_fixed a fixed notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the fixed notification. Can be used to edit or remove the notification.string[random]
visibleWhether the fixed notification is visible.booleantrue
iconThe icon to display in the fixed notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
messageThe text to display in the fixed notification.stringnull
messageColorThe color of the text in the fixed notification.string#FFFFFF
iconColorThe color tint for the icon in the fixed notification.stringnull
borderColorThe color of the border around the fixed notification.string#FFFFFF
backgroundColorThe background color of the fixed notification.string#66000000
shapeThe shape of the fixed notification frame. Can be circle, rounded, or rectangular.stringrounded
expirationThe time when the fixed notification will be removed. Valid formats: 1695693410 (Epoch time), 1y2w3d4h5m6s (duration format) or 123 (for seconds)string or integernull

Overlay

To modify the overlay, POST on {{host}}:{{ip}}/set/overlay an overlay json object.

NameDescriptionTypeDefault ValueOptional
clockOverlayVisibilityHow visible the clock isinteger (0~95)null
overlayVisibilityHow visible the overlay background isinteger (0~95)null
hotCornerposition on the screen. accept values: bottom_start, bottom_end, top_start, top_endstringnull

Notification settings

To change notifications settings, POST on {{host}}:{{ip}}/set/notifications a notification settings json object.

NameDescriptionTypeDefault ValueOptional
displayNotificationsWhether notifications are displayed.booleannull
displayFixedNotificationsWhether fixed notifications are displayed.booleannull
notificationLayoutNameThe name of the notification layout to use.stringnull
notificationDurationThe duration in seconds that notifications are displayed.integernull
fixedNotificationsVisibilityThe visibility of fixed notifications, from 0 to 95. A value of -1 makes fixed notifications have the same visibility as the clock.integer (-1~95)null

Settings

To change settings, POST on {{host}}:{{ip}}/set/settings a settings json object.

NameDescriptionTypeDefault ValueOptional
deviceNameThe name of the TV device.stringnull
remotePortThe port of the TV device.stringnull
displayDebugWhether to display debug information on the overlay.booleannull
pixelShiftWhether to move the overlay every 2 minutes to avoid screen burn-in.booleannull

MQTT

To change MQTT settings, POST on {{host}}:{{ip}}/set/mqtt a MQTT settings json object.

NameDescriptionTypeDefault ValueOptional
displayMqttStatusChangeWhether to display a message when MQTT connects or disconnects.booleannull
mqttConfigSet or replace MQTT config and try to connect.objectnull
mqttConfig.brokerThe URL of the MQTT broker.stringN/A
mqttConfig.portThe port of the MQTT broker.integerN/A
mqttConfig.userThe username for the MQTT broker.stringnull
mqttConfig.passwordThe password for the MQTT broker.stringnull

Issues, suggestions & feature requests

For Issues, suggestions & feature requests, create a Issue.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

89 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TvOverlay mod

  • Feel free to explore mods with variants of extended notification popup's max width in apk folder
  • The files naming rule: TvOverlay_{width}.apk, where {width} is the max width (in pixels) of notification popup. It's 260px in the original app
  • Works ONLY for 'default' notification layout mode, so the modded width won't be set on Minimalist and Icon Only layouts, so the original width is applied on these layouts
  • Only width is customized since the layout height of ExoPlayer seems to be auto-adjusted to satisfy aspect ratio of source media
  • The app is cloned (package name is com.tabdeveloper.tvoverlay_clone) so it can be installed and working while the original app is installed on the same device. No reason to use both simultaneously but if needed make sure to assign different ports to api server
  • Personally: 384px width is totally fine for 720p video stream on 65″ 4K screen. Also there are no plans to customize the app any further or add any other width variants
  • Credits to original app's author
# APK sign:
SHA-256: b3c03fcf6a8707d87dfc2ae5f37121ff69d32aa96b235b4cd5afd477e82b6b50
SHA-1: 029651080e62de5cf048c3db68c98bd5cfb87881
MD5: 885044bb7b8faca30e010b0d28b28778

TvOverlay

Elevate your Android TV experience with TVOverlay – the ultimate app that turns your TV into an information hub like never before. Whether you're a casual viewer or a tech enthusiast, TVOverlay enhances your TV content by overlaying essential information and giving you complete control over its appearance.

Watch it on YouTube: https://www.youtube.com/watch?v=mdsY084-pr8

Key FeaturesHow To UsePremium FeaturesUse casesRest APIIssues, suggestions & feature requests

Key Features

  1. Clock:
    Stay on schedule with our clock feature, and as a premium user, personalize it to match your style. Choose from a variety of colors and text options to make it uniquely yours.


Default clock being displayed at the corner of the screen

  1. Notifications:
    Receive notifications from multiple sources, including your Android phone (with TvOverlay Remote app), REST API, and Home Assistant. TVOverlay offers three default notification layouts – Default, Minimalist, and Icon Only – to suit your preferences. Premium users can even design their own notification layouts for a truly tailored experience.


Sample notifications for Default, Minimalist and Icon Only layouts

  1. Fixed Notifications:
    Keep important information at a glance with fixed notifications. These compact alerts remain visible in the corner of your TV screen for a specified time or until you dismiss them.


Fixed notification examples for: Phone battery ; Light On; Twitch channel online

  1. Overlay Background:
    Control the ambiance with our background layer, which sits between overlay content and your TV content. Could be used to artifically change the TV brightness without dealing with menus. Premium users enjoy additional customization options.


Example of background visibility going to 50%, then 95% and back to 0%

  1. Control everywhere & Presets for Efficiency:
    Manage TvOverlay effortlessly using its companion app, TvOverlay Remote. Alternatively, control it via Rest API or MQTT, making it compatible with Home Assistant and your smart home ecosystem. Save time and effort with Presets, to apply multiple settings at once and streamline your experience.


TvOverlay being controlled by TvOverlay remote (left) and Home Assistant via MQTT (Right)

Premium Features

On TvOverlay Remote, users can have access to Premium features by purchasing a one-time In-app product. This purchase unlocks:

  • Multiple devices: be able to control multiple TvOverlay devices on the same remote app
  • Customization: personalize Notifications, Clock & Background. Change colors, font styles and more
  • Presets: create new presets to apply multiple settings at once
  • Helps the developer to continue working on this project :)


Clock & background customization (Left) and Notification customization (middle and right)

How To Use

  1. Install TvOverlay on your AndroidTv via PlayStore

  2. Run TvOverlay and finish all setup steps:

    • Draw over other apps permission: Permission required to create an overlay. Depending on the Android version and manufacturer this option may not be available on a system setting menu. In this case, you will have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell appops set com.tabdeveloper.tvoverlay SYSTEM_ALERT_WINDOW allow

    • Battery optmization: This step is optional, but recommended to avoid the app being killed by the system. If you cannot access the system option to disable battery optimizationn, you may have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell dumpsys deviceidle whitelist +com.tabdeveloper.tvoverlay

  3. (optional) Install TvOverlay Remote on an android device via PlayStore

    • Make sure that you both devices are on the same network and connect it by scanning the QR code on TvOverlay main screen, or connect mannualy by input its host and IP.
    • (Optional) On Notification, you can give permission to mirror your device notifications to TvOverlay.
  4. (optional) Connect to MQTT server

    • If you have a MQTT server running, you can connect your TvOverlay device to it to control its main functions. On the TvOverlay or TvOverlay Remote app, find the MQTT option and fill your server information.
    • On TvOverlay app MQTT settings you can enable Display status on change to better debug if you have problems.
    • If you are using MQTT on Home Assistant, a new device will be created on connection. By default, it will be named TvOverlay - [Device Model]
  5. (optional) Connect to Home Assistant

    • Follow the samples on the Home Assistant section to be able to send Notifications, Fixed Notifications and manage all the settings.
  6. (optional) Import Postman Collection

    • For better understanding of the Rest API, you can import Postman a collection of samples in the Postman section
    • Be sure to modify the Variables to the correct host and port.

Use cases

DescriptionPlataformImageLink
Notification on person arriveHome Assistant🔗
Notification with image when a motion is detect in a cameraHome Assistant🔗
Fixed notification for phone batteryHome Assistant🔗
Fixed notification indicating light onHome Assistant🔗
Fixed notification indicating twitch channel onlineHome Assistant🔗
Fixed notification indicating weatherHome Assistant🔗
Darker screen after sunset; reseting after sunrisingHome Assistant with MQTT🔗

Rest API

Notification

To send a notification, POST on {{host}}:{{ip}}/notify a notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the notification. Can be used to edit a notification while in queue or being displayed.string[random]
titleThe main text of the notification.stringnull
messageThe secondary text of the notification.stringnull
sourceExtra info text for the notification.stringnull
imageThe image to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
videoThe video URL to display in the notification. Supports RTSP, HLS, DASH, and SmoothStreaming. (since 1.0.2)stringnull
largeIconThe large icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconThe small icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconColorThe color tint for the smallIcon. Accepts 6 or 8 digit color hex. The '#' is optional.stringnull
cornerThe position of the notification on the screen. Can be bottom_start, bottom_end, top_start, or top_end.stringnull (uses hot corner setting)
durationThe duration that the notification will stay visible in seconds.integernull (uses duration setting)

Fixed notification

To add a fixed notification, POST on {{host}}:{{ip}}/notify_fixed a fixed notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the fixed notification. Can be used to edit or remove the notification.string[random]
visibleWhether the fixed notification is visible.booleantrue
iconThe icon to display in the fixed notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
messageThe text to display in the fixed notification.stringnull
messageColorThe color of the text in the fixed notification.string#FFFFFF
iconColorThe color tint for the icon in the fixed notification.stringnull
borderColorThe color of the border around the fixed notification.string#FFFFFF
backgroundColorThe background color of the fixed notification.string#66000000
shapeThe shape of the fixed notification frame. Can be circle, rounded, or rectangular.stringrounded
expirationThe time when the fixed notification will be removed. Valid formats: 1695693410 (Epoch time), 1y2w3d4h5m6s (duration format) or 123 (for seconds)string or integernull

Overlay

To modify the overlay, POST on {{host}}:{{ip}}/set/overlay an overlay json object.

NameDescriptionTypeDefault ValueOptional
clockOverlayVisibilityHow visible the clock isinteger (0~95)null
overlayVisibilityHow visible the overlay background isinteger (0~95)null
hotCornerposition on the screen. accept values: bottom_start, bottom_end, top_start, top_endstringnull

Notification settings

To change notifications settings, POST on {{host}}:{{ip}}/set/notifications a notification settings json object.

NameDescriptionTypeDefault ValueOptional
displayNotificationsWhether notifications are displayed.booleannull
displayFixedNotificationsWhether fixed notifications are displayed.booleannull
notificationLayoutNameThe name of the notification layout to use.stringnull
notificationDurationThe duration in seconds that notifications are displayed.integernull
fixedNotificationsVisibilityThe visibility of fixed notifications, from 0 to 95. A value of -1 makes fixed notifications have the same visibility as the clock.integer (-1~95)null

Settings

To change settings, POST on {{host}}:{{ip}}/set/settings a settings json object.

NameDescriptionTypeDefault ValueOptional
deviceNameThe name of the TV device.stringnull
remotePortThe port of the TV device.stringnull
displayDebugWhether to display debug information on the overlay.booleannull
pixelShiftWhether to move the overlay every 2 minutes to avoid screen burn-in.booleannull

MQTT

To change MQTT settings, POST on {{host}}:{{ip}}/set/mqtt a MQTT settings json object.

NameDescriptionTypeDefault ValueOptional
displayMqttStatusChangeWhether to display a message when MQTT connects or disconnects.booleannull
mqttConfigSet or replace MQTT config and try to connect.objectnull
mqttConfig.brokerThe URL of the MQTT broker.stringN/A
mqttConfig.portThe port of the MQTT broker.integerN/A
mqttConfig.userThe username for the MQTT broker.stringnull
mqttConfig.passwordThe password for the MQTT broker.stringnull

Issues, suggestions & feature requests

For Issues, suggestions & feature requests, create a Issue.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

89 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TvOverlay mod

  • Feel free to explore mods with variants of extended notification popup's max width in apk folder
  • The files naming rule: TvOverlay_{width}.apk, where {width} is the max width (in pixels) of notification popup. It's 260px in the original app
  • Works ONLY for 'default' notification layout mode, so the modded width won't be set on Minimalist and Icon Only layouts, so the original width is applied on these layouts
  • Only width is customized since the layout height of ExoPlayer seems to be auto-adjusted to satisfy aspect ratio of source media
  • The app is cloned (package name is com.tabdeveloper.tvoverlay_clone) so it can be installed and working while the original app is installed on the same device. No reason to use both simultaneously but if needed make sure to assign different ports to api server
  • Personally: 384px width is totally fine for 720p video stream on 65″ 4K screen. Also there are no plans to customize the app any further or add any other width variants
  • Credits to original app's author
# APK sign:
SHA-256: b3c03fcf6a8707d87dfc2ae5f37121ff69d32aa96b235b4cd5afd477e82b6b50
SHA-1: 029651080e62de5cf048c3db68c98bd5cfb87881
MD5: 885044bb7b8faca30e010b0d28b28778

TvOverlay

Elevate your Android TV experience with TVOverlay – the ultimate app that turns your TV into an information hub like never before. Whether you're a casual viewer or a tech enthusiast, TVOverlay enhances your TV content by overlaying essential information and giving you complete control over its appearance.

Watch it on YouTube: https://www.youtube.com/watch?v=mdsY084-pr8

Key FeaturesHow To UsePremium FeaturesUse casesRest APIIssues, suggestions & feature requests

Key Features

  1. Clock:
    Stay on schedule with our clock feature, and as a premium user, personalize it to match your style. Choose from a variety of colors and text options to make it uniquely yours.


Default clock being displayed at the corner of the screen

  1. Notifications:
    Receive notifications from multiple sources, including your Android phone (with TvOverlay Remote app), REST API, and Home Assistant. TVOverlay offers three default notification layouts – Default, Minimalist, and Icon Only – to suit your preferences. Premium users can even design their own notification layouts for a truly tailored experience.


Sample notifications for Default, Minimalist and Icon Only layouts

  1. Fixed Notifications:
    Keep important information at a glance with fixed notifications. These compact alerts remain visible in the corner of your TV screen for a specified time or until you dismiss them.


Fixed notification examples for: Phone battery ; Light On; Twitch channel online

  1. Overlay Background:
    Control the ambiance with our background layer, which sits between overlay content and your TV content. Could be used to artifically change the TV brightness without dealing with menus. Premium users enjoy additional customization options.


Example of background visibility going to 50%, then 95% and back to 0%

  1. Control everywhere & Presets for Efficiency:
    Manage TvOverlay effortlessly using its companion app, TvOverlay Remote. Alternatively, control it via Rest API or MQTT, making it compatible with Home Assistant and your smart home ecosystem. Save time and effort with Presets, to apply multiple settings at once and streamline your experience.


TvOverlay being controlled by TvOverlay remote (left) and Home Assistant via MQTT (Right)

Premium Features

On TvOverlay Remote, users can have access to Premium features by purchasing a one-time In-app product. This purchase unlocks:

  • Multiple devices: be able to control multiple TvOverlay devices on the same remote app
  • Customization: personalize Notifications, Clock & Background. Change colors, font styles and more
  • Presets: create new presets to apply multiple settings at once
  • Helps the developer to continue working on this project :)


Clock & background customization (Left) and Notification customization (middle and right)

How To Use

  1. Install TvOverlay on your AndroidTv via PlayStore

  2. Run TvOverlay and finish all setup steps:

    • Draw over other apps permission: Permission required to create an overlay. Depending on the Android version and manufacturer this option may not be available on a system setting menu. In this case, you will have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell appops set com.tabdeveloper.tvoverlay SYSTEM_ALERT_WINDOW allow

    • Battery optmization: This step is optional, but recommended to avoid the app being killed by the system. If you cannot access the system option to disable battery optimizationn, you may have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell dumpsys deviceidle whitelist +com.tabdeveloper.tvoverlay

  3. (optional) Install TvOverlay Remote on an android device via PlayStore

    • Make sure that you both devices are on the same network and connect it by scanning the QR code on TvOverlay main screen, or connect mannualy by input its host and IP.
    • (Optional) On Notification, you can give permission to mirror your device notifications to TvOverlay.
  4. (optional) Connect to MQTT server

    • If you have a MQTT server running, you can connect your TvOverlay device to it to control its main functions. On the TvOverlay or TvOverlay Remote app, find the MQTT option and fill your server information.
    • On TvOverlay app MQTT settings you can enable Display status on change to better debug if you have problems.
    • If you are using MQTT on Home Assistant, a new device will be created on connection. By default, it will be named TvOverlay - [Device Model]
  5. (optional) Connect to Home Assistant

    • Follow the samples on the Home Assistant section to be able to send Notifications, Fixed Notifications and manage all the settings.
  6. (optional) Import Postman Collection

    • For better understanding of the Rest API, you can import Postman a collection of samples in the Postman section
    • Be sure to modify the Variables to the correct host and port.

Use cases

DescriptionPlataformImageLink
Notification on person arriveHome Assistant🔗
Notification with image when a motion is detect in a cameraHome Assistant🔗
Fixed notification for phone batteryHome Assistant🔗
Fixed notification indicating light onHome Assistant🔗
Fixed notification indicating twitch channel onlineHome Assistant🔗
Fixed notification indicating weatherHome Assistant🔗
Darker screen after sunset; reseting after sunrisingHome Assistant with MQTT🔗

Rest API

Notification

To send a notification, POST on {{host}}:{{ip}}/notify a notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the notification. Can be used to edit a notification while in queue or being displayed.string[random]
titleThe main text of the notification.stringnull
messageThe secondary text of the notification.stringnull
sourceExtra info text for the notification.stringnull
imageThe image to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
videoThe video URL to display in the notification. Supports RTSP, HLS, DASH, and SmoothStreaming. (since 1.0.2)stringnull
largeIconThe large icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconThe small icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconColorThe color tint for the smallIcon. Accepts 6 or 8 digit color hex. The '#' is optional.stringnull
cornerThe position of the notification on the screen. Can be bottom_start, bottom_end, top_start, or top_end.stringnull (uses hot corner setting)
durationThe duration that the notification will stay visible in seconds.integernull (uses duration setting)

Fixed notification

To add a fixed notification, POST on {{host}}:{{ip}}/notify_fixed a fixed notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the fixed notification. Can be used to edit or remove the notification.string[random]
visibleWhether the fixed notification is visible.booleantrue
iconThe icon to display in the fixed notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
messageThe text to display in the fixed notification.stringnull
messageColorThe color of the text in the fixed notification.string#FFFFFF
iconColorThe color tint for the icon in the fixed notification.stringnull
borderColorThe color of the border around the fixed notification.string#FFFFFF
backgroundColorThe background color of the fixed notification.string#66000000
shapeThe shape of the fixed notification frame. Can be circle, rounded, or rectangular.stringrounded
expirationThe time when the fixed notification will be removed. Valid formats: 1695693410 (Epoch time), 1y2w3d4h5m6s (duration format) or 123 (for seconds)string or integernull

Overlay

To modify the overlay, POST on {{host}}:{{ip}}/set/overlay an overlay json object.

NameDescriptionTypeDefault ValueOptional
clockOverlayVisibilityHow visible the clock isinteger (0~95)null
overlayVisibilityHow visible the overlay background isinteger (0~95)null
hotCornerposition on the screen. accept values: bottom_start, bottom_end, top_start, top_endstringnull

Notification settings

To change notifications settings, POST on {{host}}:{{ip}}/set/notifications a notification settings json object.

NameDescriptionTypeDefault ValueOptional
displayNotificationsWhether notifications are displayed.booleannull
displayFixedNotificationsWhether fixed notifications are displayed.booleannull
notificationLayoutNameThe name of the notification layout to use.stringnull
notificationDurationThe duration in seconds that notifications are displayed.integernull
fixedNotificationsVisibilityThe visibility of fixed notifications, from 0 to 95. A value of -1 makes fixed notifications have the same visibility as the clock.integer (-1~95)null

Settings

To change settings, POST on {{host}}:{{ip}}/set/settings a settings json object.

NameDescriptionTypeDefault ValueOptional
deviceNameThe name of the TV device.stringnull
remotePortThe port of the TV device.stringnull
displayDebugWhether to display debug information on the overlay.booleannull
pixelShiftWhether to move the overlay every 2 minutes to avoid screen burn-in.booleannull

MQTT

To change MQTT settings, POST on {{host}}:{{ip}}/set/mqtt a MQTT settings json object.

NameDescriptionTypeDefault ValueOptional
displayMqttStatusChangeWhether to display a message when MQTT connects or disconnects.booleannull
mqttConfigSet or replace MQTT config and try to connect.objectnull
mqttConfig.brokerThe URL of the MQTT broker.stringN/A
mqttConfig.portThe port of the MQTT broker.integerN/A
mqttConfig.userThe username for the MQTT broker.stringnull
mqttConfig.passwordThe password for the MQTT broker.stringnull

Issues, suggestions & feature requests

For Issues, suggestions & feature requests, create a Issue.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

89 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TvOverlay mod

  • Feel free to explore mods with variants of extended notification popup's max width in apk folder
  • The files naming rule: TvOverlay_{width}.apk, where {width} is the max width (in pixels) of notification popup. It's 260px in the original app
  • Works ONLY for 'default' notification layout mode, so the modded width won't be set on Minimalist and Icon Only layouts, so the original width is applied on these layouts
  • Only width is customized since the layout height of ExoPlayer seems to be auto-adjusted to satisfy aspect ratio of source media
  • The app is cloned (package name is com.tabdeveloper.tvoverlay_clone) so it can be installed and working while the original app is installed on the same device. No reason to use both simultaneously but if needed make sure to assign different ports to api server
  • Personally: 384px width is totally fine for 720p video stream on 65″ 4K screen. Also there are no plans to customize the app any further or add any other width variants
  • Credits to original app's author
# APK sign:
SHA-256: b3c03fcf6a8707d87dfc2ae5f37121ff69d32aa96b235b4cd5afd477e82b6b50
SHA-1: 029651080e62de5cf048c3db68c98bd5cfb87881
MD5: 885044bb7b8faca30e010b0d28b28778

TvOverlay

Elevate your Android TV experience with TVOverlay – the ultimate app that turns your TV into an information hub like never before. Whether you're a casual viewer or a tech enthusiast, TVOverlay enhances your TV content by overlaying essential information and giving you complete control over its appearance.

Watch it on YouTube: https://www.youtube.com/watch?v=mdsY084-pr8

Key FeaturesHow To UsePremium FeaturesUse casesRest APIIssues, suggestions & feature requests

Key Features

  1. Clock:
    Stay on schedule with our clock feature, and as a premium user, personalize it to match your style. Choose from a variety of colors and text options to make it uniquely yours.


Default clock being displayed at the corner of the screen

  1. Notifications:
    Receive notifications from multiple sources, including your Android phone (with TvOverlay Remote app), REST API, and Home Assistant. TVOverlay offers three default notification layouts – Default, Minimalist, and Icon Only – to suit your preferences. Premium users can even design their own notification layouts for a truly tailored experience.


Sample notifications for Default, Minimalist and Icon Only layouts

  1. Fixed Notifications:
    Keep important information at a glance with fixed notifications. These compact alerts remain visible in the corner of your TV screen for a specified time or until you dismiss them.


Fixed notification examples for: Phone battery ; Light On; Twitch channel online

  1. Overlay Background:
    Control the ambiance with our background layer, which sits between overlay content and your TV content. Could be used to artifically change the TV brightness without dealing with menus. Premium users enjoy additional customization options.


Example of background visibility going to 50%, then 95% and back to 0%

  1. Control everywhere & Presets for Efficiency:
    Manage TvOverlay effortlessly using its companion app, TvOverlay Remote. Alternatively, control it via Rest API or MQTT, making it compatible with Home Assistant and your smart home ecosystem. Save time and effort with Presets, to apply multiple settings at once and streamline your experience.


TvOverlay being controlled by TvOverlay remote (left) and Home Assistant via MQTT (Right)

Premium Features

On TvOverlay Remote, users can have access to Premium features by purchasing a one-time In-app product. This purchase unlocks:

  • Multiple devices: be able to control multiple TvOverlay devices on the same remote app
  • Customization: personalize Notifications, Clock & Background. Change colors, font styles and more
  • Presets: create new presets to apply multiple settings at once
  • Helps the developer to continue working on this project :)


Clock & background customization (Left) and Notification customization (middle and right)

How To Use

  1. Install TvOverlay on your AndroidTv via PlayStore

  2. Run TvOverlay and finish all setup steps:

    • Draw over other apps permission: Permission required to create an overlay. Depending on the Android version and manufacturer this option may not be available on a system setting menu. In this case, you will have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell appops set com.tabdeveloper.tvoverlay SYSTEM_ALERT_WINDOW allow

    • Battery optmization: This step is optional, but recommended to avoid the app being killed by the system. If you cannot access the system option to disable battery optimizationn, you may have to enable it via ADB command. After enabling ADB on your AndroidTV, you can send the command using TvOverlay Remote or any other app or computer software that sends ADB commands. The ADB command is:

      adb shell dumpsys deviceidle whitelist +com.tabdeveloper.tvoverlay

  3. (optional) Install TvOverlay Remote on an android device via PlayStore

    • Make sure that you both devices are on the same network and connect it by scanning the QR code on TvOverlay main screen, or connect mannualy by input its host and IP.
    • (Optional) On Notification, you can give permission to mirror your device notifications to TvOverlay.
  4. (optional) Connect to MQTT server

    • If you have a MQTT server running, you can connect your TvOverlay device to it to control its main functions. On the TvOverlay or TvOverlay Remote app, find the MQTT option and fill your server information.
    • On TvOverlay app MQTT settings you can enable Display status on change to better debug if you have problems.
    • If you are using MQTT on Home Assistant, a new device will be created on connection. By default, it will be named TvOverlay - [Device Model]
  5. (optional) Connect to Home Assistant

    • Follow the samples on the Home Assistant section to be able to send Notifications, Fixed Notifications and manage all the settings.
  6. (optional) Import Postman Collection

    • For better understanding of the Rest API, you can import Postman a collection of samples in the Postman section
    • Be sure to modify the Variables to the correct host and port.

Use cases

DescriptionPlataformImageLink
Notification on person arriveHome Assistant🔗
Notification with image when a motion is detect in a cameraHome Assistant🔗
Fixed notification for phone batteryHome Assistant🔗
Fixed notification indicating light onHome Assistant🔗
Fixed notification indicating twitch channel onlineHome Assistant🔗
Fixed notification indicating weatherHome Assistant🔗
Darker screen after sunset; reseting after sunrisingHome Assistant with MQTT🔗

Rest API

Notification

To send a notification, POST on {{host}}:{{ip}}/notify a notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the notification. Can be used to edit a notification while in queue or being displayed.string[random]
titleThe main text of the notification.stringnull
messageThe secondary text of the notification.stringnull
sourceExtra info text for the notification.stringnull
imageThe image to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
videoThe video URL to display in the notification. Supports RTSP, HLS, DASH, and SmoothStreaming. (since 1.0.2)stringnull
largeIconThe large icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconThe small icon to display in the notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
smallIconColorThe color tint for the smallIcon. Accepts 6 or 8 digit color hex. The '#' is optional.stringnull
cornerThe position of the notification on the screen. Can be bottom_start, bottom_end, top_start, or top_end.stringnull (uses hot corner setting)
durationThe duration that the notification will stay visible in seconds.integernull (uses duration setting)

Fixed notification

To add a fixed notification, POST on {{host}}:{{ip}}/notify_fixed a fixed notification json object.

NameDescriptionTypeDefault ValueOptional
idA unique identifier for the fixed notification. Can be used to edit or remove the notification.string[random]
visibleWhether the fixed notification is visible.booleantrue
iconThe icon to display in the fixed notification. Can be an MDI icon, image URL, or Bitmap encoded to Base64.stringnull
messageThe text to display in the fixed notification.stringnull
messageColorThe color of the text in the fixed notification.string#FFFFFF
iconColorThe color tint for the icon in the fixed notification.stringnull
borderColorThe color of the border around the fixed notification.string#FFFFFF
backgroundColorThe background color of the fixed notification.string#66000000
shapeThe shape of the fixed notification frame. Can be circle, rounded, or rectangular.stringrounded
expirationThe time when the fixed notification will be removed. Valid formats: 1695693410 (Epoch time), 1y2w3d4h5m6s (duration format) or 123 (for seconds)string or integernull

Overlay

To modify the overlay, POST on {{host}}:{{ip}}/set/overlay an overlay json object.

NameDescriptionTypeDefault ValueOptional
clockOverlayVisibilityHow visible the clock isinteger (0~95)null
overlayVisibilityHow visible the overlay background isinteger (0~95)null
hotCornerposition on the screen. accept values: bottom_start, bottom_end, top_start, top_endstringnull

Notification settings

To change notifications settings, POST on {{host}}:{{ip}}/set/notifications a notification settings json object.

NameDescriptionTypeDefault ValueOptional
displayNotificationsWhether notifications are displayed.booleannull
displayFixedNotificationsWhether fixed notifications are displayed.booleannull
notificationLayoutNameThe name of the notification layout to use.stringnull
notificationDurationThe duration in seconds that notifications are displayed.integernull
fixedNotificationsVisibilityThe visibility of fixed notifications, from 0 to 95. A value of -1 makes fixed notifications have the same visibility as the clock.integer (-1~95)null

Settings

To change settings, POST on {{host}}:{{ip}}/set/settings a settings json object.

NameDescriptionTypeDefault ValueOptional
deviceNameThe name of the TV device.stringnull
remotePortThe port of the TV device.stringnull
displayDebugWhether to display debug information on the overlay.booleannull
pixelShiftWhether to move the overlay every 2 minutes to avoid screen burn-in.booleannull

MQTT

To change MQTT settings, POST on {{host}}:{{ip}}/set/mqtt a MQTT settings json object.

NameDescriptionTypeDefault ValueOptional
displayMqttStatusChangeWhether to display a message when MQTT connects or disconnects.booleannull
mqttConfigSet or replace MQTT config and try to connect.objectnull
mqttConfig.brokerThe URL of the MQTT broker.stringN/A
mqttConfig.portThe port of the MQTT broker.integerN/A
mqttConfig.userThe username for the MQTT broker.stringnull
mqttConfig.passwordThe password for the MQTT broker.stringnull

Issues, suggestions & feature requests

For Issues, suggestions & feature requests, create a Issue.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors