Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Streamtape Direct Link Resolver

Resolve a Streamtape file ID or URL into a direct tapecontent.net MP4 link. A small Node server performs the resolution; the bundled UI resolves and plays the stream in the browser.

Input examples: LQYwpG81BwiRGOv or https://streamtape.to/v/LQYwpG81BwiRGOv

Architecture

flowchart TB
  subgraph client ["Browser"]
    UI["public/app.js"]
    VID["<video>"]
  end

  subgraph server ["Node server :8790"]
    IDX["src/server/index.js"]
    API["POST /api/resolve"]
    RES["src/streamtape/resolve.js"]
  end

  subgraph upstream ["Upstream"]
    PAGE["streamtape.to/v/{id}"]
    GATE["streamtape.to/get_video?…"]
    CDN["*.tapecontent.net"]
  end

  UI -->|videoId| API
  API --> RES
  RES -->|GET| PAGE
  PAGE -->|HTML + obfuscated JS| RES
  RES -->|GET + Referer| GATE
  GATE -->|302 Location| RES
  RES -->|Range probe| CDN
  RES -->|directLink + title| API
  API --> UI
  UI -->|directLink| VID
  VID -->|GET| CDN
Loading
Layer Host Role
View page streamtape.to/v/{id} Serves signed get_video parameters inside obfuscated inline JavaScript
Gate streamtape.to/get_video Validates token; responds with 302 to the CDN
CDN *.tapecontent.net Delivers the MP4 (Access-Control-Allow-Origin: *)

How resolution works

Streamtape does not embed the CDN URL in the page. The view page ships decoy links and builds the real get_video path at runtime through substring obfuscation. The resolver replays that client-side logic, then follows the gate redirect.

sequenceDiagram
  participant API as /api/resolve
  participant Res as resolve.js
  participant Page as streamtape.to
  participant Gate as get_video
  participant CDN as tapecontent.net

  API->>Res: resolve(videoId)
  Res->>Page: GET /v/{id}
  Page-->>Res: HTML
  Res->>Res: eval innerHTML assignments → get_video path
  Res->>Gate: GET …&stream=1, Referer /v/{id}
  Gate-->>Res: 302 Location
  Res->>CDN: Range bytes=0-15
  CDN-->>Res: 206 + ftyp
  Res-->>API: { videoId, title, directLink }
Loading
  1. Fetch view pageGET https://streamtape.to/v/{id}.
  2. Decode obfuscation — locate the document.getElementById(…).innerHTML block, execute it in an isolated document mock, and read the element wired to &stream=1 in the player script.
  3. Follow gate — request the decoded get_video URL with redirect: manual and Referer set to the view page. Expect 302; read Location.
  4. Probe CDNRange: bytes=0-15 must return 206 with an MP4 ftyp atom. Host must end with tapecontent.net.

expires, ip, and token are issued server-side per request. Resolve again when a link expires.

How playback works

There is no proxy. The CDN allows cross-origin access (Access-Control-Allow-Origin: *), so the UI assigns the direct link to <video src> and the browser fetches from tapecontent.net itself.

sequenceDiagram
  participant UI as app.js
  participant CDN as tapecontent.net

  UI->>UI: POST /api/resolve
  UI->>UI: video.src = directLink
  UI->>CDN: GET (browser Range requests)
  CDN-->>UI: 200 / 206 video/mp4
  UI->>UI: video.play()
Loading

The same directLink works in vlc, mpv, ffmpeg, or any tool that accepts a plain HTTPS URL.

Quick start

Requirements: Node.js 18+

npm start

Open http://localhost:8790, enter a file ID or URL, and resolve.

curl -s -X POST http://localhost:8790/api/resolve \
  -H 'Content-Type: application/json' \
  -d '{"videoId":"LQYwpG81BwiRGOv"}'

Optional: PORT=8790 (default 8790).

Project layout

public/                 Web UI (index.html, app.js, app.css)
public/lib/             Client-only helpers (timers)
src/lib/                Shared helpers (parse-video-id, http)
src/streamtape/
  resolve.js            Page fetch → decode → gate → CDN probe
src/server/
  index.js              Static files + POST /api/resolve

API

POST /api/resolve

{ "videoId": "LQYwpG81BwiRGOv" }

videoId accepts a bare file ID or a /v/ / /e/ URL.

200

{
  "videoId": "LQYwpG81BwiRGOv",
  "title": "Example Title",
  "directLink": "https://….tapecontent.net/radosgw/…/file.mp4?stream=1"
}

400 — invalid input, page failure, gate failure, or CDN probe failure.

Disclaimer

This project is provided for educational and research purposes only. It documents how a third-party streaming site exposes CDN delivery through client-side page logic. It is not affiliated with, endorsed by, or sponsored by Streamtape or any related service.

You are responsible for complying with applicable laws, terms of service, and copyright obligations in your jurisdiction. Do not use this software to access, distribute, or reproduce content you do not have the right to use. The authors accept no liability for misuse.

About

Streamtape file ID or URL to tapecontent.net MP4. Fetches /v/{id}, replays get_video innerHTML obfuscation, follows the gate 302, range-probes CDN for ftyp atom. Node HTTP server serves static UI, POST /api/resolve JSON API, parse-video-id input parser, resolve timers, direct HTML5 video src to CDN.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages