Free — MIT License

How to Bulk Import Thousands of Videos to Your Tube Site with TubePress

Guide 8 min read Updated May 2026

Key takeaways

  • TubePress imports 10,000+ videos per pass from CSV or JSON — roughly 10,000 records in about 47 seconds — and scales to 500,000+ videos in a single database.
  • Column mapping lets your file headers match TubePress fields during import, so you never have to reformat an existing catalog first.
  • Built-in duplicate detection skips videos you already have, and batch assignment applies categories, tags, performers, and studios across the whole import in one step.
  • The TubePress Catalogue adds one-click curated packs with AI title rewriting for unique SEO titles and automatic translation into your site languages.
  • Schedule recurring imports through the CronManager pseudo-cron API so fresh content lands automatically without manual uploads.

Manually adding videos one at a time is fine for a demo, but a real tube site launches with a populated catalog. This guide shows you how to bulk import videos to your tube site with TubePress — the differences between CSV and JSON, exactly how to map your columns, a realistic CSV example you can copy, how duplicate detection and batch assignment work, and how to keep fresh content flowing on a schedule. TubePress handles 10,000+ videos per import pass (around 10,000 records in roughly 47 seconds) and scales to databases of 500,000+ videos, so the same workflow works whether you are seeding a brand-new site or topping up a large one.

TubePress is a 100% free, open-source (MIT) CMS for adult tube sites, self-hosted on modern PHP 8.4 with no encoded files, no Composer, and no Node.js. If you have not installed it yet, the getting-started guide walks through the 5-step web installer, and you can poke around the live demo first.

CSV vs JSON: Which Import Format Should You Use?

TubePress accepts both CSV and JSON for mass import. They produce the same result — the choice comes down to where your data is coming from.

  • CSV is the right default. It is what most feed providers, spreadsheets, and existing tube databases export, it is trivial to edit in any spreadsheet app, and it maps cleanly to one video per row. Use CSV unless you have a specific reason not to.
  • JSON is the better fit when your source already produces structured data — an API response, a scraper's output, or a feed that carries nested fields. JSON also reads more naturally when a single video has many tags or performers, since those become arrays rather than delimited strings inside a cell.

Both formats run through the same import pipeline: parse the file, map fields, detect duplicates, apply batch assignments, and write the rows. So you can standardize on one format for your team and never think about it again.

Exact Column Mapping for a TubePress Video Import

The strength of the importer is that your file's headers do not have to match TubePress's internal field names. During import you map each source column to a TubePress field, so an existing catalog can be imported as-is without reformatting. The fields you will typically map cover the core video entity plus the relationships TubePress uses to organize content across its six entity types (videos, categories, tags, performers, studios, comments).

TubePress fieldWhat it holdsNotes
titleVideo title shown on the pageRequired; used for the slug and meta title
descriptionBody / summary textFeeds JSON-LD VideoObject and Open Graph
video_urlSource/embed or file URLThe playable source
thumbnail_urlPoster image URLUsed by the player and listings
durationLength in secondsNumeric
categoriesOne or more categoriesDelimited in CSV; array in JSON
tagsFree-form tagsDelimited in CSV; array in JSON
performersLinked performersCreated if they do not exist
studioSource studio/siteCreated if it does not exist

Categories, tags, performers, and studios are first-class entities, so any value you import that does not yet exist is created and linked automatically. That is what makes a single import file enough to stand up a fully organized site.

A Realistic CSV Example

Here is a small, copy-ready CSV. Note the header row (which you map on import), comma-delimited multi-values inside a quoted cell, and mild generic labels exactly as the product docs use them:

title,description,video_url,thumbnail_url,duration,categories,tags,performers,studio
"Beach Day POV","Sunny outdoor clip in full HD.",https://cdn.example.com/v/1001.mp4,https://cdn.example.com/t/1001.jpg,612,"Amateur,Outdoor","HD,POV","Alex Rivers","Riverside Media"
"Studio Session 12","Behind-the-scenes set.",https://cdn.example.com/v/1002.mp4,https://cdn.example.com/t/1002.jpg,845,"Studio","HD,Behind The Scenes","Jamie Lin","Riverside Media"
"Late Night Vol 3","Low-light indoor shoot.",https://cdn.example.com/v/1003.mp4,https://cdn.example.com/t/1003.jpg,1207,"Amateur","POV,Verified","Alex Rivers,Jamie Lin","Northside Films"

The same three rows as JSON simply nest the multi-value fields as arrays:

[
  {
    "title": "Beach Day POV",
    "description": "Sunny outdoor clip in full HD.",
    "video_url": "https://cdn.example.com/v/1001.mp4",
    "thumbnail_url": "https://cdn.example.com/t/1001.jpg",
    "duration": 612,
    "categories": ["Amateur", "Outdoor"],
    "tags": ["HD", "POV"],
    "performers": ["Alex Rivers"],
    "studio": "Riverside Media"
  }
]
If your column headers already match these field names, mapping is one click. If they don't, you simply point each source column at the right TubePress field in the import screen — no need to rename columns in your spreadsheet first.

Duplicate Detection: Import the Same Feed Twice, Safely

