# TNAFlix Video Downloader (`serpxxx/tnaflix-video-downloader`) Actor

TNAFlix Downloader (Unofficial). Authorized-use only — download content you own or have permission to access. Download TNAFlix videos easily for offline viewing. Fast, reliable TNAFlix video downloader with high-quality downloads.

- **URL**: https://apify.com/serpxxx/tnaflix-video-downloader.md
- **Developed by:** [SERP XXX](https://apify.com/serpxxx) (community)
- **Categories:** Videos, Automation, Social media
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## TNAFlix Downloader (Browser Extension)

> Download supported TNAFlix videos as MP4 files directly from active watch pages.

![TNAFlix Downloader](https://raw.githubusercontent.com/serpxxx/tnaflix-video-downloader/main/assets/workflow-preview.webp)

TNAFlix Downloader is a browser extension built for users who want a cleaner way to save supported TNAFlix videos for offline viewing. It detects the active media source from the page, surfaces available quality variants when present, and exports the final result as MP4 without forcing you to inspect page scripts or use separate extraction tools.

- Save supported TNAFlix videos from watch pages
- Detect available quality options exposed by the player
- Export MP4 files for easier offline playback
- Avoid manual URL extraction and stream hunting
- Keep the process browser-native

### Get it Here

Get it here: https://serp.ly/tnaflix-video-downloader

### Table of Contents

- [Why TNAFlix Downloader](#why-tnaflix-downloader)
- [Features](#features)
- [How It Works](#how-it-works)
- [Step-by-Step Tutorial: How to Download Videos from TNAFlix](#step-by-step-tutorial-how-to-download-videos-from-tnaflix)
- [Supported Formats](#supported-formats)
- [Who It's For](#who-its-for)
- [Common Use Cases](#common-use-cases)
- [Troubleshooting](#troubleshooting)
- [Trial & Access](#trial--access)
- [Installation Instructions](#installation-instructions)
- [FAQ](#faq)
- [License](#license)
- [Notes](#notes)
- [About TNAFlix](#about-tnaflix)

### Why TNAFlix Downloader

TNAFlix video pages can expose several page assets around the player, which makes generic download tools inconsistent. A simple scan often returns the wrong file or misses the active playback source entirely once the page finishes initializing.

TNAFlix Downloader is built to simplify that. Open the watch page, let the extension detect the supported video source, choose the quality you want, and export the result as MP4.

### Features

- Detects supported TNAFlix video sources from multiple methods (config XML, API, HTML5 video)
- Lists available quality variants when present
- In-page download button built into the video player
- Converts HLS streams to downloadable MP4 files in-browser
- Right-click context menu for a faster download flow
- Real-time progress tracking with download speed and file size
- Desktop notifications when downloads complete
- Auto-saves to an organized TNAFLIX subfolder in Downloads
- Exports MP4 files for simpler offline viewing
- Cross-browser support for Chrome, Edge, Brave, Opera, Firefox, Whale, and Yandex

### How It Works

1. Install the extension from the latest release.
2. Open a TNAFlix video page and press play.
3. Let the extension detect the active media source.
4. Open the popup or use the in-page download button.
5. Choose the quality or stream option you want.
6. Start the download and wait for the MP4 export to finish.
7. Save the final MP4 file locally.

### Step-by-Step Tutorial: How to Download Videos from TNAFlix

1. Install TNAFlix Downloader from the latest GitHub release.
2. Open TNAFlix and sign in if the page requires account access.
3. Navigate to the video page you want to keep.
4. Let the player load fully and press play.
5. Click the in-page download button on the player or open the extension popup.
6. Review the quality options shown by the extension.
7. Choose the resolution you want if multiple options are available.
8. Start the download and wait for the MP4 export to finish.
9. Open the saved file from your Downloads folder.

### Supported Formats

- Input: supported TNAFlix video sources (HLS, direct MP4, config XML)
- Input: multiple quality levels from the page source
- Output: MP4

Saved files use MP4 so they are easier to replay on standard media players, transfer between devices, or archive for later access.

### Who It's For

- TNAFlix viewers who want offline copies of supported videos
- Users who prefer a browser extension over manual extraction
- People archiving videos they can already access in the browser
- Users who want a cleaner MP4 save workflow
- Anyone who wants to avoid command-line tools or desktop software for downloads

### Common Use Cases

- Save a TNAFlix video for later viewing
- Export the highest available quality as MP4
- Avoid manually parsing playback source URLs
- Keep local copies for offline playback
- Download the best quality exposed by the page

### Troubleshooting

**The extension does not detect the video**
Start playback first and wait for the player to initialize the active source.

**Only one source is listed**
Some pages expose only one usable stream, so only one option may appear.

**The wrong source shows up**
Refresh the page and retry after playback starts again.

**The download stopped or failed partway through**
Check whether your internet connection dropped during the export. Retry the download from the popup.

**The page requires account access**
The extension only works on media you can already open and play in your active browser session.

### Trial & Access

- Includes **3 free downloads** so you can test the workflow first
- Email sign-in uses secure one-time password verification
- No credit card required for the trial
- Unlimited downloads are available with a paid license

Start here: [https://serp.ly/tnaflix-video-downloader](https://serp.ly/tnaflix-video-downloader)

### Installation Instructions

1. Open the latest release page: [GitHub Releases](https://github.com/serpxxx/tnaflix-video-downloader/releases/latest)
2. Download the correct build for your browser.
3. Install the extension.
4. Open a TNAFlix video page.
5. Use the popup to detect and download the media.

### FAQ

**Can I download TNAFlix videos as MP4?**
Yes. Supported downloads are exported as MP4 files.

**Do I need extra software?**
No. The workflow runs entirely in the browser extension.

**Does it work on every page?**
It works on supported playback flows. Detection depends on how the active page exposes the media source.

**Where are videos saved?**
They are saved to your default Downloads location, typically inside a TNAFLIX subfolder.

**What browsers are supported?**
Chrome, Edge, Brave, Opera, Firefox, Whale, and Yandex.

**Is my data safe?**
Yes. Video processing happens entirely in your browser. Authentication uses secure OTP verification.

### License

This repository is distributed under the proprietary SERP Apps license in the [LICENSE](https://github.com/serpxxx/tnaflix-video-downloader/blob/main/LICENSE) file. Review that file before copying, modifying, or redistributing any part of this project.

### Notes

- Only download content you own or have explicit permission to save
- An internet connection is required for downloads
- Must press play before the extension can detect the video
- Quality depends on the source and what the page exposes
- Video data is served through multiple backend APIs, which the extension handles automatically

### About TNAFlix

TNAFlix is a video platform with player-managed playback and multiple media assets around many watch pages. TNAFlix Downloader is built to make supported downloads easier for users who already have access to those videos in the browser.

# Actor input Schema



## Actor input object example

```json
{}
````

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("serpxxx/tnaflix-video-downloader").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("serpxxx/tnaflix-video-downloader").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call serpxxx/tnaflix-video-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=serpxxx/tnaflix-video-downloader",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TNAFlix Video Downloader",
        "description": "TNAFlix Downloader (Unofficial). Authorized-use only — download content you own or have permission to access. Download TNAFlix videos easily for offline viewing. Fast, reliable TNAFlix video downloader with high-quality downloads.",
        "version": "0.0",
        "x-build-id": "B0mF7n04hOOg6bs9v"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/serpxxx~tnaflix-video-downloader/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-serpxxx-tnaflix-video-downloader",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/serpxxx~tnaflix-video-downloader/runs": {
            "post": {
                "operationId": "runs-sync-serpxxx-tnaflix-video-downloader",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/serpxxx~tnaflix-video-downloader/run-sync": {
            "post": {
                "operationId": "run-sync-serpxxx-tnaflix-video-downloader",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {}
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
