File size: 2,118 Bytes
d5360e3
 
4713649
 
 
d5360e3
 
 
 
4713649
 
d5360e3
4713649
 
d5360e3
4713649
 
 
d5360e3
4713649
 
d5360e3
4713649
 
 
 
 
 
d5360e3
4713649
d5360e3
4713649
d5360e3
4713649
 
 
 
 
 
 
 
 
 
d5360e3
4713649
d5360e3
4713649
 
 
 
d5360e3
4713649
d5360e3
4713649
 
d5360e3
4713649
 
d5360e3
4713649
 
 
 
 
d5360e3
4713649
 
d5360e3
4713649
 
 
d5360e3
4713649
 
d5360e3
4713649
 
 
d5360e3
4713649
 
d5360e3
4713649
d5360e3
 
 
4713649
 
 
d5360e3
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
const express = require("express");
const { spawn } = require("child_process");
const fs = require("fs");
const path = require("path");
const crypto = require("crypto");

const app = express();
const PORT = 7860;

// TEMP folder
const TMP = "/tmp";

// simple cleanup helper
const cleanup = (file) => {
    try {
        if (fs.existsSync(file)) fs.unlinkSync(file);
    } catch {}
};

app.get("/", async (req, res) => {
    const url = req.query.url;

    if (!url) {
        return res.json({
            status: false,
            message: "Use ?url=video_link"
        });
    }

    const id = crypto.randomBytes(6).toString("hex");

    const outputFile = path.join(TMP, `${id}.mp4`);

    // 🔥 IMPORTANT: NO ENCODING (LOW CPU)
    const ffmpegArgs = [
        "-y",
        "-user_agent", "Mozilla/5.0",
        "-i", url,
        "-c", "copy",
        "-bsf:a", "aac_adtstoasc",
        "-movflags", "+faststart",
        outputFile
    ];

    const ffmpeg = spawn("ffmpeg", ffmpegArgs);

    let timeout = setTimeout(() => {
        ffmpeg.kill("SIGKILL");
        cleanup(outputFile);
    }, 1000 * 60 * 8); // 8 min safety timeout

    ffmpeg.stderr.on("data", () => {});

    ffmpeg.on("close", (code) => {
        clearTimeout(timeout);

        if (code !== 0 || !fs.existsSync(outputFile)) {
            cleanup(outputFile);

            return res.json({
                status: false,
                error: "Download failed or blocked stream"
            });
        }

        // pretend HF space file hosting
        const fileUrl = `https://${req.headers.host}/file/${id}`;

        return res.json({
            status: true,
            download: fileUrl
        });
    });
});

// serve temp files
app.get("/file/:id", (req, res) => {
    const file = path.join(TMP, `${req.params.id}.mp4`);

    if (!fs.existsSync(file)) {
        return res.json({
            status: false,
            error: "File expired or not found"
        });
    }

    res.download(file, "video.mp4", () => {
        cleanup(file);
    });
});

app.listen(PORT, () => {
    console.log("Running on", PORT);
});