# Hornybutt Video Downloader | How to Download Hornybutt Videos (`pornvidsdownload/hornybutt-video-downloader-how-to-download-hornybutt-videos`) Actor

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

## Hornybutt Video Downloader | How to Download Hornybutt Videos

> Download HornyButt videos with a browser workflow tuned for iframe pages and RubyVidHub/StreamRuby media hosts.

### Get it Here

Get it here: https://serp.ly/hornybutt-downloader

![Hornybutt Downloader](https://apps.serp.co/media/optimized-products/hornybutt-downloader-homescreen-adult-7917cae81d.webp)

Hornybutt Downloader is a site-specific browser extension designed to save videos from HornyButt pages. Instead of hunting through page source code or manually tracing embed chains, this tool follows the iframe player handoff and resolves the underlying media stream from RubyVidHub or StreamRuby hosts.

- Hornybutt-specific branding and product page
- Verified target fit for hornybutt.com
- Supports RubyVidHub and StreamRuby media host chains
- Iframe-aware extraction workflow
- Stream hints for both m3u8 playlists and mp4 files
- Browser-native download flow with no external software required
### Table of Contents

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

### Why Hornybutt Downloader

HornyButt pages often hide the actual video stream behind iframe embeds that hand off playback to RubyVidHub or StreamRuby media hosts. Generic download tools struggle with this pattern because they expect the video source to be directly on the page, not buried inside an embedded player from a separate domain.

This extension is built specifically for the HornyButt flow. It knows where to look for the iframe, how to follow the RubyVidHub or StreamRuby media chain, and how to extract the underlying stream so you can save it as an MP4 file. Instead of guessing which host is serving the video, the extension handles the handoff automatically.

### Features

- HornyButt-specific video detection and download workflow
- Iframe-aware extraction tuned for embed-based player handoff
- RubyVidHub and StreamRuby media host chain support
- Stream hints for both m3u8 playlists and mp4 files
- Browser-native download flow with progress feedback
- No external software or command-line tools required
- Lightweight extension footprint with focused functionality
- Regular updates through GitHub Releases

### How It Works

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

1. Install the Hornybutt Downloader extension from the latest GitHub release.
2. Navigate to the HornyButt video page you want to save.
3. Allow the page to fully load, including the embedded iframe player.
4. Start video playback so the extension can detect the media stream.
5. Click the extension icon in your browser toolbar to open the popup.
6. Review the detected media source and select your preferred quality.
7. Click the download button to begin the extraction process.
8. Save the resulting MP4 file to your local device.

### Supported Formats

- Input: m3u8 playlists and mp4 streams from HornyButt, RubyVidHub, and StreamRuby 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

- HornyButt viewers who want to save videos for offline playback
- Users frustrated with generic downloaders that cannot handle iframe embeds
- Anyone who wants a browser-native workflow without external software
- Collectors who prefer local archives over streaming-only access

### Common Use Cases

- Saving a favorite HornyButt video to watch offline without internet
- Archiving videos that may be removed or made private later
- Building a personal collection of HornyButt content
- Avoiding repeated buffering by downloading for local playback
- Transferring videos to mobile devices or media servers

### Troubleshooting

**The extension does not detect any video on the page.**
Make sure the video player has fully loaded and playback has started. Some pages require interaction before the iframe embed activates.

**The download starts but fails before completing.**
Check your internet connection and try again. If the issue persists, the stream source may have changed or the video may no longer be available.

**The popup shows no media sources.**
Refresh the page and ensure the embedded player is visible. The extension needs to see the iframe to begin the extraction workflow.

**I see RubyVidHub or StreamRuby in the popup but no download option.**
These are media host domains that the extension follows automatically. If no stream is detected, the host chain may have changed or the video may require authentication.

**The extension does not work after an update.**
Clear your browser cache and reinstall the latest version from GitHub Releases. Some updates may require a fresh installation.

### 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/hornybutt-downloader](https://serp.ly/hornybutt-downloader)

### Installation Instructions

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

### FAQ

**What sites does this extension work with?**
It is built for HornyButt on hornybutt.com, with additional support for RubyVidHub and StreamRuby media hosts that often serve the actual video streams.

**Why do some pages require starting playback first?**
HornyButt embeds often load the iframe player only after user interaction. Starting playback ensures the extension can detect the media stream.

**What video formats are supported for download?**
The extension targets m3u8 playlists and mp4 streams, which are the most common formats used by HornyButt and its media host chain.

**Is this extension free to use?**
There is a free trial with 3 downloads. Unlimited downloads require a paid license through the product page.

**Does the extension work with other adult video sites?**
No, it is specifically designed for HornyButt and its known media host chain. It will not work on other platforms.

### Notes

- Only download content you own or have explicit permission to save
- An internet connection is required for downloads
- HornyButt pages may change their player structure over time, which could affect detection
- The extension follows the iframe embed chain automatically and does not require manual host tracing

### License

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

### About Hornybutt

HornyButt is a video platform focused on butt-centric adult content, featuring a large library of scenes and clips. This extension helps viewers save their favorite videos directly from the browser without needing to navigate the iframe and stream host chain manually.

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

```

## MCP server setup

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

```

## OpenAPI specification

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