https://github.com/sergio11/nimbustv_android
I built NimbusTV as a personal project to dive into Android TV development ๐บ๐ป, using Jetpack Compose ๐๏ธ to create a seamless user interface ๐. It's a hands-on journey ๐ where I'm exploring new concepts ๐ and improving my skills ๐ ๏ธ in building TV apps for the modern Android ecosystem ๐.
https://github.com/sergio11/nimbustv_android
androidtv clean-architecture dash exoplayer hilt-compose hilt-dependency-injection hls jetpack-compose jetpack-compose-navigation kotlin m3u8-playlist material3-android material3-components mvi mvi-architecture room-database room-persistence-library
Last synced: about 2 months ago
JSON representation
I built NimbusTV as a personal project to dive into Android TV development ๐บ๐ป, using Jetpack Compose ๐๏ธ to create a seamless user interface ๐. It's a hands-on journey ๐ where I'm exploring new concepts ๐ and improving my skills ๐ ๏ธ in building TV apps for the modern Android ecosystem ๐.
- Host: GitHub
- URL: https://github.com/sergio11/nimbustv_android
- Owner: sergio11
- License: apache-2.0
- Created: 2015-08-12T09:47:17.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2025-04-12T16:30:29.000Z (6 months ago)
- Last Synced: 2025-04-12T17:35:00.193Z (6 months ago)
- Language: Kotlin
- Homepage:
- Size: 43.2 MB
- Stars: 13
- Watchers: 2
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE-COMPOSETV
Awesome Lists containing this project
README
# NimbusTV ๐บ๐ โ A Personal Learning Project for Android TV Development
**NimbusTV** is a personal project I developed to apply and enhance my skills in **Android TV development** ๐บ, **Jetpack Compose for TV** ๐ฅ๏ธ, **Clean Architecture** ๐๏ธ, and **MVI** ๐. The goal was to build an efficient, user-friendly streaming app that simplifies channel management and gives users easy access to their favorite TV content.
This project allowed me to dive deep into Android TV design patterns, exploring how to create smooth, intuitive user interfaces and ensuring scalability for larger applications. The app supports a variety of content types ๐, seamlessly allowing users to organize and switch between categoriesโsuch as sports ๐, movies ๐ฌ, news ๐ฐ, and music ๐ถโwhile handling modern streaming formats like HLS ๐ก, DASH ๐ฅ, and encrypted channels ๐.
I also incorporated **EPG (Electronic Program Guides)** ๐ to provide real-time schedules, allowing users to plan their viewing experience and set **custom reminders** ๐ for their favorite shows.
Through this project, I further honed my knowledge of **Jetpack Compose** and how to create a responsive, visually appealing interface for Android TV. **NimbusTV** leverages my understanding of **Clean Architecture** and **MVI** to ensure that the app is not only functional but also well-structured, making future improvements and scaling easier.
Working on **NimbusTV** has been a great way for me to deepen my understanding of Android TV development and design best practices, and I'm proud to showcase this project as a way of documenting my learning journey.
Crafted with **Jetpack Compose for TV** ๐ฅ๏ธ, NimbusTV shines on the big screen, delivering a smooth, elegant experience for Android TV. Built on the reliable **Clean Architecture** ๐งฉ and **MVI** pattern foundations, itโs designed to be fast, scalable, and visually immersive. Thanks to the [**๐ฎ Fudge**](https://github.com/sergio11/fudge_tv_compose_library) UI Kit, NimbusTV combines a sleek design with easy navigation, putting total control in your hands ๐๏ธ.
A huge thank you to the creators of **[JetFit](https://github.com/TheChance101/tv-samples/tree/JetFit/JetFit)** and the contributors to **[PR #183](https://github.com/android/tv-samples/pull/183)** for providing an invaluable foundation for **NimbusTV**. This is an attempt to provide an open-source implementation of JetFit. Licensed under **Apache 2.0** (implementation) and **CC BY 4.0** (design), JetFit served as a key reference for building a seamless **Jetpack Compose for TV** experience. We encourage you to visit the PR, review the effort, and give the deserved recognition. For more details and attributions, please check the **"Credits"** section below. ๐
To handle M3U playlist parsing, Iโve integrated and customized the [M3u parser](https://github.com/BjoernPetersen/m3u-parser) library. Modifications were made to extend the functionality, allowing NimbusTV to support even more complex M3U structures, while accommodating the varied and sometimes inconsistent formats found in IPTV playlists. A copy of the original license can be found in the [`LICENSE-M3UPARSER`](LICENSE-M3UPARSER) file.
**NimbusTV is for educational purposes only ๐**, and I am not responsible for the use or content viewed ๐ซ. Usage of any media content must comply with local laws and regulations. This project does not endorse the use of unauthorized streams.
Please review the full **Disclaimer** section below for more information ๐.
This app, **Nimbustv**, includes images and resources designed by [Freepik](https://www.freepik.com). We would like to acknowledge and thank Freepik for their incredible design assets. The images used in the app are provided with attribution, as required by Freepik's licensing terms. For more information on Freepik's resources, please visit [www.freepik.com](https://www.freepik.com).
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Slides are built using the template from [Previewed](https://previewed.app/template/AFC0B4CB). I extend my gratitude to them for their remarkable work and contribution.
## โ ๏ธ Disclaimer
For demonstration and testing purposes, **NimbusTV** utilizes publicly available IPTV playlists from the [IPTV-Org](https://iptv-org.github.io/) project. These playlists offer a diverse collection of international channels in M3U format, enabling users to explore and experience a wide range of content directly from the app.
To handle M3U playlist parsing, weโve integrated and customized the [M3u parser](https://github.com/BjoernPetersen/m3u-parser) library. Modifications were made to extend the functionality, allowing **NimbusTV** to support even more complex M3U structures while accommodating the varied and sometimes inconsistent formats found in IPTV playlists.
The name **NimbusTV** was generated using **ChatGPT** as part of a creative brainstorming process. Any resemblance to existing brands, products, or services is purely coincidental.
The **NimbusTV** logo was also generated with **ChatGPT** and is entirely free of copyright restrictions. It may be used freely for personal and open-source projects without any attribution requirements.
**NimbusTV** does not host, distribute, or promote any copyrighted or illegal content. The user is solely responsible for the playlists they load and how the app is used. This project is for educational purposes only.
## Overview ๐
NimbusTV is a personal project I created to improve my skills in Android TV development. It aims to offer an intuitive and seamless way for users to enjoy content on their Android TVs, with a focus on simplicity and ease of use. Through this project, I explored features like M3U playlist management, customizable reminders, and EPG integration, all while learning to implement best practices in UI design and app architecture.
![]()
## Technologies Used ๐ ๏ธ
NimbusTV harnesses a variety of technologies to deliver a seamless streaming experience on Android TV. ๐
- **Kotlin** ๐ฆบ: The preferred language for developing Android applications, offering modern syntax and powerful features to enhance productivity. ๐
- **Room** ๐๏ธ: Implements a local database schema to persist information about M3U playlists, channels, EPG data, and program entries linked to each user profile. Each user profile in NimbusTV maintains its own independent playlists and EPGs, ensuring personalized content management. ๐๐
- **Jetpack DataStore** ๐พ: A modern data storage solution used to store application preferences shared across profiles. It allows users to enable different EPG viewing modes, such as "Channel Overview" or "Now and Schedule," and activate channel search options. ๐โจ
- **Coil** ๐ผ๏ธ: An image loading library for Android that simplifies the process of loading images from the internet, ensuring smooth and efficient image handling in the app. ๐ธ๐
- **WorkManager** ๐ฐ๏ธ: Used to schedule background tasks, such as updating EPG data daily and sending reminders for upcoming shows, ensuring that users never miss their favorite content. ๐ โฐ
- **Coroutines** ๐: Simplifies asynchronous programming and efficiently manages background tasks, enhancing app responsiveness. โฑ๏ธโก
- **Clean Architecture** ๐๏ธ: Promotes a well-structured and scalable app design by separating concerns into distinct layers, enhancing maintainability and testability. ๐
- **MVI (Model-View-Intent)** ๐: Implements a unidirectional data flow pattern, ensuring a clear separation between UI components and business logic. ๐
- **Jetpack Compose for TV** ๐บ: Utilizes Jetpack Compose to build modern, responsive UIs tailored for TV screens, optimizing the interface for large displays. ๐จ
- **Jetpack Compose Navigation** ๐บ๏ธ: Facilitates in-app navigation and screen transitions with a clear API, supporting deep linking and complex navigation flows effortlessly. ๐ฆ
- **Material Design 3** ๐จ: Applies the latest Material Design guidelines to create a visually appealing and intuitive user interface. ๐๏ธ
- **๐ฎ Fudge** ๐ฐ: Fudge is a Jetpack Compose UI Kit for TV apps, providing pre-built components and tools to craft engaging experiences on the big screen. ๐ฌ๐
- **Media3 for Media Playback** ๐ฅ:
- **Media3 ExoPlayer** ๐ฌ: Part of the Media3 library, ExoPlayer supports various media formats, providing advanced features for high-quality playback. ๐ป๐ฟ
- **HLS (HTTP Live Streaming)** ๐บ: This plugin allows the playback of HLS streams, enabling adaptive streaming for different network conditions. It dynamically adjusts the quality of the video based on the user's internet speed, ensuring smooth playback with minimal buffering. ๐ฅ๐
- **DASH (Dynamic Adaptive Streaming over HTTP)** ๐ก: This plugin enables the playback of DASH streams, another adaptive streaming format. Similar to HLS, DASH adjusts video quality in real-time, providing a seamless viewing experience by optimizing bandwidth usage and improving playback performance. ๐บโก
- **Media3 UI** ๐จ: Provides UI components for integrating media playback controls into your appโs interface. ๐น๏ธ๐ถ- **Dagger Hilt** ๐งฉ: A dependency injection library simplifying the management of dependencies and enhancing modularity in your app. ๐ง๐ก
- **Mapper Pattern** ๐: Facilitates conversion between different data models, ensuring data consistency across application components. ๐
![]()
## Architecture Overview ๐๏ธ
NimbusTV is designed with a robust architecture for maintainability, testability, and flexibility. The architecture leverages several design patterns and principles:
### **Clean Architecture**
Clean Architecture focuses on separating concerns into distinct layers:
- **Presentation Layer**: Handles UI and user interactions using Jetpack Compose for modern interfaces. ๐ฅ๏ธโจ
- **Domain Layer**: Contains business logic and use cases, independent of external frameworks. ๐ง ๐
- **Data Layer**: Manages data sources and repositories, abstracting data retrieval and storage. ๐ฆ๐### **Data Sources**
Data sources fetch and manage data from various origins, including:
- **Remote Data Sources** ๐: Interact with cloud services or web APIs (e.g., Firebase Firestore). โ๏ธ๐
- **Local Data Sources** ๐ป: Handle local data storage (e.g., Room and Jetpack DataStore). ๐พ๐๏ธ### **Repository Pattern**
The repository pattern provides a unified interface for data access, decoupling data retrieval from the rest of the application for easier testing and maintenance. ๐โ๏ธ### **Use Cases**
In the Domain Layer, Use Cases represent specific actions, encapsulating business logic and interacting with repositories to retrieve or modify data. ๐งฉ๐### **Inversion of Control (IoC)** ๐
IoC inverts control flow, allowing dependencies to be injected rather than hardcoded, promoting modularity and reducing boilerplate code. ๐ง๐### **SOLID Principles** ๐
We apply SOLID principles to ensure our codebase remains clean and maintainable:
- **Single Responsibility Principle (SRP)** โ : Each class has one responsibility.
- **Open/Closed Principle (OCP)** ๐: Classes are open for extension but closed for modification.
- **Liskov Substitution Principle (LSP)** ๐: Subtypes must be substitutable for their base types.
- **Interface Segregation Principle (ISP)** ๐ซ: Clients should not depend on interfaces they do not use.
- **Dependency Inversion Principle (DIP)** ๐: High-level modules depend on abstractions.### **MVI (Model-View-Intent)** ๐
MVI manages state and interactions, ensuring a predictable unidirectional data flow. ๐๐This architecture ensures that NimbusTV is well-structured, easy to maintain, and scalable, adhering to best practices and design principles. ๐โจ
## App Screenshots ๐ธ
Explore **NimbusTV** and its user-friendly design through these screenshots, offering a sneak peek into the app's key features!
### Onboarding and Getting Started ๐ฌ
The journey with **NimbusTV** begins by creating a profile. This simple step allows you to personalize your experience by organizing your favorite EPGs and playlists. There's no need for online accounts or loginsโeverything is handled locally, ensuring a smooth and self-contained experience. I built this feature to learn how to structure and manage app data efficiently while focusing on a seamless user experience.
![]()
![]()
![]()
### Managing Your Profiles ๐ค
Step into the **Profiles** section, where you can customize **NimbusTV** to suit your viewing preferences. Hereโs what makes the Profiles section so versatile:
![]()
- **Profile Selection**: Choose between different profiles in the **Profile Selection** screen. Each profile allows for custom EPGs and playlists, ensuring a unique setup for each viewer.
![]()
![]()
- **Creating Profiles**: Add up to four profiles, perfect for household members who want their own playlists and EPGs. Customize each with a unique name and avatar, making NimbusTV adaptable and fun for everyone!
![]()
![]()
![]()
- **Editing Profiles**: Update profile details, including name, avatar, and security PIN, all while keeping your data secure and your experience personalized.
![]()
![]()
- **Deleting Profiles**: When a profile is no longer needed, delete it to keep **NimbusTV** clean and focused on what matters most.
![]()
![]()
The **Profiles** section makes NimbusTV adaptable to every userโs viewing needs, ensuring a personalized experience on a single device.
![]()
### Home Screen ๐ ๐บ
Welcome to the **Home** screen of **NimbusTV**, your central hub for exploring and enjoying your playlists and channels:
![]()
![]()
- **Channel Preview** ๐: Hover over any channel to get a quick preview of what's currently playingโideal for browsing without fully tuning in.
![]()
![]()
- **Favorites** โญ: Mark your favorite channels to keep them easily accessible for quick viewing.
- **Smooth Playlist Switching** ๐: Effortlessly switch between playlists to explore channels organized by theme or preference, perfect if you like variety.
![]()
![]()
- **Playlist Management** ๐๏ธ: From the main screen, access the **Manage Playlist** button to open the playlist management view, where you can:
- **Add New Playlists** โ: Add new M3U playlists to expand your channel lineup.
- **Delete Playlists** ๐๏ธ: Remove playlists that are no longer needed.
- **Update Playlists** ๐: Refresh playlists to keep content up-to-date.
- **Explore Channels and Favorites** ๐: View each playlist's channels, mark favorites, or play them instantly.
![]()
![]()
![]()
![]()
With NimbusTVโs **Home** screen, youโre in control of all your playlists and favorite channels, providing a fully personalized TV experience. ๐
### Channel Search Screen ๐๐บ
The **Channel Search** feature in **NimbusTV** is your go-to tool for quickly finding channels across all imported playlists! Accessible from the **Side Menu** (if enabled in **Preferences**), this screen allows you to:
- **Quickly Search Channels** ๐: Type a keyword to search through all registered channels, making it easy to find exactly what youโre looking for in seconds.
- **Intuitive On-Screen Keyboard** โจ๏ธ: Use the keyboard on the left side of the screen to input search terms, with the results instantly updating as you type.
- **Results Display** ๐: Found channels are shown in a convenient list on the right side of the screen. Browse through and explore results based on your search term.
- **Channel Actions** ๐ฌ: Selecting a channel in the search results opens a dialog with two options:
- **Play Now** โถ๏ธ: Instantly tune in to the channel.
- **Add to Favorites** โญ: Save the channel for quick access from your favorites list.
![]()
![]()
![]()
The **Channel Search** screen streamlines navigation and lets you customize your experience by finding and favoriting channels across your playlists.
### Favorites Section โญ
The **Favorites** section in **NimbusTV** is designed for quick access to the channels you love most. Hereโs what makes it a perfect tool for streamlining your viewing experience:
- **Easy Access to Favorites** ๐: Your favorite channels are all listed in one place, making it effortless to start watching right away.
- **Instant Playback** โถ๏ธ: Simply select a channel from the list to begin playback, no need to navigate through different playlists.
- **Manage Favorites** ๐๏ธ: Want to declutter? Easily remove channels from your favorites list with a single action, keeping only the content you truly enjoy.
The **Favorites** section keeps your top channels just a click away, making it your personalized hub for entertainment on NimbusTV!
![]()
![]()
### EPG (Electronic Program Guide) ๐
The **Electronic Program Guide (EPG)** in **NimbusTV** lets each profile import, view, and manage channel lists and programming schedules. Hereโs an overview of its key features:
![]()
![]()
#### EPG Viewing Modes ๐๏ธ
**NimbusTV** offers two EPG display modes, configurable from **Settings**:
- **Now & Schedule Mode** โฐ:
This mode displays the EPG in a two-column format:
- The first column shows all channels with their currently airing programs.
- The second column lists the full schedule for each channel, indicating whether the event is past, live, or upcoming.
You can select any upcoming event to open a dialog and set a reminder, which will notify you 5 minutes before the show starts.
![]()
![]()
![]()
![]()
- **Single-Column Mode** ๐:
This format organizes the EPG into a single column, with each channel appearing in an individual row alongside its full schedule for the day. Just like in **Now & Schedule Mode**, you can interact with events and set reminders for future shows.
![]()
![]()
Both modes provide intuitive navigation through each channelโs programming, making it quick and easy to keep track of your favorite shows.
#### EPG Source Management ๐ง
Each profile can access **EPG Source Management**, where you can:
![]()
- **Add New EPGs** โ: Import custom EPG sources to load channel programming schedules.
![]()
- **Delete Existing EPGs** ๐๏ธ: Remove any EPG sources that you no longer need.
![]()
- **Daily Auto-Updates** ๐: NimbusTV schedules a daily update for each active EPG, refreshing programming data so you always have the latest information.
With these flexible options, each profile in **NimbusTV** can tailor its own program guide, ensuring a viewing experience thatโs convenient and perfectly suited to your preferences. Stay organized, informed, and on top of your favorite channelsโ schedules!
![]()
### Full-Screen Player ๐ฅ
The **Full-Screen Player** in **NimbusTV** provides an immersive viewing experience, allowing you to enjoy channels in full detail. Hereโs what you can do within the player:
- **Full-Screen Playback** ๐บ: Each channel can be viewed in full-screen mode, giving you a clear and focused experience of your selected content.
- **Add to Favorites** โญ: Want quick access to a channel? Add it to your favorites directly from the player screen with just one click.
- **Access System Settings** โ๏ธ: Open the system settings panel without leaving the player, allowing for quick adjustments to enhance your viewing experience.
![]()
![]()
![]()
![]()
#### Audio-Only Player for Music & Radio ๐ป
For music or radio channels, **NimbusTV** launches a special **Audio-Only Player**:
- **Music & Radio Display** ๐ถ: When tuning into a radio or music channel, the audio-only player displays station or channel information, delivering a streamlined audio experience without video, ideal for listening enjoyment.
With both full-screen video playback and an optimized audio-only mode, **NimbusTV**โs player is designed to adapt to your viewing and listening needs, making every channel as engaging as possible.
![]()
### Settings Screen โ๏ธ
The **Settings** screen in **NimbusTV** offers you a range of customizable options to tailor your viewing experience. Hereโs how you can enhance your interaction with the app:
![]()
### Channel Search Settings ๐
The **Channel Search** option allows you to enable or disable the feature to search for channels across your playlists, providing you with flexibility in navigation.
- **Toggle Search Visibility** โ๏ธ: Enable or disable the channel search feature easily. When activated, the search icon will appear in the side menu, making it simple to find your favorite channels at any time.
![]()
- **EPG View Mode Selection** ๐ : Choose how you want to view the Electronic Program Guide (EPG). You can opt for a **"Now & Schedule"** format with two columns for an overview of what's currently airing and what's coming up, or a **unified format** with a single column displaying all programming for the current day in one row per channel.
![]()
### Additional Settings ๐ ๏ธ
- **Access AndroidTV Settings** ๐ฑ: Quickly navigate to the AndroidTV system settings for further customization and adjustments.
- **Legal Information** ๐: View essential documents like **Terms and Conditions**, ensuring you understand the usage of the app.
![]()
- **Help Section** โ: Need assistance? Access the help section for FAQs and troubleshooting tips to enhance your experience.
![]()
- **About Us** โน๏ธ: Learn more about **NimbusTV** and our mission in the "About NimbusTV" section.
- **Log Out** ๐ช: Easily log out of your account when youโre done, ensuring your privacy and security.
![]()
With these settings, **NimbusTV** empowers you to create a viewing environment that fits your preferences, making your entertainment experience as enjoyable as possible!
---
### Acknowledgments
#### 1. **JetFit Project**
A huge thank you to the creators of **[JetFit](https://github.com/TheChance101/tv-samples/tree/JetFit/JetFit)** and the contributors to **[PR #183](https://github.com/android/tv-samples/pull/183)** for providing an invaluable foundation for **NimbusTV**. **JetFit** has served as a reference for both the **Jetpack Compose for TV UI framework** and the appโs design structure.- **License**:
- **Apache 2.0** (Implementation)
- **CC BY 4.0** (Design)The **JetFit** project significantly influenced the development of NimbusTV. Its **Apache 2.0**-licensed implementation was used to build out the **Jetpack Compose for TV** framework, while its **CC BY 4.0**-licensed design inspired the visual aspects of NimbusTV.
---
### ๐ Key Resources:
- **[JetFit GitHub Repository](https://github.com/TheChance101/tv-samples/tree/JetFit/JetFit)**
- **[JetFit Figma Design](https://www.figma.com/community/file/1237433831695839696/jetfit-fitness-app)**
- **[JetFit Case Study & Guidelines](https://developer.android.com/design/ui/tv/samples/jet-fit?hl=es-419)**
- **[Google TV Design Kit (Figma)](https://developer.android.com/design/ui/tv/guidelines)**These resources, examples, and insights provided in the **JetFit repository** have played a crucial role in accelerating our development process and deepening our understanding of building seamless TV applications with **Jetpack Compose**. We deeply appreciate the contributions of the JetFit team and their commitment to open-source development.
---
#### 2. **IPTV-Org Project**
For demonstration and testing purposes, **NimbusTV** utilizes publicly available IPTV playlists from the **[IPTV-Org](https://iptv-org.github.io/)** project. These playlists provide a wide collection of international channels in M3U format, offering users the ability to explore diverse content directly from the app.---
#### 3. **M3u Parser Library**
NimbusTV uses and customizes the **[M3u Parser](https://github.com/BjoernPetersen/m3u-parser)** library to handle M3U playlist parsing. Modifications were made to extend its functionality and accommodate more complex M3U structures, allowing the app to handle the varied formats found in IPTV playlists.- A copy of the original MIT license is included in the [`LICENSE-M3UPARSER`](LICENSE-M3UPARSER) file.
---
#### 4. **ComposeTv Repository**
๐ Special thanks to **[Umair Khalid](https://github.com/UmairKhalid786)** for his excellent work on the **[ComposeTv](https://github.com/UmairKhalid786/ComposeTv)** repository. This repository served as a vital resource and starting point for the NimbusTV project. The clean documentation and high-quality code of **ComposeTv** were invaluable in the learning and development process.---
#### 5. **Design Resources**
We would like to express our deep appreciation to **[Freepik](https://www.freepik.es/)** for providing the icons and images used in this project.- **Icons and images taken from** [Freepik](https://www.freepik.com) and [Flaticon](https://www.flaticon.es).
## Disclaimer
NimbusTV is provided for educational and learning purposes only ๐. The project has been developed to facilitate access and viewing of content through M3U playlists ๐, organized in an efficient and accessible manner on Android TV devices ๐บ. NimbusTV is not responsible for the use made of the app or the content viewed through it ๐ซ.
Users are responsible for ensuring that the content they access through the app does not violate any copyright laws or other applicable regulations in their jurisdiction โ๏ธ. NimbusTV uses public IPTV sources such as IPTV org ๐, which provide freely accessible and public domain channels ๐ก. NimbusTV does not control or guarantee the availability or legality of the TV channels available through these sources ๐.
By using NimbusTV, you acknowledge that the use of the app is at your own risk โ ๏ธ, and the development team assumes no responsibility for any copyright violations, legal issues, or damages resulting from accessing content through the app ๐ผ.
To handle M3U playlist parsing, weโve integrated and customized the [M3u parser](https://github.com/BjoernPetersen/m3u-parser) library. Modifications were made to extend the functionality, allowing **NimbusTV** to support even more complex M3U structures while accommodating the varied and sometimes inconsistent formats found in IPTV playlists.
The name **NimbusTV** was generated during a brainstorming session with AI. Any resemblance to existing brands, products, or services is purely coincidental.
The **NimbusTV** logo included in this repository is an original creation and is free to use for personal and open-source projects.
**NimbusTV** does not host, distribute, or promote any copyrighted or illegal content. The user is solely responsible for the playlists they load and how the app is used. This project is for educational purposes only.
## Visitors Count
## License โ๏ธ
This project is licensed under the **Apache License 2.0**, a permissive open-source software license that allows developers to freely use, modify, and distribute the software. ๐ This includes both personal and commercial use, with some conditions for distribution and modification. ๐
Key terms of the Apache License 2.0:
- You are allowed to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the software. ๐ป
- If you modify and distribute the software, you must include the original copyright notice, provide a copy of the Apache 2.0 license, and indicate any modifications made. ๐
- You are not allowed to use the name of the project or its contributors to promote derived works without permission. โ
- The software is provided "as is," without any warranties, express or implied. ๐ซ๐ก๏ธPlease see the full license text below for more detailed terms.
```
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/Copyright (c) 2024 Dream software - Sergio Sรกnchez
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
```