Spaces:
Sleeping
Sleeping
metadata
title: EGDownloader-API
sdk: docker
emoji: ⚡
colorFrom: red
colorTo: yellow
pinned: false
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
Video Download Middleware API
وسيط بين الـ client وبين n8n / GitHub Action pipeline.
الـ Flow الكامل
Client
│
├─ POST /download {"url": "https://youtube.com/..."}
│ ↓
│ API يبعت trigger لـ n8n (webhook "run gethup action")
│ ↓
│ n8n يشغل GitHub Action
│ ↓
│ GitHub Action يحمّل الفيديو وبعدين يبعت POST على
│ /n8n/callback/{job_id} ← الـ API بيستقبله ويحفظ الفيديو
│
├─ GET /status/{job_id} ← polling كل 5 ثواني مثلاً
│ ↓ لما status = "done"
└─ GET /file/{job_id} ← يجيب الفيديو
Endpoints
| Method | Path | الوصف |
|---|---|---|
POST |
/download |
ابدأ تحميل جديد |
GET |
/status/{job_id} |
اعرف الحالة |
GET |
/file/{job_id} |
حمّل الفيديو |
POST |
/n8n/callback/{job_id} |
n8n بيبعت النتيجة هنا |
GET |
/jobs |
قائمة كل الجوبز (للـ debug) |
DELETE |
/job/{job_id} |
احذف جوب وملفه |
GET |
/health |
health check |
مثال كامل
1. ابدأ التحميل
curl -X POST https://your-api/download \
-H "Content-Type: application/json" \
-d '{"url": "https://www.youtube.com/watch?v=3Yw2SGumGQ8"}'
# Response:
# {"job_id": "abc-123", "status": "processing"}
2. اعمل polling
curl https://your-api/status/abc-123
# بيرجع:
# {"job_id":"abc-123","status":"processing",...} ← لسه بيتحمل
# {"job_id":"abc-123","status":"done","download_url":"https://your-api/file/abc-123",...} ← خلص
3. حمّل الفيديو
curl -L https://your-api/file/abc-123 -o video.mp4
كيف تربطه بـ n8n
في n8n، الـ node اللي كان بيبعت النتيجة (downlode video1) محتاج يبعت على:
https://YOUR_API_URL/n8n/callback/{job_id}
الـ job_id بيوصل لـ n8n في الـ inputs لما الـ API يشغل الـ workflow.
n8n يدعم حالتين:
Case A – JSON (مجرد إشعار إن الأرتيفاكت جاهز):
{
"status": "success",
"run_id": "25934033751",
"filename": "video.mp4"
}
→ الـ API هيجيب الأرتيفاكت من GitHub بنفسه.
Case B – Raw binary (يبعت الفيديو نفسه): بس يبعت binary body + header:
x-filename: video.mp4
Content-Type: video/mp4
Environment Variables
PUBLIC_URL=https://your-api-public-url.com # مهم جداً عشان n8n يعرف يرد
GITHUB_TOKEN=ghp_...
GITHUB_REPO=expher510/AutoClip-Pipeline
WORKFLOW_FILE=video-download.yml
N8N_TRIGGER_URL=https://egauto-n8n.hf.space/webhook/run%20gethup%20action
تشغيل محلي
pip install -r requirements.txt
PUBLIC_URL=https://xxxx.ngrok.io uvicorn main:app --reload --port 8000
تشغيل على Hugging Face Spaces (Docker)
- ارفع الملفات على Space جديد (Docker SDK)
- حط الـ env vars في Settings → Repository secrets
- الـ port هو
7860