# 321Tube Video Downloader | How to Download 321Tube Videos (`serpxxx/321tube-video-downloader-how-to-download-321tube-videos`) Actor

- **URL**: https://apify.com/serpxxx/321tube-video-downloader-how-to-download-321tube-videos.md
- **Developed by:** [SERP XXX](https://apify.com/serpxxx) (community)
- **Categories:** Videos, Automation, Social media
- **Stats:** 2 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

## 321Tube Video Downloader | How to Download 321Tube Videos

> Download 321Tube Videos — One Click, Private, Browser-Based.

### Get it Here

Get it here: https://serp.ly/321tube-downloader

![321Tube Downloader](https://apps.serp.co/media/optimized-products/321tube-downloader-homescreen-adult-7abcc67580.webp)

Downloader for 321Tube is a browser extension for saving videos from 321Tube.com as standard video files. Open a supported 321Tube video page, press play if needed, use the in-page download button or extension popup, choose an available format, and save through your browser. No desktop app or command-line workflow required.

- Purpose-built around the 321Tube playback surface and TurboVid-related hosts
- In-browser media detection with a player-level download button and context-menu access
- Quality selection where source variants are available
- Shared offscreen stream processing for direct MP4 and HLS candidates
- Organized download folder and progress management
### Table of Contents

- [Why 321tube Downloader](#why-321tube-downloader)
- [Features](#features)
- [How It Works](#how-it-works)
- [Step-by-Step Tutorial: How to Download Videos from 321tube](#step-by-step-tutorial-how-to-download-videos-from-321tube)
- [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)
- [Notes](#notes)
- [License](#license)
- [About 321tube](#about-321tube)

### Why 321tube Downloader

Videos on 321Tube are often embedded behind player wrappers and TurboVid playback hosts. A standard browser right-click save rarely exposes the final video stream, and generic web downloaders can confuse ad previews, thumbnails, and timeline data with actual video content. This makes saving a video for offline viewing unnecessarily complicated.

321tube Downloader solves this by working directly inside the page you are viewing. It checks video and source tags, metadata, script content, and observed media requests to find playable candidates. The extension filters out obvious ad and preview URLs, presents the detected formats in a clean interface, and lets you save through your browser with one click.

### Features

- 321Tube-specific app identity, product URL, entitlement, and update-check configuration
- Host permissions for 321tube.com, subdomains, turboviplay.com, and turbovidhls.com
- In-page player button targeting the 321Tube player wrapper
- Generic static-media extraction for direct MP4 and HLS candidates
- Filters common ad, banner, VAST, thumbnail, sprite, preview, and timeline URLs
- Right-click context menu for page and video contexts
- Shared download manager with progress UI
- Shared offscreen processing for stream and file download work
- OTP activation through auth.serp.co
- 3 free downloads included before paid license flow

### How It Works

1. Install the extension from the latest release.
2. Open 321Tube and go to a supported video page.
3. Start playback so the extension can detect the media.
4. Open the popup or use the on-page controls.
5. Choose the quality option you want.
6. Start the download and wait for the MP4 export to finish.
7. Save the final file locally.

### Step-by-Step Tutorial: How to Download Videos from 321tube

1. Install the 321tube Downloader extension from the latest GitHub release.
2. Open your browser and navigate to a supported 321Tube video page.
3. Press the play button on the video player so the page exposes the media stream.
4. Look for the download button that appears on the video player, or click the extension icon in your toolbar.
5. The extension popup will show the detected media candidates from the page.
6. Select the format or quality option you want to download.
7. Click the download button and wait for the processing to complete.
8. Save the final MP4 file to your preferred location.

### Supported Formats

- Input: Direct MP4 URLs and HLS/M3U8 streams exposed by the 321Tube page or related TurboVid playback hosts
- Output: MP4

Saved files use MP4 so they are easier to replay on standard media players, move between devices, or archive locally.

### Who It's For

- 321Tube viewers who want a simple browser workflow for saving videos for offline viewing
- Non-technical users who prefer a button-based extension over copy-and-paste downloader sites
- Users who want to avoid command-line tools or desktop applications
- Anyone who needs to choose from detected formats where the source exposes multiple quality options

### Common Use Cases

- Save a 321Tube video for offline viewing on a commute or trip
- Capture videos exposed through 321Tube and TurboVid playback URLs
- Choose from detected direct MP4 or HLS candidates where available
- Use the in-page player button instead of searching through page source code
- Use the right-click context menu for quick access while browsing

### Troubleshooting

**No download options appear on the page**
Refresh the page, press play on the video, and wait a few seconds for the stream to load. Then open the extension popup again.

**The player button does not show**
Make sure you are on a supported 321Tube video page and the video player has loaded. Try refreshing the page.

**The download fails or stops mid-way**
Check your internet connection and try again. Some longer videos may take a moment to process through the offscreen pipeline.

**Only one format is available**
The quality options depend on what the source exposes. Some pages may only provide a single stream.

**The extension asks me to sign in**
You need to activate the extension with your email address. The trial includes 3 free downloads after activation.

### 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: [321tube Downloader](https://serp.ly/321tube-downloader)

### Installation Instructions

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

### FAQ

**How do I download a 321Tube video?**
Open a supported 321Tube video page, press play, then use the player download button, the extension icon, or the right-click menu.

**What formats can it detect?**
The extension normalizes direct MP4 and HLS/M3U8-style media URLs when they are exposed by the page or related playback hosts.

**What quality options are available?**
Quality depends on what the source exposes. The extension attempts to infer resolution from labels or URLs and sorts available formats by height where possible.

**Where are downloads saved?**
The extension uses an organized 321Tube download folder for saved files.

**Do I need to press play first?**
Usually yes. Many video pages only expose the final stream after playback starts or after player scripts run.

**Does it use a remote downloader server?**
No. The extension is designed around in-browser detection and download processing. Authentication and update checks call SERP and GitHub services, but media processing is local to the extension pipeline.

### Notes

- Only download content you own or have explicit permission to save
- An internet connection is required for downloads
- Press play on the video first so the extension can detect the media stream
- Available quality options depend on what the source provides

### License

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

### About 321tube

321Tube is an adult video platform that hosts content from a variety of creators and studios. This extension helps viewers save videos from 321Tube for offline access through a simple browser-based workflow.

# 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/321tube-video-downloader-how-to-download-321tube-videos").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/321tube-video-downloader-how-to-download-321tube-videos").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/321tube-video-downloader-how-to-download-321tube-videos --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "321Tube Video Downloader | How to Download 321Tube Videos",
        "description": null,
        "version": "0.0",
        "x-build-id": "yg7rdaL2jT2R0UCXa"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/serpxxx~321tube-video-downloader-how-to-download-321tube-videos/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-serpxxx-321tube-video-downloader-how-to-download-321tube-videos",
                "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~321tube-video-downloader-how-to-download-321tube-videos/runs": {
            "post": {
                "operationId": "runs-sync-serpxxx-321tube-video-downloader-how-to-download-321tube-videos",
                "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~321tube-video-downloader-how-to-download-321tube-videos/run-sync": {
            "post": {
                "operationId": "run-sync-serpxxx-321tube-video-downloader-how-to-download-321tube-videos",
                "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
