npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

tabligh

v0.1.1

Published

Tabligh — auto-generate cinematic karaoke Quran reels and publish them to TikTok/Instagram/Facebook/YouTube

Readme

🕌 Tabligh

بَلِّغُوا عَنِّي وَلَوْ آيَةً

"میری طرف سے پہنچا دو، خواہ ایک ہی آیت ہو۔" — نبی محمد ﷺ (بخاری)

سینمائی، کیراوکی کے ساتھ ہم آہنگ قرآنی ریلز خودکار طور پر بنائیں اور انہیں TikTok، Instagram، Facebook اور YouTube پر شائع کریں — ایک شیڈول کے مطابق، بغیر کسی محنت کے۔

کچھ منتخب نہ کریں۔ ایک شیڈولر بے ترتیب طور پر ایک سورہ + اقتباس چنتا ہے، عین وہی تلاوت حاصل کرتا ہے، ایک پُرسکون پس منظر پر لفظ بہ لفظ روشن ہونے والی عمودی ویڈیو رینڈر کرتا ہے، اور اسے دن میں کئی بار پوسٹ کرتا ہے۔

License: MIT Node TypeScript

🌍 English · العربية · Français · اردو · Bahasa Indonesia · Türkçe · Bahasa Melayu · বাংলা · فارسی · Español

▶ اسے چلتے ہوئے دیکھیں: @eQurany on TikTok — وہاں کی ہر ویڈیو اس پروجیکٹ کے ذریعے خودکار طور پر بنائی گئی ہے۔

▶ آواز کے ساتھ چلائیں

https://github.com/user-attachments/assets/1d1e5e55-ae46-41fc-b981-dc42d18fec51

https://github.com/user-attachments/assets/5f5ca08b-d181-4ff7-91ce-85c612e32dd8

https://github.com/user-attachments/assets/e6789c16-c0b7-4a0e-9f29-d2d24c2a9746

تین بلٹ اِن ٹیمپلیٹس — TEMPLATE سے یا پینل/مینو میں تبدیل کریں۔ ہر ریل اپنے پس منظر کو بدلتی ہے، اور glass کو ہر ویڈیو کے لیے ایک منفرد ویوفارم ملتا ہے۔