Re-running a feed is normal — providers add new clips to the same export every week. TubePress's built-in duplicate detection compares incoming rows against what is already in your database and skips the ones you already have, so a second pass only adds the genuinely new videos. This is what makes scheduled, repeated imports practical: you can point the importer at the same growing file or feed without piling up copies of the same clip.

Batch Assignment: Tag the Whole Import at Once

Beyond the per-row categories and tags in your file, TubePress lets you apply batch assignments to the entire import in one step. If you are importing a pack that is all from one studio, or you want every video in this run to carry a specific category or tag, set it once at import time instead of editing 10,000 rows. You can batch-assign categories, tags, performers, and studios — useful for organizing a launch by source, by niche, or by import date.

The TubePress Catalogue: One-Click Import with AI Title Rewriting

If you do not have your own feed yet, the TubePress Catalogue is the fastest way to fill a site. You browse curated video packs and import them with one click — no CSV to build. Two things make this better than dropping in a raw feed:

  • AI title rewriting generates unique, SEO-friendly titles for every imported video, so you are not publishing the same duplicate titles that other sites running the same pack have. Unique titles matter for search; see the tube site SEO guide for how this ties into your overall strategy.
  • Automatic translation renders titles into your site's configured languages, which pairs with TubePress's 30+ interface languages and per-page content translation.

New free accounts get 150 free credits to try Catalogue imports. Because TubePress itself is MIT-licensed and self-hosted, the Catalogue is an optional accelerator on top of the free CMS — not a paywall around features. That is a meaningful contrast with paid, encoded platforms; see the full comparison if you are still choosing a CMS.

Scheduling Recurring Imports with Cron

For a site that should stay fresh, you do not want to run imports by hand. TubePress ships a CronManager pseudo-cron API that the platform already uses for tasks like recalculating its CTR ranking every 10 minutes and running scheduled daily database backups. You can hang recurring imports off the same scheduling system so new content lands automatically.

The CTR ranking is worth knowing about here because it directly rewards a steady supply of fresh content. Each video's rank is computed as:

ctr_score = (views / (impressions + 50)) * EXP(-0.01 * days_age)

Newer videos get an age boost via the EXP(-0.01 * days_age) decay term, and the score recalculates every 10 minutes with bot filtering. A scheduled import keeps a stream of new days_age = 0 videos entering rotation, which is exactly the behavior the ranking is designed to surface. There are also 13 override hooks if you want to customize the scoring later.

A Repeatable Import Workflow

  1. Export or assemble your catalog as CSV (default) or JSON.
  2. Upload the file and map each source column to the matching TubePress field.
  3. Set any batch assignments — a studio, a launch category, a date tag — for the whole run.
  4. Let duplicate detection skip anything already in the database.
  5. Run the pass: roughly 10,000 videos land in about 47 seconds.
  6. For ongoing freshness, schedule the import via CronManager and/or use Catalogue packs with AI-rewritten titles.

That same loop scales from a first launch to a library of 500,000+ videos without changing your process. Once your catalog is in, point your energy at SEO and monetization — content volume is just the foundation. You can review every importer and ranking detail on the features page.

Ready to bulk import your catalog? Download TubePress free and have a populated tube site live in minutes.

FAQ

Frequently asked questions

How many videos can TubePress import at once?

TubePress imports 10,000+ videos per pass from a single CSV or JSON file — roughly 10,000 records in about 47 seconds — and a site can hold 500,000+ videos overall. You can run repeated passes, and duplicate detection ensures re-running the same feed only adds genuinely new videos.

Should I use CSV or JSON to import videos?

Use CSV by default — it is what most spreadsheets, feeds, and existing tube databases export, and it maps one video per row. Choose JSON when your source already produces structured data (an API or scraper) or when videos carry many tags and performers, since JSON stores those as arrays instead of delimited cells. Both run through the same import pipeline.

Do my CSV column names have to match TubePress's fields?

No. During import you map each source column to the correct TubePress field, so you can import an existing catalog as-is without renaming columns. If your headers already match TubePress field names like title, video_url, categories, and tags, mapping is essentially one click.

How does TubePress avoid importing duplicate videos?

Built-in duplicate detection compares incoming rows against your existing database and skips videos you already have. This makes scheduled, repeated imports of the same growing feed safe — you only add new content rather than piling up copies of the same clip.

What is the TubePress Catalogue and what does AI title rewriting do?

The Catalogue lets you browse curated video packs and import them with one click, no CSV needed. AI title rewriting generates unique, SEO-friendly titles for every imported video so you are not publishing the same duplicate titles as other sites running the same pack, and titles can be auto-translated into your site's languages. New free accounts get 150 free credits.

Can I schedule video imports to run automatically?

Yes. TubePress includes a CronManager pseudo-cron API — the same scheduling system it uses for recalculating CTR rankings every 10 minutes and running daily database backups. You can schedule recurring imports so fresh content lands automatically, which also feeds the CTR ranking's age boost for new videos.

Ready to launch your adult tube site?

TubePress is 100% free, open-source and yours to keep — no license fees, no lock-in.