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
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
| 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: *) |
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 }
- Fetch view page —
GET https://streamtape.to/v/{id}. - Decode obfuscation — locate the
document.getElementById(…).innerHTMLblock, execute it in an isolateddocumentmock, and read the element wired to&stream=1in the player script. - Follow gate — request the decoded
get_videoURL withredirect: manualandRefererset to the view page. Expect 302; readLocation. - Probe CDN —
Range: bytes=0-15must return 206 with an MP4ftypatom. Host must end withtapecontent.net.
expires, ip, and token are issued server-side per request. Resolve again when a link expires.
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()
The same directLink works in vlc, mpv, ffmpeg, or any tool that accepts a plain HTTPS URL.
Requirements: Node.js 18+
npm startOpen 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).
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
{ "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.
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.