✨ خصوصیات

  • 🎬 سینمائی 1080×1920 ریلز — مکمل بھرا ہوا اسٹاک فوٹو پس منظر (Pexels/Unsplash) جس پر ایک مضبوط پڑھنے کے قابل اوورلے، ہلکے سے تیرتے ہوئے ذرات، اور ایک سست Ken-Burns حرکت ہے۔
  • 🎨 تین بصری ٹیمپلیٹس — classic (تصویر + اسکرم)، glass (ایک مستقل دھندلا گلاس مورفزم کارڈ جس پر براہِ راست آڈیو ویوفارم ہے)، اور noor (گرم "نورِ الٰہی" — سنہری ہالہ + مطلا اعداد)۔ TEMPLATE سیٹ کریں یا اسے پینل/مینو میں تبدیل کریں۔
  • 🕋 بسملہ کا آغاز — جو اقتباس آیت 1 سے شروع ہوتا ہے وہ ہمیشہ قاری کی اپنی بسملہ سے شروع ہوتا ہے (اُنہی کی آواز میں تلاوت شدہ)؛ اختیاری طور پر اسے ہر اقتباس سے پہلے شامل کریں (BASMALA=always)۔ سورہ التوبہ اور سورہ الفاتحہ کو درست طریقے سے سنبھالا جاتا ہے۔
  • 🎤 کیراوکی لفظ بھرائی — ہر لفظ تلاوت کے ساتھ ہم آہنگ ہو کر روشن ہوتا ہے (دائیں→بائیں)، تاکہ ناظرین ساتھ ساتھ پیروی کر سکیں۔
  • 🖋️ مستند عربی خطاطی — درست شکل کے ساتھ مکمل عثمانی متن صاف جدید Mada فونٹ میں؛ سرخیاں Aref Ruqaa خطاطی میں۔
  • 🎯 عین ہم آہنگی، بغیر کسی AI کے — آڈیو everyayah.com سے فی آیت فائلوں کے طور پر آتی ہے، تو ہر آیت کا وقت عین درست اور مفت ہے (کوئی ٹرانسکرپشن نہیں)۔
  • 🔀 خودکار مواد کا انتخاب — بے ترتیب سورہ + ایک بے ترتیب متواتر اقتباس (لمبائی قابلِ ترتیب)؛ چھوٹی سورتیں مکمل رینڈر ہوتی ہیں۔
  • 🌇 محفوظ، بارونق پس منظر — 50 کلیدی الفاظ کا ایک منتخب کردہ ذخیرہ (مساجد، فطرت، سمندر، آسمان…) نیز ایک فلٹر جو کسی بھی ایسی تصویر کو ہٹا دیتا ہے جس میں لوگ ہوں یا کوئی نامناسب چیز ہو۔ اپنا ذریعہ منتخب کریں: Pexels، Unsplash، یا اپنا مقامی تصویری فولڈر۔
  • 🖥️ انٹرایکٹو کمانڈ سینٹر — ریلز بنانے، پینل شروع/بند کرنے، قطار کا انتظام کرنے، تاریخ دیکھنے، ترتیبات میں ترمیم کرنے، اور ایک ہیلتھ چیک چلانے کے لیے ایک شاندار ٹرمینل UI کے لیے tabligh (بغیر دلیل کے) چلائیں۔ EN/AR/FR میں مقامی۔
  • 🎞️ دستخطی اختتام — اقتباس مدھم ہو جاتا ہے اور ایک صلوٰۃ (آپ کے لوگو کے ساتھ) اسی منظر پر اوپر کی طرف سرکتی ہے، پھر پوری ویڈیو سیاہی میں مدھم ہو جاتی ہے۔
  • 📤 کثیر پلیٹ فارم اشاعت — TikTok، Instagram Reels، Facebook Reels اور YouTube Shorts Buffer کے ذریعے، ہر پلیٹ فارم کے لیے env سے قابلِ کنٹرول۔
  • 🎛️ سیلف ہوسٹڈ کنٹرول پینل — ہر ترتیب کا انتظام کرنے، ریل بنانے/پیش نظارہ کرنے/پوسٹ کرنے، اقتباسات کو قطار میں لگانے، اور تاریخ + تجزیات دیکھنے کے لیے پاس ورڈ سے محفوظ ویب UI — سب کچھ براہِ راست، بغیر دوبارہ ڈیپلائے کیے۔ مقامی (EN/AR/FR، مکمل RTL)۔
  • ⏰ سیٹ کرو اور بھول جاؤ شیڈولر — ایک ہمیشہ چلنے والا عمل آپ کے ٹائم زون میں دن میں N بار پوسٹ کرتا ہے۔
  • 🧹 ڈسک دوست — مقامی فائلیں پوسٹ کرنے کے فوراً بعد مٹا دی جاتی ہیں؛ کلاؤڈ آبجیکٹس خودکار طور پر صاف کر دیے جاتے ہیں۔
  • 🐳 ایک کنٹینر ڈیپلائے — Dockerfile + Coolify، Fly، Railway، یا کسی بھی Docker ہوسٹ پر بہترین کام کرتا ہے۔

🧠 یہ کیسے کام کرتا ہے

config / random pick
        │
        ▼
Quran text + translation  ──►  everyayah per-ayah audio (exact timing)
   (alquran.cloud)                       │
        │                                ▼
        └────────────►  TimedAyah[]  ──►  background (Pexels/Unsplash, person-filtered)
                                          │
                                          ▼
              Chromium renders animated frames (karaoke, particles, outro)
                                          │
                                          ▼
                    ffmpeg → MP4 (1080×1920) + recitation + silent outro
                                          │
                                          ▼
              object storage (public URL)  ──►  Buffer  ──►  TikTok / IG / FB / YT
                                          │
                                          ▼
                              cleanup (local now, cloud after ingest)

🚀 فوری آغاز (مقامی)

ضروریات: آپ کے PATH پر Node ≥ 20 اور ffmpeg۔ (Chromium خودکار طور پر Puppeteer کے ذریعے ڈاؤن لوڈ ہو جاتا ہے۔)

