सर्वर कॉन्फ़िगरेशन रेफ़रेंस
इस गाइड में सर्वर की वे सेटिंग्स दी गई हैं, जिन्हें आप एनवायरनमेंट वेरिएबल से बदल सकते हैं। एनवायरनमेंट वेरिएबल यानी वह सेटिंग जिसे सर्वर .env नाम की एक सादी टेक्स्ट फ़ाइल से पढ़ता है। Marinara बिना किसी कॉन्फ़िगरेशन के काम करता है। ज़्यादातर लोगों को इसकी ज़रूरत सिर्फ़ तब पड़ती है, जब दूसरे डिवाइस को जुड़ने देना हो, साझा सर्वर को सुरक्षित करना हो, डेटा फ़ोल्डर कहीं और ले जाना हो, लॉगिंग बढ़ानी हो या धीमे कामों को ज़्यादा समय देना हो।
आपके AI अकाउंट, कैरेक्टर और चैट के विकल्प ऐप के अंदर सेट होते हैं। AI अकाउंट जोड़ने के लिए देखें किसी AI प्रोवाइडर से कनेक्ट करना।
.env फ़ाइल एडिट करना
पहली बार शुरू होने पर Marinara एक खाली .env बना देता है। हर पंक्ति KEY=value के रूप में होती है। # से शुरू होने वाली पंक्तियाँ कमेंट होती हैं।
| इंस्टॉलेशन | .env कहाँ होती है |
| सामान्य इंस्टॉलेशन | प्रोजेक्ट का रूट फ़ोल्डर |
| आधिकारिक Docker या Podman इमेज | /app/data/.env, आपके डेटा वाले उसी वॉल्यूम में |
- उसी फ़ोल्डर में
.env.exampleखोलें। उसमें हर सेटिंग उसकी डिफ़ॉल्ट वैल्यू के साथ दी गई है। - जो पंक्ति चाहिए, उसे
.envमें कॉपी करें। =के बाद वाली वैल्यू बदलें और फ़ाइल सेव करें।
PORT=8080
BASIC_AUTH_USER=alice
BASIC_AUTH_PASS=correct-horse-battery-staple.env डेटा है, शेल स्क्रिप्ट नहीं। किसी वैल्यू में $, $(...) या दूसरा शेल सिंटैक्स हो, तो Marinara उसे नहीं चलाता। लॉन्चर के एनवायरनमेंट में पहले से सेट वैल्यू .env की उसी एंट्री पर भारी पड़ती है।
आप सर्वर को किसी भी तरीके से शुरू करें, वह .env पढ़ता है। लॉन्चर (start.bat, start.sh, start-termux.sh) इसके अलावा HOST=0.0.0.0 सेट करते हैं, ताकि दूसरे डिवाइस जुड़ सकें, और सर्वर तैयार होने पर आपका ब्राउज़र खोलते हैं। AUTO_OPEN_BROWSER=false से ब्राउज़र खुलना बंद हो जाता है। सीधे pnpm start चलाने पर सर्वर सिर्फ़ इसी कंप्यूटर पर सुनता है, जब तक आप HOST सेट न करें।
रीस्टार्ट या हॉट रीलोड
चलते समय Marinara .env पर नज़र रखता है। ज़्यादातर सेटिंग्स लगभग तुरंत लागू हो जाती हैं, रीस्टार्ट की ज़रूरत नहीं पड़ती। हर बदलाव पर लॉग में [env-watcher] वाली एक पंक्ति दिखती है। अगर नज़र रखना शुरू न हो पाए, तो सर्वर हर 30 सेकंड में फ़ाइल जाँचता है और लॉग में यह बता देता है।
अगर आपके बदलाव पकड़े नहीं जा रहे, जैसे जब आप किसी दूसरी मशीन से या किसी कंटेनर के बाइंड माउंट में फ़ाइल बदलते हैं, तो MARINARA_ENV_WATCH=poll सेट करें। नज़र रखना बंद करने के लिए MARINARA_ENV_WATCH=0 सेट करें। ये दोनों एडवांस्ड विकल्प हैं।
ये सेटिंग्स सिर्फ़ स्टार्टअप पर पढ़ी जाती हैं। इनमें से किसी को बदलने पर रीस्टार्ट ज़रूरी है, और लॉग में इसकी चेतावनी आती है:
PORT,HOST,SSL_CERTऔरSSL_KEYDATA_DIR,FILE_STORAGE_DIR,ENCRYPTION_KEYऔरMARINARA_EAGER_STORAGEMARINARA_ENV_FILE,MARINARA_ENV_WATCHऔरTZAUTO_OPEN_BROWSERऔरAUTO_CREATE_DEFAULT_CONNECTIONLOG_DISABLE_REQUEST_LOGGINGऔरLOG_FORMATSTORAGE_CACHE_WINDOWS_BOOT_ID,SHUTDOWN_WINDOWS_CONSOLE_SIGNALSऔरSHUTDOWN_FORCE_EXIT_ON_REPEAT- इमेज, वीडियो, स्प्राइट और ComfyUI के टाइमआउट और पोल वाली सेटिंग्स:
IMAGE_GEN_TIMEOUT_MS,IMAGE_GEN_MAX_RESPONSE_BYTES,VIDEO_GEN_TIMEOUT_MS,VIDEO_GEN_MAX_RESPONSE_BYTES,SPRITE_GENERATION_TIMEOUT_MS,SPRITE_ANIMATED_FFMPEG_TIMEOUT_MS,COMFYUI_GEN_TIMEOUTऔर चारों*_VIDEO_POLL_INTERVAL_MSसेटिंग्स
लॉन्चर सर्वर शुरू होने से पहले AUTO_UPDATE_ENABLED पढ़ते हैं, इसलिए बदलाव अगली बार शुरू करने पर लागू होता है और लॉग में इसकी चेतावनी नहीं आती।
एक्सेस कंट्रोल की सेटिंग्स और सीक्रेट (BASIC_AUTH_USER, BASIC_AUTH_PASS, IP_ALLOWLIST, ADMIN_SECRET, CSRF_TRUSTED_ORIGINS) के लिए रीस्टार्ट की ज़रूरत नहीं होती।
एक्सेस कंट्रोल
एक्सेस कंट्रोल तय करता है कि चल रहे सर्वर तक कौन पहुँच सकता है। कदम और उदाहरणों के लिए देखें रिमोट एक्सेस: लॉगिन और IP अलाउलिस्ट।
लॉगिन .env के बिना भी सेट किया जा सकता है: पहले से साइन इन किए हुए ब्राउज़र में Settings → Advanced → Access (सेटिंग्स → एडवांस्ड → एक्सेस) इस्तेमाल करें, या सर्वर लॉग में आया एक बार वाला सेटअप कोड। सर्वर यह कोड सिर्फ़ तब छापता है, जब कोई लॉगिन सेट न हो और वह लूपबैक से आगे सुन रहा हो। लॉगिन DATA_DIR/.remote-login.json में सेव होता है। node scripts/reset-login.mjs (Marinara फ़ोल्डर में चलाएँ) उसे हटा देता है और हर ब्राउज़र को साइन आउट कर देता है। .env वाला लॉगिन इस पर भारी पड़ता है। लॉगिन बदलने या हटाने के लिए मौजूदा पासवर्ड चाहिए। लॉगिन प्रॉक्सी के लिए देखें लॉगिन प्रॉक्सी (फ़ॉरवर्ड-ऑथ)।
नीचे इस्तेमाल हुए शब्द:
- Loopback (लूपबैक): वह कंप्यूटर जिस पर सर्वर चलता है, जिसका पता
127.0.0.1याlocalhostहोता है। - CIDR range (CIDR रेंज): IP पतों के एक ब्लॉक को छोटे रूप में लिखने का तरीका, जैसे
192.168.1.0/24। - Basic Auth: हर रिक्वेस्ट के साथ भेजा जाने वाला यूज़रनेम और पासवर्ड। स्क्रिप्ट और API क्लाइंट इसे इस्तेमाल करते हैं, और ब्राउज़र
/loginपेज इस्तेमाल करते हैं। यह सिर्फ़ एन्कोड होता है, एन्क्रिप्ट नहीं, इसलिए सार्वजनिक सर्वर पर HTTPS इस्तेमाल करें।
लॉगिन सेट न हो, तो सर्वर सिर्फ़ भरोसेमंद सोर्स से कनेक्शन स्वीकार करता है: लूपबैक, IP_ALLOWLIST के पते, Tailscale और उसी होस्ट का Docker ब्रिज ट्रैफ़िक। बाकी सबको, आपके घरेलू नेटवर्क को भी, 403 Forbidden मिलता है। दूसरे डिवाइस जुड़ ही सकें, इसके लिए सर्वर का ऐसे पते से जुड़ना ज़रूरी है जहाँ तक वे पहुँच सकें: HOST=0.0.0.0 सेट करें।
| वेरिएबल | डिफ़ॉल्ट | यह क्या करता है |
BASIC_AUTH_USER | खाली | लॉगिन का यूज़रनेम। इसे BASIC_AUTH_PASS के साथ सेट करें। |
BASIC_AUTH_PASS | खाली | लॉगिन का पासवर्ड। इनमें से किसी एक को भी खाली छोड़ने पर लॉगिन बंद हो जाता है। |
BASIC_AUTH_REALM | Marinara Engine | Basic Auth चैलेंज में रियल्म का नाम। |
IP_ALLOWLIST | खाली | कॉमा से अलग किए IP या CIDR रेंज, जिन्हें हमेशा इजाज़त रहती है। सीधे लूपबैक को हमेशा इजाज़त है। उसी मशीन पर चल रही रिवर्स प्रॉक्सी को नहीं। |
IP_ALLOWLIST_ENABLED | true | false लिस्ट को बनाए रखता है, पर उसे लागू करना बंद कर देता है। |
ALLOW_UNAUTHENTICATED_PRIVATE_NETWORK | false | लॉगिन सेट न हो, तो प्राइवेट नेटवर्क से बिना पासवर्ड पहुँच देता है। इसमें 100.64.0.0/10 शामिल नहीं है, जिसे इंटरनेट प्रोवाइडर अपने ग्राहकों के बीच साझा करते हैं। इसे TRUSTED_PRIVATE_NETWORKS में तभी जोड़ें, जब आप इस पर भरोसा करते हों। |
ALLOW_UNAUTHENTICATED_REMOTE | false | किसी भी पते से, इंटरनेट से भी, बिना पासवर्ड पहुँच देता है। इसकी सलाह नहीं दी जाती। |
TRUSTED_PRIVATE_NETWORKS | बिल्ट-इन रेंज | डिफ़ॉल्ट प्राइवेट रेंज की जगह ले लेता है। जो डिफ़ॉल्ट अब भी चाहिए, उन्हें इसमें शामिल करें। |
BYPASS_AUTH_TAILSCALE | अपने-आप | खाली: कोई डिवाइस सिर्फ़ तब लॉगिन छोड़ता है, जब वह सीधे इस कंप्यूटर के Tailscale पते से जुड़ता है। Tailscale Serve, Funnel या किसी दूसरी प्रॉक्सी को अब भी लॉगिन चाहिए। true: पूरी 100.64.0.0/10 रेंज का पुराना बायपास। false: सामान्य एक्सेस कंट्रोल। |
BYPASS_AUTH_DOCKER | अपने-आप | खाली: सिर्फ़ पहचाने गए कंटेनर इंटरफ़ेस और उसके गेटवे पर भरोसा करता है, और वह भी सिर्फ़ तब, जब कोई लॉगिन, IP_ALLOWLIST या TRUSTED_AUTH_PROXY सेट न हो। true: पुराने या कस्टम नेटवर्क। false: सामान्य एक्सेस कंट्रोल। |
REQUIRE_AUTH_FOR_DOCKER_PROXY | true | जिस Docker ट्रैफ़िक को कोई प्रॉक्सी आगे भेजती है, उसके लिए लॉगिन या अलाउलिस्ट ज़रूरी करता है। false सिर्फ़ तब सेट करें, जब प्रॉक्सी खुद हर विज़िटर को लॉगिन करवाती हो। |
REQUIRE_AUTH_FOR_LOOPBACK_PROXY | true | उसी मशीन पर चल रही प्रॉक्सी या टनल से आगे भेजी गई रिक्वेस्ट को रिमोट मानता है, nginx के डिफ़ॉल्ट proxy_pass जैसी HTTP/1.0 रिक्वेस्ट समेत। false सिर्फ़ तब सेट करें, जब प्रॉक्सी खुद हर विज़िटर को लॉगिन करवाती हो। |
TRUSTED_AUTH_PROXY | खाली | उस फ़ॉरवर्ड-ऑथ प्रॉक्सी (tinyauth, Authelia, Authentik, oauth2-proxy) के IP या CIDR, जो हर विज़िटर को लॉगिन करवाती है। इसकी रिक्वेस्ट लॉगिन और IP_ALLOWLIST को छोड़ देती हैं। इसे हर पाथ की सुरक्षा करनी चाहिए, और Marinara तक इसे बायपास करके पहुँचना संभव नहीं होना चाहिए। |
TRUSTED_HOSTS | खाली | अतिरिक्त सार्वजनिक या प्रॉक्सी होस्टनेम, जिन पर Marinara जवाब देता है, जैसे chat.example.com। सीधे IP, localhost, .local, .home.arpa और एक-शब्द वाले LAN नाम इसके बिना भी चलते हैं। CSRF_TRUSTED_ORIGINS या CORS_ORIGINS में दिए नाम भी स्वीकार किए जाते हैं। |
SSL_CERT | खाली | TLS सर्टिफ़िकेट का पथ। सीधे HTTPS चलाने के लिए इसे SSL_KEY के साथ सेट करें। |
SSL_KEY | खाली | TLS प्राइवेट कुंजी का पथ। |
CSRF_TRUSTED_ORIGINS | खाली | अतिरिक्त ब्राउज़र ऑरिजिन, जिन्हें बदलाव सेव करने की इजाज़त है, सार्वजनिक डोमेन या असामान्य पोर्ट के लिए। अक्षरशः null वैल्यू अनदेखी की जाती है, Android APK के लिए भी। |
Warning: 0.0.0.0/0 जैसी चौड़ी सार्वजनिक IP_ALLOWLIST रेंज इंटरनेट के क्लाइंट को बिना लॉगिन के अंदर आने दे सकती है। सिर्फ़ वही पते लिखें, जिन पर आप भरोसा करते हैं।
स्टोरेज
| वेरिएबल | डिफ़ॉल्ट | यह क्या करता है |
DATA_DIR | packages/server/data | सारे यूज़र डेटा का रूट फ़ोल्डर। Docker इमेज इसे /app/data पर सेट करती हैं। |
FILE_STORAGE_DIR | DATA_DIR के अंदर storage | फ़ाइल-स्टोरेज फ़ोल्डर बदल देता है। |
ENCRYPTION_KEY | खाली | वह कुंजी जो सेव की गई API कुंजियों को एन्क्रिप्ट करती है। |
MARINARA_MAX_RESIDENT_CHATS | 0 (असीमित); SteamOS और Termux पर 8 | एक साथ ज़्यादा से ज़्यादा कितनी चैट मेमोरी में रखी जाती हैं। सीमा पार होने पर हर सेव के बाद वह चैट मेमोरी से हटा दी जाती है (डिस्क से कभी नहीं), जो सबसे लंबे समय से इस्तेमाल नहीं हुई और जिसमें कोई बिना सेव हुआ बदलाव नहीं है। गलत टेक्स्ट होने पर प्लैटफ़ॉर्म का डिफ़ॉल्ट लागू होता है। 2 से कम पॉज़िटिव वैल्यू 2 बन जाती हैं। 0 मेमोरी से हटाना बंद कर देता है। |
MARINARA_EAGER_STORAGE | बंद | 1 स्टार्टअप पर हर चैट लोड करता है, जैसा 2.4.5 से पहले होता था। बड़ी प्रोफ़ाइल पर यह कहीं ज़्यादा मेमोरी लेता है। रीस्टार्ट ज़रूरी है। |
एन्क्रिप्शन कुंजी बनाएँ और उसे ENCRYPTION_KEY में पेस्ट करें:
openssl rand -hex 32Marinara आपका डेटा सादी JSON फ़ाइलों में रखता है, इसलिए आप बैकअप कॉपी कर सकते हैं और पढ़ सकते हैं। किस फ़ोल्डर में क्या रहता है, यह जानने के लिए देखें Marinara आपका डेटा कहाँ सेव करता है।
लॉग लेवल
LOG_LEVEL तय करता है कि सर्वर कितना छापता है। आपके चुने लेवल से नीचे की हर चीज़ वह छिपा देता है।
| लेवल | इसमें क्या दिखता है |
error | सिर्फ़ गंभीर गड़बड़ियाँ। |
warn | एरर और चेतावनियाँ। यही डिफ़ॉल्ट है। |
info | स्टार्टअप और हर रिक्वेस्ट के लॉग भी जोड़ता है। |
debug | सब कुछ, पूरे प्रॉम्प्ट और मॉडल के जवाब समेत। बहुत ज़्यादा आउटपुट देता है। |
| वेरिएबल | डिफ़ॉल्ट | यह क्या करता है |
LOG_LEVEL | warn | ऊपर वाला लेवल। |
LOG_PRESET | default | prompt-connections वही प्रॉम्प्ट और मॉडल विवरण दिखाता है जो debug दिखाता है, पर GET /api/chats जैसी रोज़मर्रा की रिक्वेस्ट पंक्तियाँ छिपा देता है। |
LOG_DISABLE_REQUEST_LOGGING | false | true रोज़मर्रा की रिक्वेस्ट पंक्तियाँ छिपाता है और आपका लेवल बनाए रखता है। रीस्टार्ट ज़रूरी है। |
LOG_FORMAT | अपने-आप | pretty हर जगह पढ़ने लायक पंक्तियाँ छापता है, जैसे docker logs में Debug mode (डीबग मोड) के प्रॉम्प्ट पढ़ने के लिए। json हर पंक्ति में एक JSON ऑब्जेक्ट छापता है। रीस्टार्ट ज़रूरी है। |
टर्मिनल में सर्वर पढ़ने लायक पंक्तियाँ छापता है। दूसरी जगहों पर, जैसे Docker लॉग में, प्रोडक्शन सर्वर JSON पंक्तियाँ छापता है। Termux लॉन्चर पढ़ने लायक पंक्तियाँ माँगता है। ब्राउज़र की लॉगिंग अलग है और LOG_LEVEL से कंट्रोल नहीं होती।
टाइमआउट
टाइमआउट यानी वह ज़्यादा से ज़्यादा समय, जितना सर्वर किसी धीमे काम का इंतज़ार करता है। टेक्स्ट, एजेंट, Game इमेज-प्रॉम्प्ट, इमेज, वीडियो, ComfyUI और एम्बेडिंग की सीमाएँ सेकंड में बदलने के लिए Settings → Advanced → Request timeouts (सेटिंग्स → एडवांस्ड → रिक्वेस्ट टाइमआउट) खोलें। बड़ी सीमाएँ धीमे लोकल बैकएंड के काम आती हैं। ये सेवा की अपनी लगाई सीमा को नहीं बदल सकतीं। सेव करने के लिए सर्वर एडमिनिस्ट्रेशन का एक्सेस चाहिए।
ये सेटिंग्स हर प्रोफ़ाइल पर लागू होती हैं और चालू .env के बगल में .env.timeouts.json (या <custom-env-path>.timeouts.json) के रूप में सेव होती हैं। ये .env को एडिट किए बिना उससे मेल खाते वेरिएबल पर भारी पड़ती हैं। टेक्स्ट, एजेंट, Game इमेज-प्रॉम्प्ट और एम्बेडिंग के बदलाव नई रिक्वेस्ट पर लागू होते हैं। मीडिया के बदलावों और इंस्टॉल किए गए एजेंट पैकेज के लिए रीस्टार्ट चाहिए। वापस वेरिएबल पर लौटने के लिए वह फ़ाइल हटाएँ और रीस्टार्ट करें।
नाम में कुछ और न लिखा हो, तो वैल्यू मिलीसेकंड में होती हैं। चैट, एजेंट और Game इमेज-प्रॉम्प्ट के जाँचे जाने वाले टाइमआउट में गलत, शून्य, नेगेटिव या रेंज से बाहर की वैल्यू हो, तो लॉग में चेतावनी आती है और डिफ़ॉल्ट इस्तेमाल होता है। वीडियो के कामों के बारे में जानने के लिए देखें सीन वीडियो।
| वेरिएबल | डिफ़ॉल्ट | यह क्या करता है |
CHAT_GENERATION_TIMEOUT_MS | 300000 (5 मिनट) | Conversation, Roleplay और Game के जवाबों के लिए पहले टोकन तक का समय और दो चंक के बीच का अंतर। यह उन बैकग्राउंड कामों का बजट भी है, जिनका अपना कोई टाइमआउट नहीं है (Professor Mari, Noodle रिफ़्रेश, Slurp के जवाब)। रेंज 10000-3600000। इससे एजेंट, मीडिया, एम्बेडिंग या टूल के टाइमआउट नहीं बदलते। |
AGENT_CALL_TIMEOUT_MS | 300000 (5 मिनट) | एक एजेंट मॉडल कॉल से पहले या उसके दौरान डेटा आए बिना ज़्यादा से ज़्यादा इंतज़ार, डाउनलोड किए जाने वाले एजेंट समेत। डेटा आते ही यह फिर से शुरू होता है। रेंज 10000-3600000। Illustrator को कम से कम उसका बिल्ट-इन 30 मिनट का बिना-डेटा वाला बजट मिलता रहता है। |
GAME_DYNAMIC_IMAGE_PROMPT_TIMEOUT_MS | 45000 (45 सेकंड) | उस मॉडल कॉल के कुल समय की सीमा, जो किसी Game सीन को इमेज प्रॉम्प्ट में बदलती है। रेंज 10000-3600000। |
EMBEDDING_TIMEOUT_MS | 300000 (5 मिनट) | एक एम्बेडिंग रिक्वेस्ट के लिए मिलने वाला समय। |
IMAGE_GEN_TIMEOUT_MS | 1800000 (30 मिनट) | एक इमेज जेनरेशन रिक्वेस्ट के लिए मिलने वाला समय। |
IMAGE_GEN_MAX_RESPONSE_BYTES | 31457280 (30 MiB) | स्वीकार किया जाने वाला सबसे बड़ा इमेज जवाब। जब लोकल ComfyUI बड़ा मेटाडेटा एम्बेड करे, तब इसे बढ़ाएँ। |
VIDEO_GEN_TIMEOUT_MS | 1800000 (30 मिनट) | एक सीन वीडियो रिक्वेस्ट के लिए मिलने वाला समय, ComfyUI वीडियो वर्कफ़्लो समेत। |
VIDEO_GEN_MAX_RESPONSE_BYTES | 167772160 (160 MiB) | स्वीकार किया जाने वाला सबसे बड़ा सीन वीडियो डाउनलोड। |
COMFYUI_GEN_TIMEOUT | 2400 (40 मिनट, सेकंड में) | कतार में लगने के बाद एक ComfyUI इमेज वर्कफ़्लो के लिए मिलने वाला समय। |
SPRITE_GENERATION_TIMEOUT_MS | IMAGE_GEN_TIMEOUT_MS | एक AI स्प्राइट काम के लिए मिलने वाला समय। |
CUSTOM_TOOL_TIMEOUT_MS | 60000 (1 मिनट) | एक कस्टम टूल कॉल के लिए मिलने वाला समय। |
MAX_TOOL_ROUNDS | 100 | मॉडल को जवाब देने से पहले ज़्यादा से ज़्यादा इतने टूल-कॉल राउंड मिलते हैं। Game टर्न को ज़्यादा से ज़्यादा 4, एजेंट को 16 और लोरबुक बैकफ़िल को 64 राउंड मिलते हैं, या यह वैल्यू इनसे कम हो तो उतने। |
खास अधिकार वाले API (ADMIN_SECRET)
बैकअप, डेटा मिटाना, अपडेट लागू करना और थीम इंस्टॉल करना जैसे नुकसान पहुँचा सकने वाले या जोखिम वाले कामों के लिए सामान्य एक्सेस जाँच के ऊपर एक अलग सीक्रेट चाहिए। इसे आप सर्वर के अपने कंप्यूटर पर Settings → Advanced → Admin Access (सेटिंग्स → एडवांस्ड → एडमिन एक्सेस) में बना सकते हैं (देखें Admin Access), या सर्वर पर एक लंबी, बेतरतीब वैल्यू सेट कर सकते हैं:
ADMIN_SECRET=replace-this-with-a-long-random-secretसर्वर के अपने कंप्यूटर पर ये काम आमतौर पर बिना सीक्रेट के हो जाते हैं। उस कंप्यूटर पर चल रही प्रॉक्सी या टनल से आगे भेजी गई रिक्वेस्ट रिमोट गिनी जाती है, जब तक REQUIRE_AUTH_FOR_LOOPBACK_PROXY=false न हो। किसी दूसरे डिवाइस से सीधे आने वाली रिक्वेस्ट को सीक्रेट चाहिए। वही वैल्यू Settings → Advanced → Admin Access में पेस्ट करें, फिर ऐप उसे आपके लिए भेजता है। .env का ADMIN_SECRET ऐप में बने सीक्रेट पर भारी पड़ता है। कोई एडमिन सीक्रेट न हो, तो सर्वर के अपने कंप्यूटर को छोड़कर हर डिवाइस से खास अधिकार वाले काम फ़ेल हो जाते हैं, और एरर बताती है कि एक सीक्रेट सेट करें। इंस्टॉल किए गए एजेंट हर उस डिवाइस से चलते हैं जिसने लॉगिन से साइन इन किया है; उन्हें इंस्टॉल करने, अपडेट करने और हटाने के लिए सीक्रेट चाहिए।
| वेरिएबल | डिफ़ॉल्ट | यह क्या करता है |
ADMIN_SECRET | खाली | रिमोट डिवाइस से खास अधिकार वाले कामों के लिए सीक्रेट। |
MARINARA_REQUIRE_ADMIN_SECRET_ON_LOOPBACK | false | true होने पर सर्वर के अपने कंप्यूटर पर भी सीक्रेट ज़रूरी हो जाता है। |
UPDATES_APPLY_ENABLED | false | ब्राउज़र को Apply Update (अपडेट लागू करें) से उसी चैनल के अपडेट लागू करने देता है। सर्वर वाले कंप्यूटर के ब्राउज़र से रिलीज़ चैनल बदलना इसके बिना भी चलता है। सिर्फ़ Git इंस्टॉलेशन के लिए। |
UPDATES_APPLY_DISABLED | सेट नहीं | सर्वर की तरफ़ से हर अपडेट लागू करने से इनकार करता है, चैनल बदलने समेत। यह UPDATES_APPLY_ENABLED पर भारी पड़ता है। dev और e2e लॉन्चर इसे सेट करते हैं। |
UPDATES_ALLOW_REMOTE_APPLY | false | सही सीक्रेट के साथ रिमोट डिवाइस को अपडेट लागू करने देता है। |
HAPTICS_ALLOW_REMOTE | false | सही सीक्रेट के साथ रिमोट डिवाइस को हैप्टिक काम चलाने देता है। |
CUSTOM_TOOL_SCRIPT_ENABLED | false | कस्टम स्क्रिप्ट टूल चालू करता है। भरोसे के बाहर या इंपोर्ट किए गए टूल के लिए इसे बंद रखें। |
MARI_DB_ALLOW_UNSAFE_TRANSFORMS | false | Professor Mari की डेटाबेस बदलने वाली स्क्रिप्ट को उन होस्ट पर भी चलने देता है, जिनमें OS सैंडबॉक्स नहीं है (macOS Seatbelt या Linux Bubblewrap, जो मौजूद होने पर इस्तेमाल होते हैं)। जब तक आपने स्क्रिप्ट जाँची न हो, इसे बंद रखें। |
ENABLE_CUSTOM_AGENT_REPOS | false | Agent Organizer में GitHub एजेंट-रिपॉज़िटरी का मैन्युअल प्रीव्यू और सिंक चालू करता है। देखें कस्टम एजेंट रिपॉज़िटरी। |
MARINARA_OVERWORLD_GAMES | false | खिलाड़ियों को Overworld गेम (एक सेटिंग किट और एक जेनरेट हुई दुनिया) बनाने और किसी पुराने गेम को Overworld गेम में बदलने देता है। बंद होने पर विज़ार्ड सिर्फ़ Classic गेम देता है। |
ENABLE_EXTERNAL_EXTENSIONS | false | थर्ड-पार्टी एक्सटेंशन इंपोर्ट के दो गेट में से पहला। देखें External Extensions। |
IMPORT_ALLOWED_ROOTS | खाली | वे फ़ोल्डर, जिन्हें बल्क इंपोर्ट बिना पिकर टोकन के पढ़ सकता है। |
PROFILE_EXPORT_JSON_LIMIT_BYTES | 268435456 (256 MiB) | सर्वर ज़्यादा से ज़्यादा इतना बड़ा एक JSON प्रोफ़ाइल एक्सपोर्ट बनाता है। |
लोकल पतों की छूट
डिफ़ॉल्ट रूप से AI सेवाओं, इमेज सेवाओं और वेबहुक की तरफ़ जाने वाली रिक्वेस्ट निजी या लोकल पतों तक नहीं जातीं। इससे SSRF (सर्वर-साइड रिक्वेस्ट फ़ोर्जरी) रुकता है, जिसमें किसी रिक्वेस्ट को बहलाकर किसी अंदरूनी पते तक भेजा जाता है। लूपबैक वाले मॉडल सर्वर फिर भी काम करते हैं। निजी नेटवर्क की किसी दूसरी मशीन पर चल रही सेल्फ़-होस्टेड सेवा के लिए सिर्फ़ वही स्विच चालू करें, जिसकी ज़रूरत हो।
| वेरिएबल | डिफ़ॉल्ट | यह क्या करता है |
PROVIDER_LOCAL_URLS_ENABLED | false | AI सेवा के URL निजी या LAN पतों तक पहुँच सकते हैं। Android पर यह डिफ़ॉल्ट रूप से चालू रहता है। |
IMAGE_LOCAL_URLS_ENABLED | false | इमेज सेवा के URL निजी या LAN पतों तक पहुँच सकते हैं। निजी नतीजा-URL फिर भी सेवा के ठीक उसी ऑरिजिन से मेल खाने चाहिए। |
TTS_LOCAL_URLS_ENABLED | false | टेक्स्ट टू स्पीच के URL निजी या LAN पतों तक पहुँच सकते हैं। |
STT_LOCAL_URLS_ENABLED | false | Speech to text सर्वर का URL निजी या LAN पतों तक पहुँच सकता है। उसी मशीन पर चल रहा सर्वर इसके बिना भी काम करता है। |
DEEPLX_LOCAL_URLS_ENABLED | false | DeepLX अनुवाद के URL निजी या LAN पतों तक पहुँच सकते हैं। |
WEBHOOK_LOCAL_URLS_ENABLED | false | कस्टम टूल के वेबहुक निजी या LAN पतों तक पहुँच सकते हैं। |
लोकल या सेल्फ़-होस्टेड मॉडल जोड़ने के लिए देखें लोकल या सेल्फ़ होस्टेड मॉडल से कनेक्ट करना।
सुविधा स्विच
असफल प्रोवाइडर कॉल दोहराना या लोरबुक समूह के चुनाव स्थिर रखना जैसे वैकल्पिक सर्वर व्यवहार Settings → Advanced → Features (सेटिंग्स → एडवांस्ड → सुविधाएँ) में हैं। सभी डिफ़ॉल्ट रूप से बंद हैं। कुछ का एक वेरिएबल भी है, जो सेट होने पर स्विच पर भारी पड़ता है। देखें सुविधा स्विच।
Marinara नोटिस
नोटिस मेंटेनर्स की छोटी चेतावनियाँ हैं, जैसे कोई सुरक्षा समस्या या ऐसा मैनुअल कदम जो आपके वर्ज़न को चाहिए। ये बैनर के रूप में दिखते हैं।
- स्टार्टअप पर और फिर हर घंटे, सर्वर Marinara Engine रिपॉज़िटरी की
noticesब्रांच से एक छोटी फ़ाइल,notices.json, डाउनलोड करता है। वह सिर्फ़ वे नोटिस रखता है जिनमें आपका वर्ज़न लिखा हो। आपका ब्राउज़र पेज लोड होने पर एक बार और फिर हर घंटे आपके अपने सर्वर से ये नोटिस माँगता है। - अगर डाउनलोड फ़ेल हो जाए, तो सर्वर अपने पास मौजूद नोटिस रखता है और स्टार्टअप में देरी नहीं होती।
- यह रिक्वेस्ट आपके, आपकी चैट या आपकी सेटिंग्स के बारे में कोई डेटा नहीं भेजती।
noticesब्रांच सिर्फ़ मेंटेनर्स बदल सकते हैं, और हर बदलाव रिव्यू होता है। - नोटिस आकार की सीमा वाला सादा टेक्स्ट होता है। लिंक तभी रहते हैं, जब वे
https://github.com/Pasta-Devs/की ओर जाते हों। कोई नोटिस कुछ भी इंस्टॉल, चला या बदल नहीं सकता। - नोटिस सिर्फ़ आपको दिखते हैं: सर्वर के अपने कंप्यूटर पर,
IP_ALLOWLISTके किसी पते से, या साइन इन करने के बाद। बाकी विज़िटर को खाली लिस्ट मिलती है।
नोटिस बंद करने के लिए MARINARA_NOTICES_ENABLED=false सेट करें।
Warning: नोटिस बंद होने पर Marinara आपको सुरक्षा फ़िक्स या ज़रूरी कदमों के बारे में नहीं बता सकता। GitHub रिलीज़ पर खुद नज़र रखें।
फ़ोर्क MARINARA_NOTICES_URL को अपनी फ़ाइल की ओर कर सकते हैं।
वैकल्पिक मल्टीप्लेयर
मल्टीप्लेयर डिफ़ॉल्ट रूप से बंद है। इससे लोग Conversation, Roleplay या Game का एक निजी कमरा साझा कर सकते हैं, जिसमें प्रतिभागियों की कोई तय सीमा नहीं होती। हर मेहमान अपना भरोसेमंद Marinara इस्तेमाल करता है। मेहमानों को AI अकाउंट की ज़रूरत नहीं होती। AI अकाउंट होस्ट देता है, और वह साझा सामग्री पढ़ और रख सकता है। जब तक दोनों में से कोई भी गेट बंद है, Marinara बैकग्राउंड में सेशन, सर्टिफ़िकेट या पीयर की कोई जाँच नहीं करता।
- हिस्सा लेने वाले हर Marinara की
.envमेंMULTIPLAYER_ENABLED=trueसेट करें और उसे रीस्टार्ट करें। सिर्फ़ हूबहूtrueवैल्यू ही काम करती है, और हॉट रीलोड इसे लागू नहीं करता। - Settings → Advanced → Multiplayer (सेटिंग्स → एडवांस्ड → मल्टीप्लेयर) खोलें, चेतावनी पढ़ें और सेटिंग चालू करें। इससे न कोई लिस्नर शुरू होता है, न कोई कमरा जॉइन होता है।
- होस्ट करने के लिए मोड या सेटअप फ़्लो में Create shared session (साझा सेशन बनाएँ) या Play together (साथ खेलें) इस्तेमाल करें। सेटअप, अपना दिखने वाला नाम और साझा किया जाने वाला पर्सोना टेक्स्ट रिव्यू करें। कोई मौजूदा चैट सिर्फ़ अपने सेटअप के चुनाव साझा करती है, उसका ट्रांसक्रिप्ट, नोट्स या यादें कभी नहीं।
- होस्ट पर
SSL_CERTऔरSSL_KEYमें ऐसा सर्टिफ़िकेट सेट करें, जो कमरे के होस्टनेम के लिए मान्य हो और जिस पर मेहमान भरोसा करते हों। कमरे के लिए अलग HTTPS पता और पोर्ट चुनें, जैसेhttps://room.example.org:7861। Host कार्रवाई वह पोर्ट खोलती है। अपने फ़ायरवॉल या राउटर से सिर्फ़ कमरे का पोर्ट आगे भेजें। सामान्य Marinara API बाहर न खोलें। आपके लिए न कोई पोर्ट फ़ॉरवर्डिंग सेट की जाती है, न रिले, न सर्टिफ़िकेट जाँच का कोई बायपास। - कम से कम 12 अक्षरों का कमरे का पासवर्ड रखें, जो आपके एडमिन क्रेडेंशियल से अलग हो। खत्म होने वाला निमंत्रण और पासवर्ड भरोसेमंद लोगों को अलग-अलग भेजें। मेहमान होस्टनेम का फ़िंगरप्रिंट, कमरे का नाम और पर्सोना टेक्स्ट जाँचता है, फिर प्रवेश की रिक्वेस्ट भेजता है। कोई भी इतिहास भेजे जाने से पहले होस्ट Players (खिलाड़ी) में हर रिक्वेस्ट मंज़ूर करता है।
सीमाएँ और व्यवहार:
- पासवर्ड भेजने से पहले TLS सर्टिफ़िकेट चेन और होस्टनेम जाँचता है, और निमंत्रण का सर्टिफ़िकेट फ़िंगरप्रिंट भी। सेल्फ़-साइन्ड सर्टिफ़िकेट चुपचाप स्वीकार नहीं होते। रिन्यू हुए सर्टिफ़िकेट के लिए नया निमंत्रण चाहिए।
- निमंत्रण 30 मिनट बाद खत्म हो जाते हैं। मंज़ूर हुए सेशन ज़्यादा से ज़्यादा 12 घंटे चलते हैं। निमंत्रण बदलने या रद्द करने पर बिना इस्तेमाल हुए निमंत्रण काम करना बंद कर देते हैं। Kick (बाहर करें) मंज़ूर हो चुके मेहमान को हटा देता है।
- होस्ट अपने आप या मैन्युअल जवाब, Pause/Resume (रोकें/फिर जारी करें) और Stop (बंद करें) कंट्रोल करता है। डिफ़ॉल्ट रूप से हर होस्टिंग सेशन में तालमेल से चलने वाले 100 जेनरेशन टर्न मिलते हैं। ग्रुप टर्न या Game सेटअप में एक से ज़्यादा मॉडल कॉल हो सकते हैं। यह टर्न की सीमा है, कीमत का अनुमान नहीं।
- Game में Start Game (गेम शुरू करें) से पहले पार्टी रिव्यू करें। हर ज़रूरी खिलाड़ी कोई कार्रवाई भेजता है या पास करता है, और सबके तैयार होने पर GM नतीजा तय करता है। डिस्कनेक्ट हुआ खिलाड़ी तब तक ज़रूरी बना रहता है, जब तक वह लौट न आए या होस्ट उसे पास न करा दे या हटा न दे। रोका गया या बीच में टूटा राउंड कभी अपने आप भुगतान वाली रिक्वेस्ट या पहले से लागू हो चुके दुनिया के असर नहीं दोहराता।
- Stop, Leave (निकलें), सेटिंग बंद करना और सर्वर रीस्टार्ट, लाइव सेशन खत्म कर देते हैं। रीस्टार्ट कभी अपने आप होस्ट या जॉइन नहीं करता।
- कस्टम और पैकेज टूल और असुरक्षित कमांड कमरों में उपलब्ध नहीं रहते। मेहमान कभी शेड्यूलर नहीं चलाते, न ही मिले हुए टेक्स्ट से कोई लोकल कमांड चलाते हैं। Conversation शेड्यूल होस्ट का शेड्यूलर इस्तेमाल करते हैं।
- नए खिलाड़ी और पर्सोना के बदलाव अगले राउंड से लागू होते हैं।
- कमरों में सिर्फ़ सीमित आकार का टेक्स्ट जाता है। फ़ाइल, मीडिया, एक्सटेंशन या पैकेज का कोई ट्रांसफ़र नहीं होता। Android नेटिव रैपर जॉइन नहीं कर सकता।
Warning: सिर्फ़ भरोसेमंद लोगों से जुड़ें, और अपना Marinara क्लाइंट इस्तेमाल करें। होस्ट का दिया हुआ क्लाइंट, एक्सटेंशन या फ़ाइल कभी इंस्टॉल न करें। आप जो साझा करते हैं, उसे होस्ट पढ़ सकता है, और साझा सामग्री उसकी AI सेवाओं को जा सकती है। सीधे कनेक्शन नेटवर्क पते ज़ाहिर कर देते हैं। पासवर्ड, API कुंजियाँ या निजी जानकारी साझा न करें। कुछ भी गड़बड़ लगे, तो तुरंत कमरा छोड़ दें।
ठीक-ठीक पाबंदियों और जाँचे गए प्लैटफ़ॉर्म के लिए कंपैटिबिलिटी और जाँच का रिकॉर्ड देखें। समस्याओं के लिए समस्या-समाधान देखें।
एजेंट और एक्सटेंशन
वैकल्पिक फ़र्स्ट-पार्टी एजेंट ऐप में इंस्टॉल करें: Agents → Agent Organizer (एजेंट → एजेंट ऑर्गनाइज़र)। Marinara Pasta-Devs/Marinara-Agents का वह कैटलॉग चुनता है, जो उसके मेजर वर्ज़न से मेल खाता है।
- अपडेट: इंस्टॉल किए गए पैकेज का नया वर्ज़न डाउनलोड करने से पहले Marinara पूछता है। Not now (अभी नहीं) मौजूदा वर्ज़न बनाए रखता है, और Agent Organizer में Update बना रहता है। नई इंस्टॉलेशन में कोई पैकेज नहीं होता।
- पैकेज कहाँ रहते हैं:
DATA_DIR/capability-packages। Docker वॉल्यूम, कस्टम डेटा फ़ोल्डर, बैकअप और सामान्य अपग्रेड इन्हें बचाकर रखते हैं। यह डेस्कटॉप, Docker और Termux पर लागू होता है। iOS और दूसरे ब्राउज़र अपने होस्ट सर्वर के पैकेज इस्तेमाल करते हैं। - डिस्क की जगह: Marinara हर पैकेज का मौजूदा और पिछला वर्ज़न रखता है। पुराने वर्ज़न और
DATA_DIR/capability-runtime-snapshotsमें रखी अस्थायी कॉपियाँ वह हटा देता है। पैकेज का डेटा कभी नहीं हटाया जाता। - ऑफ़लाइन: GitHub तक पहुँच न हो, अपडेट मना कर दिया जाए या जाँच फ़ेल हो जाए, तब भी इंस्टॉल किए हुए पैकेज अपने वर्ज़न पर चलते रहते हैं।
कस्टम एजेंट इंपोर्ट
बाहरी एजेंट फ़ाइलें, फ़ोल्डर और रिपॉज़िटरी लॉक रहती हैं। इन्हें चालू करने के लिए Settings → Advanced → Danger Zone (सेटिंग्स → एडवांस्ड → डेंजर ज़ोन) में Allow custom Agent imports (कस्टम एजेंट इंपोर्ट की इजाज़त दें) चालू करें। इसके लिए किसी एनवायरनमेंट वेरिएबल की ज़रूरत नहीं है। जब तक आप यह न करें, इंपोर्ट के कंट्रोल धुँधले रहते हैं।
हर इंपोर्ट पहले यह दिखाता है कि एजेंट कौन-कौन सी क्षमताएँ माँग रहा है। परमिशन साफ़ तौर पर मंज़ूर करनी पड़ती है। बंडल किए गए फ़ंक्शन और टूल चुनाव इंपोर्ट नहीं होते, जेनरेट हुई CSS साफ़ की जाती है, और नतीजे में होने वाले काम मंज़ूर की गई क्षमताओं से मिलाकर जाँचे जाते हैं। गेट बंद करने पर इंपोर्ट किए गए एजेंट रुक जाते हैं। Marinara में बनाए गए एजेंट और आधिकारिक पैकेज पर इसका असर नहीं पड़ता।
कस्टम एजेंट रिपॉज़िटरी
रिपॉज़िटरी डिफ़ॉल्ट रूप से बंद रहती हैं, क्योंकि उनके प्रॉम्प्ट और टूल जाँचे हुए नहीं होते। ENABLE_CUSTOM_AGENT_REPOS=true सेट करें, Allow custom Agent imports चालू करें, फिर किसी सार्वजनिक GitHub रिपॉज़िटरी का प्रीव्यू देखने के लिए Agents → Agent Organizer → Custom Sources (एजेंट → एजेंट ऑर्गनाइज़र → कस्टम सोर्स) खोलें। सोर्स जोड़ने और बाद के बदलाव लागू करने, दोनों के लिए पुष्टि ज़रूरी है। सिंक मैन्युअल है, और Marinara कभी बैकग्राउंड में रिपॉज़िटरी क्लोन नहीं करता, न उन्हें बार-बार जाँचता है। सिर्फ़ रिपॉज़िटरी के रूट वाले GitHub URL स्वीकार किए जाते हैं।
कोई रिपॉज़िटरी एजेंट, Game Mode रूलसेट या दोनों पब्लिश करती है। रूट में:
agents.jsonडाउनलोड होने वाले एजेंट के फ़ॉर्मैट में एक ऐरे है:
[
{
"id": "continuity-helper",
"name": "Continuity Helper",
"description": "Checks recent turns for contradictions.",
"phase": "post_processing",
"enabledByDefault": false,
"category": "writer",
"defaultPromptTemplate": "Check {{messages}} for continuity errors."
}
]rulesetsमें हर.jsonफ़ाइल में एक रूलसेट होता है, ज़्यादा से ज़्यादा 512 KB की 32 फ़ाइलें। सिर्फ़ सीधे इसके अंदर रखी फ़ाइलें पढ़ी जाती हैं। प्रीव्यू में हर रूलसेट का नाम, वर्ज़न और दायरा दिखता है। किसी रूलसेट का Game Master टेक्स्ट उसे इस्तेमाल करने वाले हर गेम में मॉडल को भेजा जाता है, इसलिए सिर्फ़ भरोसेमंद लोगों से ही इंस्टॉल करें।
इंपोर्ट किए गए रूलसेट का नाम रिपॉज़िटरी के मालिक के नाम पर होता है, जैसे alice/my-5e, इसलिए वे कभी कोई आधिकारिक नाम नहीं लेते। हर वर्ज़न रखा जाता है, और गेम ठीक उसी वर्ज़न पर चलता है जिस पर वह शुरू हुआ था। अगर वही वर्ज़न अलग कंटेंट के साथ आए, तो Marinara इंस्टॉल किया हुआ वर्ज़न रखता है और बताता है कि लेखक से वर्ज़न नंबर बढ़ाने को कहें। जिस फ़ाइल को Marinara पढ़ नहीं पाता, वह वजह के साथ लिस्ट में दिखती है और छोड़ दी जाती है।
सिंक पर रिमोट प्रॉम्प्ट, सेटिंग्स और टूल की वैल्यू, प्रीव्यू में दिखने वाली रिपॉज़िटरी से मैनेज होने वाली वैल्यू की जगह ले लेती हैं। आपके अकाउंट और आर्टवर्क के चुनाव लोकल ही रहते हैं। अगर कोई एजेंट अपस्ट्रीम से हट जाए, तो वह सामान्य लोकल एजेंट बनकर रहता है और सिर्फ़ उसका रिपॉज़िटरी लिंक हटता है। सोर्स हटाने पर भी यही होता है, और उसके रूलसेट इंस्टॉल रहते हैं।
कस्टम एजेंट Context Sources में Previous output (पिछला आउटपुट) चालू करके अपना आखिरी सफल आउटपुट भी पढ़ सकते हैं। JSON context output (JSON कॉन्टेक्स्ट आउटपुट) के साथ {"text":"main prompt content","agent-context":"private continuation context"} लौटाएँ। मुख्य प्रॉम्प्ट में सिर्फ़ text जाता है। Hide output as spoilers (आउटपुट को स्पॉइलर की तरह छिपाएँ) सेव किए गए आउटपुट को समेटकर रखता है। रीजनरेशन में बदला जा रहा टर्न शामिल नहीं होता, और हटाए गए संदेश या निष्क्रिय स्वाइप कॉन्टेक्स्ट नहीं दे सकते।
External Extensions
थर्ड-पार्टी एक्सटेंशन इंपोर्ट के लिए दो अलग मंज़ूरियाँ चाहिए। एनवायरनमेंट वेरिएबल होस्ट चलाने वाले की परमिशन है। Danger Zone का स्विच यूज़र की स्वीकृति है।
.envमेंENABLE_EXTERNAL_EXTENSIONS=trueसेट करें।- Settings → Advanced → Danger Zone खोलें, डेटा मिटाने वाले कंट्रोल से नीचे स्क्रॉल करें, चेतावनी पढ़ें और Allow third-party extension imports (थर्ड-पार्टी एक्सटेंशन इंपोर्ट की इजाज़त दें) चालू करें।
इसके बाद Settings → Addons (सेटिंग्स → ऐडऑन) के नीचे External Extensions (बाहरी एक्सटेंशन) सेक्शन दिखता है। किसी भी गेट को बंद करने पर बाहरी रिकॉर्ड बंद हो जाते हैं और उनका कोड रुक जाता है। हाथ से रखे गए, पुराने, प्रोफ़ाइल से इंपोर्ट हुए और अनजान सोर्स वाले रिकॉर्ड बाहरी माने जाते हैं, इसलिए किसी फ़ोल्डर में फ़ाइलें डालकर इन गेट से बचा नहीं जा सकता। Professor Mari के ड्राफ़्ट को किसी गेट की ज़रूरत नहीं होती। वे बंद हालत में शुरू होते हैं और उनके ठीक उसी कोड हैश की मंज़ूरी चाहिए।
सैंडबॉक्स में चलने वाले Browser Extensions डिफ़ॉल्ट हैं। कुछ पुराने पैकेज पर Full page access दिखता है, क्योंकि उन्हें Marinara का पेज चाहिए। यह मोड मंज़ूर किए गए कोड को Marinara के पेज में चलाता है, और उसे पेज के कंटेंट, ब्राउज़र स्टोरेज, नेटवर्क API और आपके सेशन तक पहुँच मिलती है। यह सिर्फ़ External Extensions के लिए है, जब दोनों गेट खुले हों, और इसके लिए अलग से एक चेतावनी स्वीकार करनी पड़ती है। इसे बंद करने के बाद पेज रीलोड करें।
एनवायरनमेंट वेरिएबल की पूरी लिस्ट
ऊपर की टेबल में एक्सेस कंट्रोल, स्टोरेज, लॉगिंग, टाइमआउट, खास अधिकार वाले काम और लोकल पतों की छूट आ चुके हैं। बाकी यहाँ हैं।
सर्वर और स्टार्टअप
| वेरिएबल | डिफ़ॉल्ट | यह क्या करता है |
PORT | 7860 | सर्वर जिस पोर्ट पर सुनता है। Android, Docker और Termux पर यह वैल्यू एक जैसी रखें। |
HOST | 127.0.0.1 (लॉन्चर और Docker इमेज में 0.0.0.0) | जिस नेटवर्क इंटरफ़ेस से जुड़ना है। LAN से पहुँच के लिए 0.0.0.0 इस्तेमाल करें। डिफ़ॉल्ट Compose फ़ाइल Docker पोर्ट को सिर्फ़ 127.0.0.1 पर पब्लिश करती है। |
MARINARA_ANDROID_SECRET | खाली | APK से मैनेज होने वाले Termux इंस्टॉल के लिए अंदरूनी सीक्रेट। Android ऐप इसे बनाता है और Termux लॉन्चर इसे एक्सपोर्ट करता है। यूज़र से इसे सेट करने को कभी न कहें। इसमें ठीक 64 हेक्स कैरेक्टर होने चाहिए। कोई गलत, गैर-खाली वैल्यू डिवाइस की लोकल रिक्वेस्ट को HTTP 503 के साथ फ़ेल कर देती है। |
MARINARA_ANDROID_SECRET_FILE | ~/.marinara-engine/android-secret | Termux लॉन्चर और लोकल mari कमांड की इस्तेमाल की जाने वाली सीक्रेट फ़ाइल। APK और लॉन्चर इसे मैनेज करते हैं। |
AUTO_OPEN_BROWSER | true | लॉन्चर ऐप का URL खोलें या नहीं। false इसे रोकता है। APK से मैनेज होने वाला सेटअप इसे बंद कर देता है। |
AUTO_UPDATE_ENABLED | true | Git वाले लॉन्चर शुरू होने से पहले अपडेट लाकर लागू करें या नहीं। false अगली बार शुरू करने से इसे बंद कर देता है। लॉन्चर फिर भी सिर्फ़ पढ़ने वाली एक जाँच करता है कि कोई नया रिलीज़ आया या नहीं, और याद दिला देता है। --skip-update एक बार शुरू करने के लिए दोनों जाँचें छोड़ देता है। |
MARINARA_NOTICES_ENABLED | true | सर्वर मेंटेनर्स के नोटिस लाए या नहीं। देखें Marinara नोटिस। |
MARINARA_NOTICES_URL | notices ब्रांच में notices.json | फ़ोर्क और मिरर के लिए नोटिस फ़ाइल बदलता है। इसकी जाँच उसी तरह होती है, और https://github.com/Pasta-Devs/ के बाहर के लिंक हटा दिए जाते हैं। |
MARINARA_ENV_FILE | प्रोजेक्ट रूट का .env | .env फ़ाइल के लिए दूसरा पथ। इसे स्टार्टअप से पहले सेट करें। |
MARINARA_MEDIA_GENERATION_CONCURRENCY | 4 | पूरे सर्वर में एक साथ ज़्यादा से ज़्यादा इतनी इमेज या वीडियो रिक्वेस्ट। लोकल ComfyUI या SwarmUI की VRAM खत्म हो जाए, तो इसे 1-2 तक घटाएँ। 0 यह सीमा हटा देता है। गलत वैल्यू चेतावनी के साथ अनदेखी कर दी जाती हैं। बैच का काम आखिरी स्लॉट कभी नहीं लेता। यह Queue media generation requests (मीडिया जेनरेशन रिक्वेस्ट कतार में लगाएँ) के ऊपर काम करता है, जो Settings → Generations → Overall Generations (सेटिंग्स → जेनरेशन → कुल जेनरेशन) में है और डिफ़ॉल्ट रूप से चालू रहता है। वह हर अकाउंट के लिए इमेज और वीडियो के काम कतार में लगाता है। |
MARINARA_MEDIA_GENERATION_WAIT_TIMEOUT_MS | 600000 (10 मिनट) | फ़ेल होने से पहले कोई रिक्वेस्ट खाली स्लॉट का कितनी देर इंतज़ार करती है। 0 हमेशा इंतज़ार करता है। |
MARINARA_SHARED_GPU_HOSTS | खाली | कॉमा से अलग की गई host:port लिस्ट, जब एक GPU किसी लोकल मॉडल और लोकल इमेज या वीडियो बैकएंड के बीच साझा हो, जैसे llama-swap के साथ। लिस्ट वाले होस्ट पर टेक्स्ट और मीडिया रिक्वेस्ट बारी-बारी से चलती हैं, ताकि कोई तस्वीर चैट के जवाबों के पीछे हमेशा इंतज़ार न करती रहे। कोई तस्वीर या क्लिप ज़्यादा से ज़्यादा MARINARA_MEDIA_GENERATION_WAIT_TIMEOUT_MS तक इंतज़ार करती है। एम्बेडिंग को नहीं रोका जाता। बिना रीस्टार्ट के नई रिक्वेस्ट पर लागू होता है। |
MARINARA_ENV_WATCH | 1 | .env पर कैसे नज़र रखी जाती है। डिफ़ॉल्ट: बदलाव की सूचनाएँ (करीब 250 ms का डिबाउंस), और फ़ॉलबैक के रूप में 30 सेकंड वाली जाँच। poll: हमेशा 30 सेकंड वाली जाँच। 0: बंद। देखें रीस्टार्ट या हॉट रीलोड। |
TZ | सिस्टम डिफ़ॉल्ट | सर्वर के कामों के लिए होस्ट का फ़ॉलबैक टाइमज़ोन, जैसे Europe/Warsaw। होस्ट का टाइमज़ोन इस्तेमाल करने के लिए इसे सेट न करें या खाली छोड़ें। शेड्यूल के लिए Conversation के सेव किए गए Schedule timezone (शेड्यूल का टाइमज़ोन) को प्राथमिकता मिलती है। |
CORS_ORIGINS | http://localhost:5173,http://127.0.0.1:5173 | वे ब्राउज़र ऑरिजिन, जिन्हें क्रॉस-ऑरिजिन रिक्वेस्ट भेजने की इजाज़त है। |
AUTO_CREATE_DEFAULT_CONNECTION | true | पुराना फ़्लैग। मौजूदा बिल्ड के साथ कोई शुरुआती कुंजी नहीं आती, इसलिए इससे कुछ नहीं बनता। अपना अकाउंट ऐप में खुद जोड़ें। |
Schedule timezone डिफ़ॉल्ट रूप से आपके डिवाइस का टाइमज़ोन लेता है। आप इसे Conversation के सेटअप के दौरान, Conversation की Chat Settings (चैट सेटिंग्स) में, या कैरेक्टर के शेड्यूल एडिटर में बदल सकते हैं। यह एक ग्लोबल सेटिंग है, जो हर Conversation चैट में साझा होती है और उसी सर्वर के दूसरे क्लाइंट के साथ सिंक होती है।
मीडिया और स्प्राइट टूल
| वेरिएबल | डिफ़ॉल्ट | यह क्या करता है |
FFMPEG_PATH | खाली | ffmpeg का पथ, जो एनिमेटेड एक्सप्रेशन GIF के लिए इस्तेमाल होता है। सेट न होने पर आपके PATH वाला ffmpeg इस्तेमाल होता है। |
SPRITE_ANIMATED_FFMPEG_TIMEOUT_MS | 180000 (3 मिनट) | एक एनिमेटेड एक्सप्रेशन क्लिप बदलने के लिए मिलने वाला समय। |
SPRITE_BACKGROUND_REMOVAL_ENGINE | auto | auto पहले बिल्ट-इन सफ़ाई आज़माता है, फिर वैकल्पिक AI टूल। builtin सिर्फ़ बिल्ट-इन सफ़ाई इस्तेमाल करता है। backgroundremover AI टूल ज़रूरी कर देता है। |
BACKGROUNDREMOVER_AUTO_INSTALL | false | true होने पर लॉन्च के समय वैकल्पिक AI बैकग्राउंड रिमूवर इंस्टॉल हो जाता है। |
BACKGROUNDREMOVER_COMMAND | खाली | सिस्टम के backgroundremover प्रोग्राम का पथ। |
BACKGROUNDREMOVER_PYTHON | खाली | उस Python का पथ, जिसमें backgroundremover इंस्टॉल है। |
BACKGROUNDREMOVER_TIMEOUT_MS | 600000 (10 मिनट) | AI से बैकग्राउंड हटाने वाली एक कॉल के लिए मिलने वाला समय। |
सीन वीडियो प्रोवाइडर
वीडियो अकाउंट ऐप में सेट होते हैं। ये सेटिंग्स सिर्फ़ कामों को ट्यून करती हैं। वैल्यू मिलीसेकंड में हैं।
| वेरिएबल | डिफ़ॉल्ट | यह क्या करता है |
GOOGLE_VEO_VIDEO_POLL_INTERVAL_MS | 10000 | सर्वर Google Veo के काम की जाँच कितनी-कितनी देर में करता है। |
XAI_VIDEO_POLL_INTERVAL_MS | 5000 | सर्वर xAI Imagine के काम की जाँच कितनी-कितनी देर में करता है। |
OPENROUTER_VIDEO_POLL_INTERVAL_MS | 10000 | सर्वर OpenRouter के वीडियो काम की जाँच कितनी-कितनी देर में करता है। |
SEEDANCE_VIDEO_POLL_INTERVAL_MS | 10000 | सर्वर Seedance के काम की जाँच कितनी-कितनी देर में करता है। |
VIDEO_REFERENCE_PUBLIC_BASE_URL | खाली | इस सर्वर का सार्वजनिक HTTPS पता, उन सेवाओं के लिए जिन्हें रेफ़रेंस इमेज URL से लेनी होती है। |
लोरबुक
दोनों डिफ़ॉल्ट रूप से बंद हैं और .env बदलने के बाद अगली जेनरेशन पर लागू होते हैं। LOREBOOK_STABLE_GROUP_WINNERS सेट हो, तो वह Settings → Advanced → Features के Stable lorebook picks (स्थिर लोरबुक चुनाव) स्विच पर भारी पड़ता है। नहीं तो स्विच तय करता है। देखें सुविधा स्विच।
| वेरिएबल | डिफ़ॉल्ट | यह क्या करता है |
LOREBOOK_STABLE_GROUP_WINNERS | false | जब तक उम्मीदवार वही रहें, हर चैट में समावेशन समूह का वही विजेता बनाए रखता है, हर जेनरेशन पर दोबारा चुनने के बजाय। इससे प्रोवाइडर की प्रॉम्प्ट कैशिंग के लिए प्रॉम्प्ट की शुरुआत एक जैसी रहती है। |
LOREBOOK_COMPACT_STORED_SCANS | false | चालू हुई एंट्री का पूरा टेक्स्ट सिर्फ़ सबसे नए असिस्टेंट या नैरेटर संदेश पर सेव करता है। पुराने संदेशों में एंट्री ID, कीवर्ड और स्कोर रहते हैं। इससे बड़ी लोरबुक वाली चैट काफ़ी छोटी हो जाती हैं। नए संदेश डिलीट हो जाएँ, तो जो संदेश फिर से सबसे नया बनता है, उसके लिए Active Context और एजेंट की दोबारा कोशिश एंट्री का मौजूदा टेक्स्ट दिखाते हैं। |
scripts/compact-lorebook-scans.mjs यही नियम पुरानी चैट पर लागू करती है। पहले सर्वर रोकें। जब तक आप --apply न दें, यह सिर्फ़ ड्राई रन होता है, और लिखने से पहले यह दोनों संदेश टेबल का बैकअप बनाती है।
मज़बूती
सभी डिफ़ॉल्ट रूप से बंद हैं, जिससे पुराना व्यवहार बना रहता है। STORAGE_CACHE_WINDOWS_BOOT_ID, SHUTDOWN_WINDOWS_CONSOLE_SIGNALS और SHUTDOWN_FORCE_EXIT_ON_REPEAT के लिए रीस्टार्ट ज़रूरी है। बाकी .env बदलने के बाद लागू हो जाते हैं। PROVIDER_RETRY_TRANSIENT_ERRORS सेट हो, तो वह Settings → Advanced → Features के Retry failed provider calls (असफल प्रोवाइडर कॉल दोहराएँ) स्विच पर भारी पड़ता है। नहीं तो स्विच तय करता है।
| वेरिएबल | डिफ़ॉल्ट | यह क्या करता है |
PROVIDER_RETRY_TRANSIENT_ERRORS | false | मना किए गए या पहुँच से बाहर कनेक्शन, या 502 या 503 को ज़्यादा से ज़्यादा 5 सेकंड के इंतज़ार के साथ ज़्यादा से ज़्यादा दो बार दोबारा आज़माता है, और सिर्फ़ तब, जब तक आप तक कोई टेक्स्ट न पहुँचा हो। 504 या बीच में टूटा कनेक्शन कभी दोबारा नहीं आज़माया जाता। अकाउंट का फ़ॉलबैक हो, तो यह इस्तेमाल नहीं होता: फ़ॉलबैक तुरंत आज़माया जाता है। धीरे फ़ेल होने वाले होस्ट पर एरर लगभग 20 सेकंड देर से दिख सकती है। |
STORAGE_SKIP_UNCHANGED_WRITES | false | अगर किसी चैट फ़ाइल या manifest.json का कंटेंट वही है जो इस सर्वर ने आखिरी बार लिखा था, और डिस्क पर फ़ाइल बदली नहीं है, तो सेव उसे दोबारा नहीं लिखता। जो फ़ाइल अभी-अभी अपनी .bak से रिस्टोर हुई है, वह हमेशा दोबारा लिखी जाती है। |
STORAGE_YIELDING_SERIALIZE | false | बड़ी चैट फ़ाइलों को छोटे-छोटे हिस्सों में सेव के लिए तैयार करता है, ताकि बहुत लंबी चैट सेव होते समय दूसरी रिक्वेस्ट न रुकें। लिखे जाने वाले बाइट वही रहते हैं। |
STORAGE_CACHE_WINDOWS_BOOT_ID | false | सिर्फ़ Windows। स्टोरेज लॉक हर शुरुआत पर बूट टाइम की जो जाँच चलाता है (लगभग 1.5 से 2 सेकंड का PowerShell), उसे अगले रीबूट तक DATA_DIR के अंदर .writer-boot-id.json में याद रखता है। |
SHUTDOWN_WINDOWS_CONSOLE_SIGNALS | false | सिर्फ़ Windows। <kbd>Ctrl</kbd>+<kbd>Break</kbd> दबाने और कंसोल बंद करने पर भी सर्वर ठीक से बंद होता है और इंतज़ार कर रहे सेव लिख देता है। कंसोल बंद करने पर समय-सीमाएँ छोटी रहती हैं, ताकि काम Windows के दिए लगभग 5 सेकंड में पूरा हो जाए। |
SHUTDOWN_FORCE_EXIT_ON_REPEAT | false | पहली बार के 1.5 सेकंड से ज़्यादा बाद <kbd>Ctrl</kbd>+<kbd>C</kbd> या <kbd>Ctrl</kbd>+<kbd>Break</kbd> फिर दबाने पर सर्वर तुरंत बंद हो जाता है। जो सेव अभी लिखे नहीं गए, वे खो सकते हैं। इसके बिना दोबारा दबाना अनदेखा होता है और बंद होने की 8 सेकंड की सीमा लागू रहती है। |
SHUTDOWN_EARLY_FLUSH | false | स्टॉप सिग्नल मिलते ही इंतज़ार कर रहे सेव लिखना शुरू कर देता है, जबकि कनेक्शन अभी बंद हो रहे हों। Advanced Settings वाला रीस्टार्ट इसका इस्तेमाल नहीं करता। |
SHUTDOWN_RUNTIME_STOP_BUDGET_MS | 0 | स्टोरेज बंद करने से पहले स्टॉप सिग्नल बैकग्राउंड रनटाइम (पैकेज, एक्सटेंशन, बिल्ट-इन मॉडल) का कितनी देर इंतज़ार करता है। 0 सबका इंतज़ार करता है। ज़्यादा से ज़्यादा 2500, ताकि स्टोरेज 8 सेकंड की सीमा के अंदर बंद हो जाए। Advanced Settings वाला रीस्टार्ट अब भी सबका इंतज़ार करता है। |
इंटीग्रेशन और दूसरी चीज़ें
| वेरिएबल | डिफ़ॉल्ट | यह क्या करता है |
CLAUDE_SUBSCRIPTION_USE_INSTALLED_CLI | true | Claude (Subscription) अकाउंट इस कंप्यूटर पर मौजूद Claude Code इस्तेमाल करें या नहीं, जब वह साथ आने वाली कॉपी जितना नया या उससे नया हो। Android पर साथ आने वाली कॉपी नहीं होती, इसलिए वहाँ इसे चालू रखना ज़रूरी है। false हमेशा साथ आने वाली कॉपी इस्तेमाल करता है। पाँच मिनट के अंदर लागू हो जाता है। |
DOCS_I18N_BASE_URL | आधिकारिक docs-i18n ब्रांच | डॉक्यूमेंटेशन और UI भाषा पैक कहाँ से डाउनलोड होते हैं। UI पैक इसका ui/ सबट्री इस्तेमाल करते हैं। यह सार्वजनिक https:// होस्ट होना चाहिए। |
GIPHY_API_KEY | खाली | Conversation मोड में GIF सर्च के लिए Giphy कुंजी। जब तक आप इसे सेट करके रीस्टार्ट न करें, सर्च बंद रहती है। |
INTIFACE_URL | ws://127.0.0.1:12345 | Intiface हैप्टिक ऐप का डिफ़ॉल्ट पता। |
SPOTIFY_REDIRECT_URI | रिक्वेस्ट से तय | Spotify लॉगिन कॉलबैक बदलने के लिए। जब TLS ऊपर की परत पर खत्म होता हो, तब इसे सेट करें। |
MARI_WIKI_CONTENT_MAX_BYTES | 50000 | Professor Mari छाँटने से पहले ज़्यादा से ज़्यादा इतना विकी पेज कंटेंट पढ़ता है। |
MARI_WIKI_REQUEST_TIMEOUT_MS | 30000 | Professor Mari की एक विकी रिक्वेस्ट के लिए मिलने वाला समय। |
MARI_WIKI_CACHE_TTL_MS | 300000 | Professor Mari विकी से पढ़ी गई चीज़ कितनी देर कैश में रखता है। |
SIDECAR_RUNTIME_INSTALL_ENABLED | false (Windows लॉन्चर true सेट करता है) | लूपबैक पर एडमिन हेडर के बिना Built-in model (बिल्ट-इन मॉडल) का रनटाइम इंस्टॉल होने देता है। |
Built-in model के लिए देखें बिल्ट-इन मॉडल का सेटअप।
बाहर जाने वाली रिक्वेस्ट के लिए HTTP प्रॉक्सी
कुछ नेटवर्क इंटरनेट तक सिर्फ़ एक HTTP प्रॉक्सी के ज़रिए पहुँचते हैं, जैसे TUN मोड के बिना v2rayN। Marinara AI सेवाओं, इमेज सेवाओं, एम्बेडिंग सर्वर और एजेंट कैटलॉग को भेजी जाने वाली रिक्वेस्ट उस प्रॉक्सी से भेज सकता है। इन्हें वहाँ सेट करें जहाँ से Marinara शुरू होता है, या .env में, फिर रीस्टार्ट करें।
| वेरिएबल | डिफ़ॉल्ट | यह क्या करता है |
NODE_USE_ENV_PROXY | सेट नहीं | 1 प्रॉक्सी चालू करता है। इसके बिना Marinara, Node.js की तरह, प्रॉक्सी सेटिंग्स अनदेखी करता है। |
HTTP_PROXY | खाली | प्रॉक्सी का पता, जैसे http://127.0.0.1:10809। HTTPS_PROXY सेट न हो, तो हर रिक्वेस्ट के लिए यही इस्तेमाल होता है। |
HTTPS_PROXY | खाली | https:// पतों के लिए प्रॉक्सी, जब वह HTTP_PROXY से अलग हो। |
NO_PROXY | खाली | कॉमा से अलग किए होस्ट, जो प्रॉक्सी से होकर नहीं जाते। अपने नेटवर्क के मॉडल सर्वर यहाँ जोड़ें। localhost, 127.0.0.1 और ::1 हमेशा प्रॉक्सी से बाहर रहते हैं। |
मिलती-जुलती गाइड
- सुविधा स्विच
- रिमोट एक्सेस: लॉगिन और IP अलाउलिस्ट
- Marinara आपका डेटा कहाँ सेव करता है
- किसी AI प्रोवाइडर से कनेक्ट करना
- सीन वीडियो
- Marinara Engine की समस्याएँ सुलझाना