# Okporn Video Downloader | How to Download Okporn Videos (`how-to-download-videos/okporn-video-downloader-how-to-download-okporn-videos`) Actor

Okporn Video Downloader | How to Download Okporn Videos Apify actor.

- **URL**: https://apify.com/how-to-download-videos/okporn-video-downloader-how-to-download-okporn-videos.md
- **Developed by:** [how-to-download-videos](https://apify.com/how-to-download-videos) (community)
- **Categories:** Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Okporn Video Downloader | How to Download Okporn Videos

> Capture OK Porn videos from ok.porn/video/<id>/ pages with iframe-handoff messaging and m3u8 or mp4 discovery.

### Get it Here

Get it here: https://serp.ly/okporn-downloader?via=apify

![Okporn Downloader](https://apps.serp.co/media/optimized-products/okporn-downloader-homescreen-adult-9b85d3c6a9.webp)

Okporn Downloader is a browser extension built specifically for the ok.porn domain, designed to help you save videos from the site's minimal watch-page URLs. Rather than offering generic downloader claims, this extension focuses on the unique page structure of Okporn, where video playback moves through an embedded iframe player layer. When the player reveals available media sources, the extension surfaces them so you can download the file directly to your device.

- Built specifically for ok.porn video pages with the .porn domain identity
- Designed around the site's bare /video/<id>/ route pattern
- Handles iframe player handoff from the page shell to the embedded player
- Surfaces m3u8 and direct mp4 streams when the player exposes them
- Focused on privacy with local browser-based downloads
### Table of Contents

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

### Why Okporn Downloader

Generic video downloaders often treat every site the same way, ignoring the unique page structure and player behavior that make each platform different. Okporn uses a minimal watch-page design where video playback is handed off from the main page shell into an embedded iframe player. This means the real media path is hidden behind a player layer that standard downloader tools may not handle correctly.

Okporn Downloader addresses this challenge by focusing specifically on the ok.porn domain and its bare /video/<id>/ page pattern. Instead of trying to work everywhere, the extension is tuned for the site's iframe-based player handoff, surfacing m3u8 and direct mp4 media sources when the player exposes them. This targeted approach means you get a downloader that matches the actual behavior of the site you are visiting.

### Features

- OK Porn-specific extension identity with targeted page matching
- Verified target status for ok.porn video pages
- Designed for the bare /video/<id>/ URL pattern
- Handles iframe player handoff from page shell to embedded player
- Surfaces m3u8 stream sources when available
- Surfaces direct mp4 file sources when available
- Local browser-based downloads for privacy
- Simple popup interface for media detection and download

### How It Works

1. Install the extension from the latest release.
2. Open Okporn 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 Okporn

1. Open your browser and navigate to an Okporn video page using a URL like 
2. Make sure the video player loads fully and playback begins.
3. Click the Okporn Downloader icon in your browser toolbar to open the popup.
4. The popup will detect the media sources available on the current page.
5. Review the detected sources and select the quality or format you want.
6. Click the download button next to your chosen source.
7. Wait for the download to process and the MP4 file to be generated.
8. Save the file to your preferred location on your device.

### Supported Formats

- Input: m3u8 streams and direct mp4 files exposed by the Okporn iframe player handoff
- 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

- Okporn visitors who want to save videos from the site's video pages
- Users who prefer a site-specific downloader over generic tools
- People who understand the ok.porn domain and its minimal URL structure
- Anyone looking for a privacy-focused downloader that works locally in the browser

### Common Use Cases

- Saving Okporn videos for offline viewing when you don't have internet access
- Archiving videos you have permission to keep for personal reference
- Building a local collection of content from ok.porn video pages
- Avoiding repeated streaming to save bandwidth on limited connections
- Keeping a backup copy of videos that may be removed from the platform

### Troubleshooting

**No media sources detected**
Make sure the video is playing on the page. The extension needs the iframe player to load and expose the media sources before it can detect them.

**The popup shows no content**
Refresh the page and try again. Sometimes the iframe handoff takes a moment to complete after the page loads.

**Download fails or produces a broken file**
Try a different quality option if available. Some streams may be more stable than others depending on the source.

**Extension icon appears grayed out**
Navigate to a supported ok.porn video page. The extension activates only on matching pages.

**Download speed is very slow**
The download speed depends on the stream source and your internet connection. Try a lower quality option for faster downloads.

### 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/okporn-downloader?via=apify](https://serp.ly/okporn-downloader?via=apify)

### Installation Instructions

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

### FAQ

**Does this extension work on all ok.porn pages?**
It is designed for video pages that use the /video/<id>/ URL pattern. Other page types may not be supported.

**What happens if the iframe player does not load?**
The extension needs the player to load and expose media sources. If the player fails to load, try refreshing the page.

**Can I download multiple videos at once?**
The extension handles one download at a time. You can queue additional downloads after the current one finishes.

**Is my data safe with this extension?**
Downloads happen locally in your browser. No video data is sent to external servers.

**Why does the extension sometimes show no sources?**
The site may use different player configurations for different videos. If no sources appear, the media path may be structured differently than expected.

### Notes

- Only download content you own or have explicit permission to save
- An internet connection is required for downloads
- The extension is built around the ok.porn domain and may not work on other sites
- This is a verified target candidate with ongoing development

### License

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

### About Okporn

Okporn is a video platform operating on the ok.porn domain, known for its minimal watch-page design where video playback is handled through an embedded iframe player. Okporn Downloader helps users save videos from this platform by working with the site's unique page structure and player handoff behavior.

# 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("how-to-download-videos/okporn-video-downloader-how-to-download-okporn-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("how-to-download-videos/okporn-video-downloader-how-to-download-okporn-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 how-to-download-videos/okporn-video-downloader-how-to-download-okporn-videos --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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