diff --git a/README.md b/README.md
index 9748ed55..baf7a22a 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,9 @@
- [About](#about)
+ - [How It Works](#how-it-works)
- [Building `tvapp` Image](#building-tvapp-image)
+- [How It Works](#how-it-works-1)
- [Before Building](#before-building)
- [LF over CRLF](#lf-over-crlf)
- [Set `+x / 0755` Permissions](#set-x--0755-permissions)
@@ -58,8 +60,31 @@
## About
+**TVApp2** is a docker image which allows you to download M3U playlist and EPG guide data which can be plugged into your IPTV applications such as Jellyfin, Plex, and Emby. It is a revision of the original app by dtankdempse which is no longer available. This app fetches data for:
+
+- TheTvApp
+- TVPass
+- MoveOnJoy
+- More coming soon
+
+
+
+This project contains several repositories which all share the same code; use them as backups:
+
+- [https://github.com/iFlip721/tvapp2](https://github.com/iFlip721/tvapp2)
+- [https://github.com/Aetherinox/tvapp2](https://github.com/Aetherinox/tvapp2)
+- [https://git.binaryninja.net/pub_projects/tvapp2](https://git.binaryninja.net/pub_projects/tvapp2)
+
+
+
+### How It Works
+
+
+
- TVApp2 makes fetch request to [tvapp2-externals](https://git.binaryninja.net/pub_projects/tvapp2-externals 'tvapp2-externals') making updates to external formats agnostic to pushing a new container image.
-- TVApp2 makes fetch request to [XMLTV-EPG](https://git.binaryninja.net/pub_projects/XMLTV-EPG 'XMLTV-EPG') making updates to EPG data based on customized channel ids. Channel ids are specific to each EPG record which makes obfusctaing channel ids difficult.
+- TVApp2 makes fetch request to [XMLTV-EPG](https://git.binaryninja.net/pub_projects/XMLTV-EPG 'XMLTV-EPG') making updates to EPG data based on customized channel ids. Channel ids are specific to each EPG record which makes obfuscating channel ids difficult.
+
+
```mermaid
graph TD
@@ -77,20 +102,103 @@ C(XMLTV-EPG) ---> E{Pull Dynamic EPG}
## Building `tvapp` Image
-These instructions outline how to build your own tvapp2 docker image. When building your images with the commands provided below, ensure you create two sets of tags:
+These instructions outline how the TVApp2 docker image is set up, and how to build your own TVApp2 docker image.
+
+
+
+## How It Works
+
+The TVApp2 application requires one dependency docker image, which is utilized as the base image and contains Alpine linux. You may use the pre-compiled docker image provided by us on Github, or you may choose to build your own. The base alpine image is available at:
+
+- https://github.com/Aetherinox/docker-base-alpine
+
+
+
+This base Alpine image contains [s6-overlay](https://github.com/just-containers/s6-overlay) and comes with several features such as plugins, service management, migration tools, etc.
+
+
+
+The process of building both images are outlined below. But please remember that you do not need to build the base Alpine image; we already provide it at: https://github.com/Aetherinox/docker-base-alpine/pkgs/container/alpine-base
+
+
+
+```mermaid
+%%{init: { 'themeVariables': { 'fontSize': '10px' }}}%%
+flowchart TB
+
+subgraph GRAPH_TVAPP ["Build thetvapp:latest"]
+ direction TB
+ obj_step10["`> git clone https://git.binaryninja.net/pub_projects/tvapp2.git`"]
+ obj_step11["`**Dockerfile
+ Dockerfile.aarch64**`"]
+ obj_step12["`> docker build \
+ --build-arg VERSION=1.0.0 \
+ --build-arg BUILD_DATE=20250218 \
+ -t tvapp:latest \
+ -t tvapp:1.0.0-amd64 \
+ -f Dockerfile . \`"]
+ obj_step13["`Download **alpine-base** from branch **docker/alpine-base**`"]
+ obj_step14["`New Image: **thetvapp:latest**`"]
+
+ style obj_step10 text-align:center,stroke-width:1px,stroke:#555
+ style obj_step11 text-align:left,stroke-width:1px,stroke:#555
+ style obj_step12 text-align:left,stroke-width:1px,stroke:#555
+ style obj_step13 text-align:left,stroke-width:1px,stroke:#555
+end
+
+style GRAPH_TVAPP text-align:center,stroke-width:1px,stroke:transparent,fill:transparent
+
+subgraph GRAPH_ALPINE["Build alpine-base:latest Image"]
+direction TB
+ obj_step20["`> git clone -b docker/alpine-base github.com/Aetherinox/docker-base-alpine.git`"]
+ obj_step21["`**Dockerfile
+ Dockerfile.aarch64**`"]
+ obj_step22["`> docker build \
+ --build-arg VERSION=3.20 \
+ --build-arg BUILD_DATE=20250218 \
+ -t docker-alpine-base:latest \
+ -t docker-alpine-base:3.20-amd64 \
+ -f Dockerfile . \`"]
+ obj_step23["`Download files from branch **docker/core**`"]
+ obj_step24["`New Image: **alpine-base:latest**`"]
+
+ style obj_step20 text-align:center,stroke-width:1px,stroke:#555
+ style obj_step21 text-align:left,stroke-width:1px,stroke:#555
+ style obj_step22 text-align:left,stroke-width:1px,stroke:#555
+ style obj_step23 text-align:left,stroke-width:1px,stroke:#555
+end
+
+style GRAPH_ALPINE text-align:center,stroke-width:1px,stroke:transparent,fill:transparent
+
+GRAPH_TVAPP --> obj_step10 --> obj_step11 --> obj_step12 --> obj_step13 --> obj_step14
+GRAPH_ALPINE --> obj_step20 --> obj_step21 --> obj_step22 --> obj_step23 --> obj_step24
+```
+
+
+
+When building your TVApp2 images with the commands provided below, ensure you create two sets of tags:
| Architecture | Dockerfile | Tags |
| ------------ | -------------------- | ----------------------------------------------------------------------- |
| `amd64` | `Dockerfile` | `tvapp2:latest`
`tvapp2:1.0.0`
`tvapp2:1.0.0-amd64` |
| `arm64` | `Dockerfile.aarch64` | `tvapp2:1.0.0-arm64` |
+
+
The `amd64` arch gets a few extra tags because it should be the default image people clone.
### Before Building
-Prior to building the docker image, you **must** ensure the following conditions are met. If the below tasks are not performed, your docker container will throw the following errors when started:
+Prior to building the docker image, you **must** ensure the sections below are completed.
+
+- [LF over CRLF](#lf-over-crlf)
+- [Set +x / 0755 Permissions](#set-x--0755-permissions)
+
+
+
+ If the listed tasks above are not performed, your docker container will throw the following errors when started:
- `Failed to open apk database: Permission denied`
- `s6-rc: warning: unable to start service init-adduser: command exited 127`