git clone https://github.com/911RS/tabligh.git
cd tabligh
npm install
cp .env.example .env        # fill in what you need (see below)

# Render a specific passage to work/…/reel.mp4 (no publishing)
npm start render -- --surah 112 --from 1 --to 4 --reciter husary --translation en.sahih

# Render a random passage
npm start random

# Everything the CLI can do
npm start

مکمل شدہ reel.mp4 (نیز وقت بند ir.json) work/<surah>_<range>_<reciter>__<tag>/ میں آتا ہے۔


⚙️ ترتیب (Configuration)

سب کچھ ماحولیاتی متغیرات (.env) سے چلتا ہے۔ سوائے اس کے کہ جہاں کسی خصوصیت کو کلید کی ضرورت ہو، تمام اختیاری ہیں۔

| متغیر | مقصد | ڈیفالٹ | |---|---|---| | TEMPLATE | ریل کا بصری انداز: classic / glass / noor | classic | | BASMALA | بسملہ کا آغاز: off (صرف آیت 1 پر) / always (ہر اقتباس) | off | | BACKGROUND_SOURCE | auto / pexels / unsplash / local | auto | | BACKGROUND_LOCAL_DIR | آپ کی اپنی عمودی تصاویر کا فولڈر (جب source = local) | (خالی) | | PEXELS_API_KEY / UNSPLASH_ACCESS_KEY | اسٹاک فوٹو پس منظر | (غیر متعین → گریڈینٹ فال بیک) | | BUFFER_ACCESS_TOKEN | اشاعت کے لیے Buffer API ٹوکن | (غیر متعین → کوئی اشاعت نہیں) | | BUFFER_TIKTOK_CHANNEL_IDS | کوما سے الگ کیے گئے TikTok چینل ids | (خالی) | | BUFFER_INSTAGRAM_CHANNEL_IDS | Instagram Reels چینل ids | (خالی) | | BUFFER_FACEBOOK_CHANNEL_IDS | Facebook Reels چینل ids | (خالی) | | BUFFER_YOUTUBE_CHANNEL_IDS | YouTube Shorts چینل ids | (خالی) | | MINIO_* | S3 کے ہم آہنگ اسٹوریج (عوامی بکٹ جہاں سے Buffer حاصل کرتا ہے) | بکٹ tabligh، پورٹ 9000 | | TZ / PUBLISH_TIMES | ٹائم زون + دن کے اوقات جن پر خودکار پوسٹ کرنا ہے | Africa/Tunis / 07:00,13:00,19:00 | | KARAOKE_ENABLED | تلاوت کے ساتھ ہم آہنگ لفظ بہ لفظ بھرائی | true | | TEXT_FILL_COLOR | تلاوت شدہ (بھرے ہوئے) متن کا رنگ | #ffffff | | WATERMARK_ENABLED / WATERMARK_HANDLE | کونے کا لوگو واٹر مارک (assets/logo.png) | true / (خالی) | | FULL_SURAH_MAX_AYAHS | اس سے چھوٹی سورتیں مکمل رینڈر ہوتی ہیں | 7 | | RANDOM_MIN_AYAHS / RANDOM_MAX_AYAHS | بے ترتیب موڈ کے لیے اقتباس کی لمبائی | 5 / 10 | | MAX_VIDEO_SECONDS | تلاوت کی لمبائی کی حد (اختتام کے بغیر)؛ فٹ ہونے کے لیے آخری آیات کو کاٹتا ہے (min کو زیر کرتا ہے) | 0 (کوئی حد نہیں) | | RETENTION_DAYS / MINIO_RETENTION_HOURS | صفائی کے وقفے | 7 دن / 24 گھنٹے | | PORT / TRIGGER_TOKEN | HTTP سرور + ٹرگر اینڈپوائنٹ کے لیے راز | 1998 / (غیر متعین → غیر فعال) | | PANEL_ENABLED | کنٹرول پینل پیش کریں (false = بغیر سر، صرف شیڈولر) | true | | UI_LANG | انٹرایکٹو ٹرمینل مینو کی زبان (en / ar / fr) | en |

