इस प्रोजेक्ट के बारे में

M3U Playlist Editor एक स्व-होस्टेड IPTV प्लेलिस्ट प्रबंधक है, जो Vue 3, Express और PostgreSQL (Node.js 22+, PostgreSQL 13+, Docker और CI में PostgreSQL 16) का उपयोग करके बनाया गया है, और MIT लाइसेंस के तहत जारी किया गया है। यह एक उत्तरदायी वेब इंटरफ़ेस के माध्यम से M3U और Xtream प्लेलिस्ट को आयात, संपादित, व्यवस्थित, निर्यात और साझा करता है, जिसमें बहु-उपयोगकर्ता अलगाव और एक उत्पादन Docker स्टैक शामिल है। मुख्य क्षमताएँ: Live TV, VOD और Series के लिए Xtream Codes आयात; स्थानीय या दूरस्थ M3U आयात और एस्केप किए गए M3U निर्यात; स्रोत-विशिष्ट चैनल मिलान और समयक्षेत्र-जागरूक गाइड दृश्यों के साथ XMLTV गाइड स्रोत; श्रेणी और चैनल क्रमबद्ध करना, थोक संचालन, लोगो अपलोड, खोज और मेटाडेटा संपादन; एक तीन-पैनल चैनल संपादक (स्ट्रीम-टाइप साइडबार, श्रेणी सूची, चैनल तालिका, प्रति-चैनल संपादन पैनल); एक बहु-दिवसीय EPG संपादक ग्रिड जिसमें tvg-id के अनुसार स्वचालित मिलान होता है; ड्रैग-एंड-ड्रॉप क्रमबद्ध करना जिसका क्रम तुरंत ही सहेज लिया जाता है; तुर्की और अंग्रेजी इंटरफ़ेस, लाइट/डार्क/सिस्टम थीम, कीबोर्ड नेविगेशन और मोबाइल लेआउट। खाते और सुरक्षा: घूर्णनशील HttpOnly रिफ्रेश सत्रों के साथ अल्पकालिक एक्सेस टोकन। ALLOW_REGISTRATION=false के साथ पंजीकरण बंद किया जा सकता है, लेकिन पहला उपयोगकर्ता तब भी पंजीकरण कर सकता है जब उपयोगकर्ता तालिका खाली हो, इसलिए एक नई स्थापना खुद को लॉक नहीं कर सकती। npm स्क्रिप्ट एक पंजीकृत ईमेल के लिए व्यवस्थापक अधिकार प्रदान या रद्द करते हैं, और एक उपयोगकर्ता का पासवर्ड रीसेट करते हैं (सभी सक्रिय सत्रों को रद्द करते हुए)। JWT_SECRET और CREDENTIAL_ENCRYPTION_KEY कम से कम 32 वर्णों के दो स्वतंत्र रूप से उत्पन्न मान होने चाहिए; उत्पादन स्टार्टअप में शिप किए गए प्लेसहोल्डर, छोटे या कम-एंट्रोपी मान, और दोनों के लिए एक ही मान का पुन: उपयोग अस्वीकार कर दिया जाता है। तैनाती: Compose स्टैक केवल सादा HTTP पर कार्य करता है - इसमें कोई TLS श्रोता, प्रमाणपत्र या HTTP-to-HTTPS रीडायरेक्ट नहीं है - इसलिए TLS को इसके सामने समाप्त किया जाना चाहिए (Caddy, Traefik, nginx या एक क्लाउड लोड बैलेंसर) के साथ प्रकाशित पोर्ट को निजी रखा जाना चाहिए या लूपबैक पर बांधा जाना चाहिए; रिफ्रेश कुकीज़ उत्पादन में Secure के रूप में चिह्नित हैं। API कंटेनर स्टार्टअप से पहले लंबित माइग्रेशन लागू करता है, PostgreSQL को होस्ट पर उजागर नहीं किया जाता है, अपलोड किए गए लोगो और डेटाबेस फ़ाइलें नामित वॉल्यूम का उपयोग करती हैं, API एक गैर-रूट उपयोगकर्ता के रूप में एक रीड-ओनली रूट फ़ाइलसिस्टम के साथ चलता है, और फ्रंटेंड को सुरक्षा और कैश हेडर के साथ nginx द्वारा परोसा जाता है। निजी-नेटवर्क दूरस्थ URL को डिफ़ॉल्ट रूप से SSRF संरक्षण के रूप में अवरुद्ध किया जाता है, जिसमें ALLOW_PRIVATE_NETWORK_URLS विश्वसनीय स्थानीय सेवाओं के लिए प्रलेखित ऑप्ट-इन है। Xtream आयात डिफ़ॉल्ट (बाइट कैप, श्रेणी और प्रकार समवर्ती, Node हीप आकार) को लगभग 150,000 Live/VOD/Series प्रविष्टियों की प्लेलिस्ट के लिए आकार दिया गया है। Xtream Codes आउटपुट: एक प्लेलिस्ट को POST /api/playlists/:id/xtream-output के माध्यम से उजागर किया जा सकता है, जो एक सर्वर पता और एक यादृच्छिक उपयोगकर्ता नाम और पासवर्ड लौटाता है; पासवर्ड AES-256-GCM एन्क्रिप्टेड संग्रहीत है, हमेशा इसके मालिक को सादा पाठ में दिखाया जाता है, पुन: उत्पन्न किया जा सकता है, और प्लेयर एक्सेस को बंद करने के लिए हटाया जा सकता है। समर्थित रूट पथ हैं /player_api.php, /xmltv.php, /get.php और /m3u.php। एक छोटा /m3u.php?id=...&secret=... पता अपने स्वयं के क्रेडेंशियल जोड़े को वहन करता है ताकि इसे Xtream उपयोगकर्ता नाम और पासवर्ड को उजागर किए बिना वितरित किया जा सके, और आउटपुट को पुन: उत्पन्न करने पर यह घूम जाता है। सर्वर कभी भी स्ट्रीम पता नहीं होता है: get.php प्रदाता के अपने चैनल URL प्रकाशित करता है और player_api.php direct_source को भरता है, इसलिए प्लेबैक कभी भी एप्लिकेशन को नहीं छूता है, और पहले के प्रॉक्सी मोड को इसके कॉलम के साथ हटा दिया गया है। README में चेतावनी दी गई है कि उन प्रकाशित URL में अपस्ट्रीम प्रदाता के क्रेडेंशियल एम्बेड हो सकते हैं, इसलिए आउटपुट क्रेडेंशियल साझा करना प्रभावी रूप से प्रदाता खाते को साझा करता है; ऐसे क्लाइंट का उपयोग करें जो direct_source का सम्मान करें। लोगो लाइब्रेरी: चैनल पैनल में एक Find logo बटन है जो 48 देशों और 16 अन्य समूहों से tv-logo/tv-logos के 10,700+ लोगो के एक इन-मेमोरी इंडेक्स को खोजता है। इंडेक्स को GitHub के ट्री एंडपॉइंट से दिन में एक बार खींचा जाता है और कैश किया जाता है, छवियाँ jsDelivr से परोसी जाती हैं, और मिलान गुणवत्ता और देश टैग को हटा देता है और तुर्की वर्णों को मोड़ देता है (TRT 1 FHD को trt-1-tr.png पाता है)। सहायक उसी कार्यक्षमता को कॉल कर सकता है और उन चैनलों पर लोगो लागू कर सकता है जिनमें एक नहीं है। AI सहायक: हर प्रामाणिकated पृष्ठ पर एक वैकल्पिक चैट लॉन्चर 175 सर्वर-साइड टूल के माध्यम से एप्लिकेशन को संचालित करता है, जिसमें प्लेलिस्ट, श्रेणियां, चैनल, EPG, आयात और सिंक, निर्यात और साझाकरण, अटैचमेंट और आउटपुट फ़ाइलें, अनुसूचित कार्य, और खाता/सिस्टम जानकारी शामिल हैं। यह किसी भी OpenAI-संगत प्रदाता के साथ काम करता है (बेस URL, एन्क्रिप्टेड API कुंजी, मॉडल सूची प्राप्त करना), Server-Sent Events के माध्यम से उत्तरों को स्ट्रीम करता है जिसमें एक सादा एंडपॉइंट के लिए एक फॉलबैक होता है, विनाशकारी कार्यों से पहले एक अनुमोदन गेट का समर्थन करता है, फ़ाइल अटैचमेंट स्वीकार करता है, और एक बोली गई निर्देश को एक आवर्ती सर्वर-साइड कार्य (न्यूनतम 15-मिनट का अंतराल) में परिवर्तित कर सकता है, जिसके रन लॉग किए जाते हैं, निष्पादन से पहले बैक अप लिए जाते हैं, और एक क्लिक से उलट दिए जा सकते हैं। वेब खोज उपयोगकर्ता कॉन्फ़िगरेशन के बिना शिप होती है: एक आंतरिक SearXNG इंस्टेंस (केवल searxng:8080 के रूप में पहुंच योग्य, सार्वजनिक रूप से उजागर नहीं) web_search और open_web_page का समर्थन करता है, जिसमें बंडल किए गए सेटिंग्स में JSON आउटपुट सक्षम है; दोनों टूल SEARXNG_URL खाली होने पर बिल्कुल भी पंजीकृत नहीं होते हैं। अटैचमेंट: .m3u, .m3u8, .txt, .xml, .xmltv, .json और .csv प्रति खाता 20 MB तक और 200 MB तक, एक्सटेंशन के बजाय सामग्री द्वारा पता लगाए जाते हैं, डिस्क पर संग्रहीत होते हैं, और मॉडल को पूरे पास करने के बजाय सहायक द्वारा पaged या खोजे जाते हैं। 12,000 वर्णों से अधिक के संदेश स्वचालित रूप से अटैचमेंट में परिवर्तित हो जाते हैं। मृत-चैनल मरम्मत: repair_dead_channels एक Xtream कैटलॉग के विरुद्ध सहिष्णु नाम कम करने के माध्यम से टूटे हुए चैनलों का मिलान करता है और केवल स्ट्रीम URL को फिर से लिखता है, प्रत्येक उम्मीदवार को लिखने से पहले परीक्षण करता है, उन चैनलों को बाहर रखता है जिन्हें कभी जांचा नहीं गया था, और एक ड्राई रन का समर्थन करता है; एक अनुसूचित कार्य के साथ जोड़ा गया, यह बिना किसी देखरेख के चल सकता है। रिपॉजिटरी: https://github.com/fyildirim-debug/M3uEditor