প্রকল্প সম্পর্কে

M3U Playlist Editor হল Vue 3, Express এবং PostgreSQL (Node.js 22+, PostgreSQL 13+, PostgreSQL 16 in Docker and CI) দিয়ে তৈরি একটি স্ব-হোস্টেড IPTV প্লেলিস্ট ম্যানেজার, MIT লাইসেন্সের অধীনে প্রকাশিত। এটি একটি প্রতিক্রিয়াশীল ওয়েব ইন্টারফেসের মাধ্যমে M3U এবং Xtream প্লেলিস্ট আমদানি, সম্পাদনা, সংগঠিত, রপ্তানি এবং শেয়ার করে, যাতে মাল্টি-ইউজার আইসোলেশন এবং একটি প্রোডাকশন Docker স্ট্যাক রয়েছে। মূল ক্ষমতা: Live TV, VOD এবং Series এর জন্য Xtream Codes আমদানি; স্থানীয় বা দূরবর্তী M3U আমদানি এবং এস্কেপড M3U রপ্তানি; উৎস-স্কোপড চ্যানেল ম্যাচিং এবং টাইমজোন-অ্যাওয়ার গাইড ভিউ সহ XMLTV গাইড উৎস; ক্যাটাগরি এবং চ্যানেল সাজানো, বাল্ক অপারেশন, লোগো আপলোড, সার্চ এবং মেটাডেটা সম্পাদনা; একটি তিন-পেন চ্যানেল সম্পাদক (স্ট্রিম-টাইপ সাইডবার, ক্যাটাগরি তালিকা, চ্যানেল টেবিল, প্রতি-চ্যানেল সম্পাদনা প্যানেল); একটি মাল্টি-ডে EPG সম্পাদক গ্রিড যা tvg-id দ্বারা স্বয়ংক্রিয়ভাবে ম্যাচ করে; ড্র্যাগ-এন্ড-ড্রপ সাজানো যার ক্রম অবিলম্বে স্থায়ী হয়; তুর্কি এবং ইংরেজি ইন্টারফেস, হালকা/অন্ধকার/সিস্টেম থিম, কীবোর্ড নেভিগেশন এবং মোবাইল লেআউট। অ্যাকাউন্ট এবং নিরাপত্তা: ঘূর্ণায়মান HttpOnly রিফ্রেশ সেশন সহ স্বল্প-স্থায়ী অ্যাক্সেস টোকেন। REGISTRATION_ALLOWED=false দিয়ে রেজিস্ট্রেশন বন্ধ করা যেতে পারে, কিন্তু প্রথম ব্যবহারকারী এখনও রেজিস্ট্রেশন করতে পারে যখন ব্যবহারকারী টেবিল খালি থাকে, তাই একটি নতুন ইনস্টলেশন নিজেকে লক করতে পারে না। npm স্ক্রিপ্ট একটি নিবন্ধিত ইমেইলের জন্য অ্যাডমিন অধিকার দেয় বা প্রত্যাহার করে, এবং একটি ব্যবহারকারীর পাসওয়ার্ড রিসেট করে (সমস্ত সক্রিয় সেশন প্রত্যাহার করে)। JWT_SECRET এবং CREDENTIAL_ENCRYPTION_KEY অবশ্যই দুটি স্বাধীনভাবে তৈরি করা মান হতে হবে, যার দৈর্ঘ্য কমপক্ষে 32 অক্ষর; প্রোডাকশন স্টার্টআপ পাঠানো প্লেসホルダー, ছোট বা কম-এনট্রপি মান, এবং উভয় জন্য একই মান পুনরায় ব্যবহার করা প্রত্যাখ্যান করে। ডিপ্লয়মেন্ট: Compose স্ট্যাক শুধুমাত্র plain HTTP পরিবেশন করে - এর কোনো TLS লিসেনার, সার্টিফিকেট বা HTTP-to-HTTPS রিডাইরেক্ট নেই - তাই TLS এর সামনে টার্মিনেট করতে হবে (Caddy, Traefik, nginx বা একটি ক্লাউড লোড ব্যালেন্সার) প্রকাশিত পোর্টটি ব্যক্তিগত রাখা বা loopback এ আবদ্ধ রেখে; রিফ্রেশ কুকি প্রোডাকশনে Secure হিসাবে চিহ্নিত করা হয়েছে। API কন্টেইনার স্টার্টআপের আগে পেন্ডিং মাইগ্রেশন প্রয়োগ করে, PostgreSQL হোস্টের জন্য উন্মুক্ত নয়, আপলোড করা লোগো এবং ডাটাবেস ফাইল named volumes ব্যবহার করে, API একটি non-root ব্যবহারকারী হিসাবে একটি read-only root filesystem দিয়ে চলে, এবং ফ্রন্টএন্ডটি 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 এনক্রিপ্ট করা, সর্বদা এর মালিককে plain text এ দেখানো, পুনরুৎপাদনযোগ্য, এবং প্লেয়ার অ্যাক্সেস বন্ধ করতে অপসারণযোগ্য। সমর্থিত রুট পাথ হল /player_api.php, /xmltv.php, /get.php এবং /m3u.php। একটি ছোট /m3u.php?id=...&secret=... ঠিকানা নিজস্ব শংসাপত্র জোড়া বহন করে, তাই এটি Xtream ব্যবহারকারী নাম এবং পাসওয়ার্ড প্রকাশ না করে দেওয়া যেতে পারে, এবং আউটপুট পুনরুৎপাদন করলে তা rotates। সার্ভারটি কখনই স্ট্রিম ঠিকানা নয়: get.php প্রদানকারীর নিজস্ব চ্যানেল URL প্রকাশ করে এবং player_api.php direct_source পূরণ করে, তাই প্লেব্যাক অ্যাপ্লিকেশনকে স্পর্শ করে না, এবং আগের প্রক্সি মোডটি এর কলাম সহ সরানো হয়েছে। README সতর্ক করে যে প্রকাশিত URL গুলি আপস্ট্রিম প্রদানকারীর শংসাপত্র ধারণ করতে পারে, তাই আউটপুট শংসাপত্র শেয়ার করা কার্যকরভাবে প্রদানকারী অ্যাকাউন্ট শেয়ার করে; direct_source সম্মান করে এমন ক্লায়েন্ট ব্যবহার করুন। লোগো লাইব্রেরি: চ্যানেল প্যানেলে একটি Find logo বোতাম রয়েছে যা 48টি দেশ এবং 16টি অন্যান্য গ্রুপের tv-logo/tv-logos থেকে 10,700+ লোগোর একটি ইন-মেমরি ইনডেক্স সার্চ করে। ইনডেক্সটি প্রতিদিন একবার GitHub এর tree endpoint থেকে টানা হয় এবং ক্যাশ করা হয়, ছবিগুলি jsDelivr থেকে পরিবেশিত হয়, এবং ম্যাচিং গুণমান এবং দেশ ট্যাগ বাদ দেয় এবং তুর্কি অক্ষর ভাঁজ করে (TRT 1 FHD trt-1-tr.png খুঁজে পায়)। সহকারী একই কার্যকারিতা কল করতে পারে এবং লোগো নেই এমন চ্যানেলগুলিতে লোগো প্রয়োগ করতে পারে। AI সহকারী: প্রতিটি প্রমাণীকৃত পৃষ্ঠায় একটি ঐচ্ছিক চ্যাট লঞ্চার 175টি সার্ভার-সাইড টুলের মাধ্যমে অ্যাপ্লিকেশন পরিচালনা করে, যা প্লেলিস্ট, ক্যাটাগরি, চ্যানেল, EPG, আমদানি এবং সিঙ্ক, রপ্তানি এবং শেয়ারিং, অ্যাটাচমেন্ট এবং আউটপুট ফাইল, নির্ধারিত টাস্ক, এবং অ্যাকাউন্ট/সিস্টেম তথ্য কভার করে। এটি যেকোনো OpenAI-compatible প্রদানকারীর সাথে কাজ করে (base URL, এনক্রিপ্ট করা API কী, মডেল তালিকা ফ্রেচিং), Server-Sent Events এর মাধ্যমে উত্তর স্ট্রিম করে একটি plain endpoint এর জন্য ফ্যালব্যাক সহ, ধ্বংসাত্মক কাজের আগে একটি অনুমোদন গেট সমর্থন করে, ফাইল অ্যাটাচমেন্ট গ্রহণ করে, এবং একটি মৌখিক নির্দেশকে একটি পুনরাবৃত্ত সার্ভার-সাইড টাস্কে রূপান্তর করতে পারে (ন্যূনতম 15-মিনিট ব্যবধান) যার রান লগ করা, সম্পাদনের আগে ব্যাক আপ করা, এবং এক ক্লিকে বিপরীতযোগ্য। ওয়েব সার্চ ব্যবহারকারী কনফিগারেশন ছাড়াই পাঠানো হয়: একটি অভ্যন্তরীণ SearXNG ইনস্ট্যান্স (শুধুমাত্র searxng:8080 হিসাবে পৌঁছানো যায়, প্রকাশ্যে উন্মুক্ত নয়) web_search এবং open_web_page সমর্থন করে, বান্ডেল করা সেটিংসে JSON আউটপুট সক্ষম করা হয়েছে; SEARXNG_URL খালি থাকলে উভয় টুলই নিবন্ধিত নয়। অ্যাটাচমেন্ট: .m3u, .m3u8, .txt, .xml, .xmltv, .json এবং .csv প্রতিটিতে 20 MB পর্যন্ত এবং প্রতি অ্যাকাউন্টে 200 MB পর্যন্ত এক্সটেনশনের পরিবর্তে বিষয়বস্তু দ্বারা সনাক্ত করা হয়, ডিস্কে সংরক্ষণ করা হয়, এবং মডেলকে পুরোটা পাস করার পরিবর্তে সহকারী দ্বারা পেজ করা বা সার্চ করা হয়। 12,000 অক্ষরের বেশি বার্তা স্বয়ংক্রিয়ভাবে অ্যাটাচমেন্টে রূপান্তরিত হয়। ডেড-চ্যানেল মেরামত: repair_dead_channels একটি Xtream ক্যাটালগের বিরুদ্ধে সহনশীল নাম হ্রাস দ্বারা ভাঙা চ্যানেলগুলিকে ম্যাচ করে এবং শুধুমাত্র স্ট্রিম URL পুনর্লিখন করে, লেখার আগে প্রতিটি প্রার্থী পরীক্ষা করে, পরীক্ষা করা হয়নি এমন চ্যানেল বাদ দিয়ে, এবং একটি dry run সমর্থন করে; একটি নির্ধারিত টাস্কের সাথে যুক্ত হয়ে এটি unattended চলতে পারে। রিপোজিটরি: https://github.com/fyildirim-debug/M3uEditor