مکمل تشریح شدہ فہرست کے لیے .env.example دیکھیں۔ یہ اقدار صرف پہلی بار چلنے پر اسٹور کو seed کرتی ہیں — اس کے بعد، ترتیبات کو پینل یا tabligh مینو میں براہِ راست منظم کریں۔

قاری: husary, minshawy, abdulbasit, hudhaify, ayyoub, shuraym, husary-muallim, tunaiji — یا کوئی بھی خام everyayah فولڈر۔ src/quran/reciters.ts دیکھیں۔

ترجمے: کوئی بھی alquran.cloud ایڈیشن id، مثلاً en.sahih, fr.hamidullah, یا صرف عربی کے لیے ""۔


🖥️ انٹرایکٹو کمانڈ سینٹر

انٹرایکٹو مینو کھولنے کے لیے ٹرمینل میں tabligh بغیر کسی دلیل کے چلائیں — ہر چیز کے لیے ایک خود کفیل کنٹرول سینٹر:

tabligh                 # opens the menu (in a TTY)
  • ایک ریل بنائیں — بے ترتیب یا ایک اقتباس چنیں؛ مقامی طور پر رینڈر کرتا ہے (براہِ راست پیش رفت کے ساتھ)، پھر ویڈیو کھولنے یا اسے شائع کرنے کی پیشکش کرتا ہے۔
  • ابھی شائع کریں — ایک ہی مرحلے میں بنائیں + شائع کریں۔
  • کنٹرول پینل — ویب پینل کو بطور بیک گراؤنڈ سروس شروع / بند / دوبارہ شروع کریں، اسے اپنے براؤزر میں کھولیں، یا اس کے لاگز دیکھیں — کوئی الگ عمل سنبھالنے کی ضرورت نہیں۔
  • قطار — وہ اقتباسات شامل/ہٹائیں جنہیں شیڈولر بے ترتیب انتخاب سے پہلے چلاتا ہے۔
  • تاریخ اور تجزیات — کل تعداد، پلیٹ فارم کے لحاظ سے تفصیل، حالیہ پوسٹس۔
  • ترتیبات — زبان، پس منظر کا ذریعہ (بشمول مقامی فولڈر)، شیڈولر آن/آف، شیڈول، مواد، چینلز، اور API کلیدیں — سب براہِ راست لاگو ہوتی ہیں۔
  • ڈاکٹر — ایک نظر میں ہیلتھ چیک (ffmpeg، Chrome، کلیدیں، اسٹوریج، ڈسک)۔

English / العربية / Français میں مقامی (UI_LANG سیٹ کریں یا اسے ترتیبات میں تبدیل کریں)۔ غیر انٹرایکٹو سیاق و سباق (pipes، Docker، CI) اس کے بجائے کلاسک مدد پرنٹ کرتے ہیں، تو اسکرپٹنگ متاثر نہیں ہوتی۔ tabligh menu (اسے مجبور کریں) اور tabligh doctor (صرف ہیلتھ چیک چلائیں) بھی موجود ہیں۔

🎛️ ویب کنٹرول پینل اور CLI

پاس ورڈ سے محفوظ پینل کے لیے ایپ کی جڑ (http://localhost:1998) کھولیں:

  • پہلی بار چلنے پر ایک سیٹ اپ اسکرین دکھائی دیتی ہے تاکہ آپ اپنا پاس ورڈ بنائیں (یا ٹرمینل وزرڈ کے لیے tabligh init چلائیں — اب یہ آپ کے ڈیش بورڈ URL کو دکھا کر اور پینل شروع کرنے کی پیشکش کر کے ختم ہوتا ہے)۔
  • ڈیش بورڈ — حیثیت، ایک کلک ابھی بنائیں / + شائع کریں، تازہ ترین پیش نظارہ۔
  • بنائیں — ایک اقتباس چنیں یا بے ترتیب چلیں، پوسٹ کرنے سے پہلے پیش نظارہ کریں۔
  • ترتیبات — شیڈول (ٹائم زون + وقت منتخب کنندہ)، مواد (ترجمہ، آیات کی تعداد، زیادہ سے زیادہ لمبائی)، برانڈنگ (کیراوکی، بھرائی کا رنگ، ذرات، متحرک پس منظر، اختتامی پروموشن)، پلیٹ فارم چینل ids، API کلیدیں اور اسٹوریج — براہِ راست لاگو ہوتی ہیں۔
  • قطار — مخصوص اقتباسات کی منصوبہ بندی کریں؛ شیڈولر انہیں بے ترتیب انتخاب سے پہلے چلاتا ہے۔
  • تاریخ / تجزیات — ہر رینڈر + پوسٹ، کل تعداد، پلیٹ فارم کے لحاظ سے، حالیہ لاگز۔
  • زبان — پینل کو English، العربية (RTL) اور Français کے درمیان تبدیل کریں۔

لاگ اِن کی شرح محدود ہے (5 کوششیں → 15 منٹ کے لیے بند)۔ سرور سے پاس ورڈ ری سیٹ کریں tabligh set-password <new> کے ساتھ (مثلاً docker exec <container> tabligh set-password …)۔

ترتیبات اسٹور میں رہتی ہیں اور /app/data والیوم پر برقرار رہتی ہیں؛ .env انہیں صرف پہلی بار چلنے پر seed کرتا ہے۔

🌐 پینل تک رسائی

ایپ کا اپنا کوئی ڈومین نہیں ہے — یہ صرف تمام انٹرفیسز پر ایک پورٹ (ڈیفالٹ 1998، PORT سے تبدیل کریں) پر سنتی ہے۔ آپ کون سا URL کھولتے ہیں اس کا انحصار اس پر ہے کہ یہ کہاں چل رہی ہے:

| یہ کہاں چلتی ہے | آپ جو URL کھولتے ہیں | HTTPS؟ | |---|---|---| | آپ کا اپنا کمپیوٹر (npm / مقامی) | http://localhost:1998 | — (مقامی، ٹھیک ہے) | | کلاؤڈ VPS، خام پورٹ ظاہر | http://<your-server-ip>:1998 | ❌ نہیں | | ریورس پراکسی کے پیچھے VPS | https://yourdomain.com | ✅ پراکسی اسے فراہم کرتی ہے |

  • مقامی طور پر، سیٹ اپ وزرڈ شروع پر عین لنک پرنٹ کرتا ہے (http://localhost:1998)۔
  • کسی VPS پر، http://<server-ip>:1998 تک پہنچنے کے لیے آپ کے فائر وال / سیکیورٹی گروپ کو داخل ہونے والے 1998 کی اجازت دینا بھی ضروری ہے۔
  • ⚠️ خام پورٹ کو انٹرنیٹ پر ظاہر نہ چھوڑیں۔ پینل سادہ HTTP پیش کرتا ہے، تو آپ کا لاگ اِن پاس ورڈ بغیر خفیہ کاری کے سفر کرے گا۔ اسے ایک ریورس پراکسی کے پیچھے رکھیں جو TLS ختم کرتی ہو:
    • Coolify (تجویز کردہ) — ایپ پر ایک ڈومین سیٹ کریں اور اسے پورٹ 1998 کی طرف اشارہ کریں؛ Coolify کا Traefik روٹنگ اور ایک Let's Encrypt سرٹیفکیٹ خودکار طور پر سنبھالتا ہے۔
    • Nginx / Caddy — آپ کے ڈومین + سرٹیفکیٹ کے پیچھے proxy_pass http://127.0.0.1:1998۔

ایپ کو کبھی اپنے عوامی ڈومین کو جاننے کی ضرورت نہیں؛ پراکسی ڈومین اور HTTPS کی مالک ہے اور اندرونی طور پر 1998 کی طرف آگے بھیجتی ہے۔


📤 اشاعت

اشاعت Buffer کے ذریعے ہوتی ہے، جو ہر منسلک پلیٹ فارم تک پھیلا دیتا ہے۔

  1. ایک Buffer اکاؤنٹ بنائیں اور اپنے TikTok / Instagram / Facebook / YouTube چینلز منسلک کریں۔
  2. BUFFER_ACCESS_TOKEN سیٹ کریں، پھر اپنے چینل ids کی فہرست کے لیے npm start channels چلائیں۔
  3. ids کو متعلقہ BUFFER_*_CHANNEL_IDS متغیرات میں ڈالیں (کوئی بھی ذیلی مجموعہ — صرف TikTok بھی ٹھیک ہے)۔
  4. npm start random -- --publish (یا شیڈولر کو کرنے دیں)۔

ہر پلیٹ فارم کو خودکار طور پر درست فارمیٹ ملتا ہے (Reel / Short)۔ کیپشن میں سورہ، آیات کی حد، قاری، تصویری کریڈٹ، اور ہیش ٹیگز شامل ہوتے ہیں۔

اسٹوریج — آپ کو MinIO انسٹال کرنے کی ضرورت نہیں

آبجیکٹ اسٹوریج صرف اشاعت کے لیے استعمال ہوتا ہے: ریل کو ایک S3 بکٹ پر اپ لوڈ کیا جاتا ہے تاکہ Buffer کے سرور اسے ایک عوامی URL سے حاصل کر سکیں۔ اگر آپ صرف مقامی طور پر رینڈر کرتے ہیں (کوئی اشاعت نہیں)، تو آپ کو کسی اسٹوریج کی بالکل ضرورت نہیں۔

MINIO_* ترتیبات محض معیاری S3 اسناد ہیں — کوئی بھی S3 کے ہم آہنگ فراہم کنندہ کام کرتا ہے، صرف MinIO نہیں:

| فراہم کنندہ | انسٹال؟ | نوٹس | |---|---|---| | Cloudflare R2 | ❌ | مفت درجہ + عوامی بکٹس — سب سے آسان | | AWS S3 / Backblaze B2 / Wasabi / DO Spaces | ❌ | کلاؤڈ بکٹ + رسائی کلیدیں | | Self-hosted MinIO | ✅ | صرف عوامی ڈومین والے سرور پر ہی قابلِ قدر |

⚠️ مقامی احتیاط: Buffer عوامی انٹرنیٹ پر حاصل کرتا ہے، تو بکٹ کا MINIO_PUBLIC_URL آپ کی مشین سے باہر سے قابلِ رسائی ہونا ضروری ہے۔ localhost/آپ کے LAN پر ایک MinIO کام نہیں کرے گا (Buffer اس تک نہیں پہنچ سکتا) — ایک کلاؤڈ بکٹ استعمال کریں، یا MinIO کو ایک عوامی ڈومین کے پیچھے ہوسٹ کریں (مثلاً اسی باکس پر جہاں آپ کا پینل ہے)۔ ایپ خودکار طور پر بکٹ بناتی ہے اور پہلی اشاعت پر ایک عوامی-پڑھنے کی پالیسی سیٹ کرتی ہے، اور MINIO_RETENTION_HOURS کے بعد پرانے آبجیکٹس کو صاف کرتی ہے۔


🐳 ڈیپلائے منٹ (ہمیشہ چلنے والا شیڈولر + کنٹرول پینل)

ایک کمانڈ — پائیداری شامل، سیٹ اپ کرنے کے لیے کچھ نہیں:

cp .env.example .env      # fill in your keys (optional — you can also do it in the panel)
docker compose up -d      # scheduler + control panel, on http://localhost:1998

بس اتنا ہی۔ پہلی بوٹ پر ایپ data/store.json پر اپنا کنفگ اسٹور خود بناتی ہے (آپ کے .env سے seeded) — آپ کبھی کچھ بناتے یا "لنک" نہیں کرتے۔ بنڈل شدہ docker-compose.yml /app/data پر ایک نامزد والیوم ماؤنٹ کرتا ہے، تو آپ کی ترتیبات، پینل پاس ورڈ، قطار اور تاریخ دوبارہ شروع اور دوبارہ بنانے کے دوران خودکار طور پر برقرار رہتی ہیں۔

serve (ڈیفالٹ کمانڈ) شروع کرتا ہے:

  • / پر ایک کنٹرول پینل — پاس ورڈ سے محفوظ؛ ترتیبات کا انتظام کریں، ایک ریل بنائیں/پیش نظارہ کریں، ابھی پوسٹ کریں، تاریخ/تجزیات دیکھیں، اور اقتباسات قطار میں لگائیں۔ کچھ بھی براہِ راست بدلیں، بغیر دوبارہ ڈیپلائے کیے۔
  • ایک اندرونی شیڈولر جو آپ کے TZ میں ہر PUBLISH_TIMES پر رینڈر + شائع کرتا ہے؛
  • اسکرپٹنگ کے لیے GET /health اور ایک ٹوکن سے محفوظ GET /trigger?key=<TRIGGER_TOKEN>۔

بغیر سر موڈ: شیڈولر کو پوسٹ کرتے رہنے کے لیے tabligh serve --no-panel چلائیں (یا PANEL_ENABLED=false سیٹ کریں) جبکہ کوئی HTTP سطح بالکل ظاہر نہ ہو — مثالی اگر آپ ایپ کا انتظام صرف ٹرمینل (tabligh مینو) سے کرتے ہیں اور محفوظ کرنے کے لیے کوئی ویب پینل نہیں چاہتے۔

کنفگ پہلی بوٹ کے بعد اسٹور میں رہتا ہے (تاکہ پینل اسے براہِ راست ترمیم کر سکے)۔ .env اسے صرف ایک بار seed کرتا ہے — بعد میں چیزیں بدلنے کے لیے، پینل استعمال کریں (یا پاس ورڈ ری سیٹ کرنے کے لیے tabligh set-password)۔ .env سے دوبارہ seed کرنے کے لیے data/store.json حذف کریں۔

Coolify / Railway / Fly پر: اسے اس ریپو کی طرف اشارہ کریں۔ اگر آپ docker-compose.yml ڈیپلائے کرتے ہیں، تو والیوم آپ کے لیے بن جاتا ہے — صفر دستی اقدامات۔ اگر آپ سادہ Dockerfile استعمال کرتے ہیں، تو VOLUME /app/data لائن زیادہ تر پلیٹ فارمز کو اسے خودکار طور پر برقرار رکھنے پر مجبور کرتی ہے؛ Coolify پر آپ /app/data پر ماؤنٹ شدہ ایک Persistent Storage بھی شامل کر سکتے ہیں۔ اپنے env متغیرات سیٹ کریں اور ڈیپلائے کریں۔

بغیر CLI کے پہلی بار چلا رہے ہیں؟ بس پینل کھولیں — یہ آپ کا پاس ورڈ بنانے کے لیے ایک سیٹ اپ اسکرین دکھاتا ہے۔ ٹرمینل کو ترجیح دیتے ہیں؟ ایک انٹرایکٹو وزرڈ کے لیے tabligh init چلائیں۔


🗺️ روڈ میپ

  • [ ] من مانی تلاوتوں کے لیے YouTube-ذریعہ موڈ (yt-dlp + Whisper)
  • [ ] Quran.com سیگمنٹس کے ذریعے حقیقی forced-alignment کیراوکی (لفظ کے لحاظ سے درست)
  • [ ] ڈی-ڈپ لیجر تاکہ اقتباسات مصحف مکمل ہونے تک نہ دہرائے جائیں
  • [ ] مزید لے آؤٹس / تھیمز

🙏 اعترافات

  • تلاوتیں: everyayah.com · متن اور ترجمے: alquran.cloud
  • پس منظر: Pexels / Unsplash (ہر کیپشن میں کریڈٹ شدہ)
  • فونٹس: Mada (آیت کا متن)، Aref Ruqaa (سرخیاں)، Reem Kufi (اختتام)، Ubuntu (UI) (SIL OFL / UFL)
  • رینڈرنگ: Puppeteer + ffmpeg

📜 لائسنس

MIT — اس سے بھلائی کریں۔ براہِ کرم تلاوتوں اور قرآنی متن کو احترام کے ساتھ پیش رکھیں۔

اگر یہ آپ کو ایک اچھی بات پھیلانے میں مدد دیتا ہے، تو ریپو کو ⭐ دیں اور @eQurany دیکھیں۔