सर्वर कॉन्फ़िगरेशन रेफ़रेंस

इस गाइड में सर्वर की वे सेटिंग्स दी गई हैं, जिन्हें आप एनवायरनमेंट वेरिएबल से बदल सकते हैं। एनवायरनमेंट वेरिएबल यानी वह सेटिंग जिसे सर्वर .env नाम की एक सादी टेक्स्ट फ़ाइल से पढ़ता है। Marinara बिना किसी कॉन्फ़िगरेशन के काम करता है। ज़्यादातर लोगों को इसकी ज़रूरत सिर्फ़ तब पड़ती है, जब दूसरे डिवाइस को जुड़ने देना हो, साझा सर्वर को सुरक्षित करना हो, डेटा फ़ोल्डर कहीं और ले जाना हो, लॉगिंग बढ़ानी हो या धीमे कामों को ज़्यादा समय देना हो।

आपके AI अकाउंट, कैरेक्टर और चैट के विकल्प ऐप के अंदर सेट होते हैं। AI अकाउंट जोड़ने के लिए देखें किसी AI प्रोवाइडर से कनेक्ट करना।

.env फ़ाइल एडिट करना

पहली बार शुरू होने पर Marinara एक खाली .env बना देता है। हर पंक्ति KEY=value के रूप में होती है। # से शुरू होने वाली पंक्तियाँ कमेंट होती हैं।

इंस्टॉलेशन.env कहाँ होती है
सामान्य इंस्टॉलेशनप्रोजेक्ट का रूट फ़ोल्डर
आधिकारिक Docker या Podman इमेज/app/data/.env, आपके डेटा वाले उसी वॉल्यूम में
  1. उसी फ़ोल्डर में .env.example खोलें। उसमें हर सेटिंग उसकी डिफ़ॉल्ट वैल्यू के साथ दी गई है।
  2. जो पंक्ति चाहिए, उसे .env में कॉपी करें।
  3. = के बाद वाली वैल्यू बदलें और फ़ाइल सेव करें।
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 सेट करें। ये दोनों एडवांस्ड विकल्प हैं।

ये सेटिंग्स सिर्फ़ स्टार्टअप पर पढ़ी जाती हैं। इनमें से किसी को बदलने पर रीस्टार्ट ज़रूरी है, और लॉग में इसकी चेतावनी आती है:

लॉन्चर सर्वर शुरू होने से पहले 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 वाला लॉगिन इस पर भारी पड़ता है। लॉगिन बदलने या हटाने के लिए मौजूदा पासवर्ड चाहिए। लॉगिन प्रॉक्सी के लिए देखें लॉगिन प्रॉक्सी (फ़ॉरवर्ड-ऑथ)।

नीचे इस्तेमाल हुए शब्द:

लॉगिन सेट न हो, तो सर्वर सिर्फ़ भरोसेमंद सोर्स से कनेक्शन स्वीकार करता है: लूपबैक, IP_ALLOWLIST के पते, Tailscale और उसी होस्ट का Docker ब्रिज ट्रैफ़िक। बाकी सबको, आपके घरेलू नेटवर्क को भी, 403 Forbidden मिलता है। दूसरे डिवाइस जुड़ ही सकें, इसके लिए सर्वर का ऐसे पते से जुड़ना ज़रूरी है जहाँ तक वे पहुँच सकें: HOST=0.0.0.0 सेट करें।

वेरिएबलडिफ़ॉल्टयह क्या करता है
BASIC_AUTH_USERखालीलॉगिन का यूज़रनेम। इसे BASIC_AUTH_PASS के साथ सेट करें।
BASIC_AUTH_PASSखालीलॉगिन का पासवर्ड। इनमें से किसी एक को भी खाली छोड़ने पर लॉगिन बंद हो जाता है।
BASIC_AUTH_REALMMarinara EngineBasic Auth चैलेंज में रियल्म का नाम।
IP_ALLOWLISTखालीकॉमा से अलग किए IP या CIDR रेंज, जिन्हें हमेशा इजाज़त रहती है। सीधे लूपबैक को हमेशा इजाज़त है। उसी मशीन पर चल रही रिवर्स प्रॉक्सी को नहीं।
IP_ALLOWLIST_ENABLEDtruefalse लिस्ट को बनाए रखता है, पर उसे लागू करना बंद कर देता है।
ALLOW_UNAUTHENTICATED_PRIVATE_NETWORKfalseलॉगिन सेट न हो, तो प्राइवेट नेटवर्क से बिना पासवर्ड पहुँच देता है। इसमें 100.64.0.0/10 शामिल नहीं है, जिसे इंटरनेट प्रोवाइडर अपने ग्राहकों के बीच साझा करते हैं। इसे TRUSTED_PRIVATE_NETWORKS में तभी जोड़ें, जब आप इस पर भरोसा करते हों।
ALLOW_UNAUTHENTICATED_REMOTEfalseकिसी भी पते से, इंटरनेट से भी, बिना पासवर्ड पहुँच देता है। इसकी सलाह नहीं दी जाती।
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_PROXYtrueजिस Docker ट्रैफ़िक को कोई प्रॉक्सी आगे भेजती है, उसके लिए लॉगिन या अलाउलिस्ट ज़रूरी करता है। false सिर्फ़ तब सेट करें, जब प्रॉक्सी खुद हर विज़िटर को लॉगिन करवाती हो।
REQUIRE_AUTH_FOR_LOOPBACK_PROXYtrueउसी मशीन पर चल रही प्रॉक्सी या टनल से आगे भेजी गई रिक्वेस्ट को रिमोट मानता है, 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_DIRpackages/server/dataसारे यूज़र डेटा का रूट फ़ोल्डर। Docker इमेज इसे /app/data पर सेट करती हैं।
FILE_STORAGE_DIRDATA_DIR के अंदर storageफ़ाइल-स्टोरेज फ़ोल्डर बदल देता है।
ENCRYPTION_KEYखालीवह कुंजी जो सेव की गई API कुंजियों को एन्क्रिप्ट करती है।
MARINARA_MAX_RESIDENT_CHATS0 (असीमित); SteamOS और Termux पर 8एक साथ ज़्यादा से ज़्यादा कितनी चैट मेमोरी में रखी जाती हैं। सीमा पार होने पर हर सेव के बाद वह चैट मेमोरी से हटा दी जाती है (डिस्क से कभी नहीं), जो सबसे लंबे समय से इस्तेमाल नहीं हुई और जिसमें कोई बिना सेव हुआ बदलाव नहीं है। गलत टेक्स्ट होने पर प्लैटफ़ॉर्म का डिफ़ॉल्ट लागू होता है। 2 से कम पॉज़िटिव वैल्यू 2 बन जाती हैं। 0 मेमोरी से हटाना बंद कर देता है।
MARINARA_EAGER_STORAGEबंद1 स्टार्टअप पर हर चैट लोड करता है, जैसा 2.4.5 से पहले होता था। बड़ी प्रोफ़ाइल पर यह कहीं ज़्यादा मेमोरी लेता है। रीस्टार्ट ज़रूरी है।

एन्क्रिप्शन कुंजी बनाएँ और उसे ENCRYPTION_KEY में पेस्ट करें:

openssl rand -hex 32

Marinara आपका डेटा सादी JSON फ़ाइलों में रखता है, इसलिए आप बैकअप कॉपी कर सकते हैं और पढ़ सकते हैं। किस फ़ोल्डर में क्या रहता है, यह जानने के लिए देखें Marinara आपका डेटा कहाँ सेव करता है।

लॉग लेवल

LOG_LEVEL तय करता है कि सर्वर कितना छापता है। आपके चुने लेवल से नीचे की हर चीज़ वह छिपा देता है।

लेवलइसमें क्या दिखता है
errorसिर्फ़ गंभीर गड़बड़ियाँ।
warnएरर और चेतावनियाँ। यही डिफ़ॉल्ट है।
infoस्टार्टअप और हर रिक्वेस्ट के लॉग भी जोड़ता है।
debugसब कुछ, पूरे प्रॉम्प्ट और मॉडल के जवाब समेत। बहुत ज़्यादा आउटपुट देता है।
वेरिएबलडिफ़ॉल्टयह क्या करता है
LOG_LEVELwarnऊपर वाला लेवल।
LOG_PRESETdefaultprompt-connections वही प्रॉम्प्ट और मॉडल विवरण दिखाता है जो debug दिखाता है, पर GET /api/chats जैसी रोज़मर्रा की रिक्वेस्ट पंक्तियाँ छिपा देता है।
LOG_DISABLE_REQUEST_LOGGINGfalsetrue रोज़मर्रा की रिक्वेस्ट पंक्तियाँ छिपाता है और आपका लेवल बनाए रखता है। रीस्टार्ट ज़रूरी है।
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_MS300000 (5 मिनट)Conversation, Roleplay और Game के जवाबों के लिए पहले टोकन तक का समय और दो चंक के बीच का अंतर। यह उन बैकग्राउंड कामों का बजट भी है, जिनका अपना कोई टाइमआउट नहीं है (Professor Mari, Noodle रिफ़्रेश, Slurp के जवाब)। रेंज 10000-3600000। इससे एजेंट, मीडिया, एम्बेडिंग या टूल के टाइमआउट नहीं बदलते।
AGENT_CALL_TIMEOUT_MS300000 (5 मिनट)एक एजेंट मॉडल कॉल से पहले या उसके दौरान डेटा आए बिना ज़्यादा से ज़्यादा इंतज़ार, डाउनलोड किए जाने वाले एजेंट समेत। डेटा आते ही यह फिर से शुरू होता है। रेंज 10000-3600000। Illustrator को कम से कम उसका बिल्ट-इन 30 मिनट का बिना-डेटा वाला बजट मिलता रहता है।
GAME_DYNAMIC_IMAGE_PROMPT_TIMEOUT_MS45000 (45 सेकंड)उस मॉडल कॉल के कुल समय की सीमा, जो किसी Game सीन को इमेज प्रॉम्प्ट में बदलती है। रेंज 10000-3600000।
EMBEDDING_TIMEOUT_MS300000 (5 मिनट)एक एम्बेडिंग रिक्वेस्ट के लिए मिलने वाला समय।
IMAGE_GEN_TIMEOUT_MS1800000 (30 मिनट)एक इमेज जेनरेशन रिक्वेस्ट के लिए मिलने वाला समय।
IMAGE_GEN_MAX_RESPONSE_BYTES31457280 (30 MiB)स्वीकार किया जाने वाला सबसे बड़ा इमेज जवाब। जब लोकल ComfyUI बड़ा मेटाडेटा एम्बेड करे, तब इसे बढ़ाएँ।
VIDEO_GEN_TIMEOUT_MS1800000 (30 मिनट)एक सीन वीडियो रिक्वेस्ट के लिए मिलने वाला समय, ComfyUI वीडियो वर्कफ़्लो समेत।
VIDEO_GEN_MAX_RESPONSE_BYTES167772160 (160 MiB)स्वीकार किया जाने वाला सबसे बड़ा सीन वीडियो डाउनलोड।
COMFYUI_GEN_TIMEOUT2400 (40 मिनट, सेकंड में)कतार में लगने के बाद एक ComfyUI इमेज वर्कफ़्लो के लिए मिलने वाला समय।
SPRITE_GENERATION_TIMEOUT_MSIMAGE_GEN_TIMEOUT_MSएक AI स्प्राइट काम के लिए मिलने वाला समय।
CUSTOM_TOOL_TIMEOUT_MS60000 (1 मिनट)एक कस्टम टूल कॉल के लिए मिलने वाला समय।
MAX_TOOL_ROUNDS100मॉडल को जवाब देने से पहले ज़्यादा से ज़्यादा इतने टूल-कॉल राउंड मिलते हैं। 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_LOOPBACKfalsetrue होने पर सर्वर के अपने कंप्यूटर पर भी सीक्रेट ज़रूरी हो जाता है।
UPDATES_APPLY_ENABLEDfalseब्राउज़र को Apply Update (अपडेट लागू करें) से उसी चैनल के अपडेट लागू करने देता है। सर्वर वाले कंप्यूटर के ब्राउज़र से रिलीज़ चैनल बदलना इसके बिना भी चलता है। सिर्फ़ Git इंस्टॉलेशन के लिए।
UPDATES_APPLY_DISABLEDसेट नहींसर्वर की तरफ़ से हर अपडेट लागू करने से इनकार करता है, चैनल बदलने समेत। यह UPDATES_APPLY_ENABLED पर भारी पड़ता है। dev और e2e लॉन्चर इसे सेट करते हैं।
UPDATES_ALLOW_REMOTE_APPLYfalseसही सीक्रेट के साथ रिमोट डिवाइस को अपडेट लागू करने देता है।
HAPTICS_ALLOW_REMOTEfalseसही सीक्रेट के साथ रिमोट डिवाइस को हैप्टिक काम चलाने देता है।
CUSTOM_TOOL_SCRIPT_ENABLEDfalseकस्टम स्क्रिप्ट टूल चालू करता है। भरोसे के बाहर या इंपोर्ट किए गए टूल के लिए इसे बंद रखें।
MARI_DB_ALLOW_UNSAFE_TRANSFORMSfalseProfessor Mari की डेटाबेस बदलने वाली स्क्रिप्ट को उन होस्ट पर भी चलने देता है, जिनमें OS सैंडबॉक्स नहीं है (macOS Seatbelt या Linux Bubblewrap, जो मौजूद होने पर इस्तेमाल होते हैं)। जब तक आपने स्क्रिप्ट जाँची न हो, इसे बंद रखें।
ENABLE_CUSTOM_AGENT_REPOSfalseAgent Organizer में GitHub एजेंट-रिपॉज़िटरी का मैन्युअल प्रीव्यू और सिंक चालू करता है। देखें कस्टम एजेंट रिपॉज़िटरी।
MARINARA_OVERWORLD_GAMESfalseखिलाड़ियों को Overworld गेम (एक सेटिंग किट और एक जेनरेट हुई दुनिया) बनाने और किसी पुराने गेम को Overworld गेम में बदलने देता है। बंद होने पर विज़ार्ड सिर्फ़ Classic गेम देता है।
ENABLE_EXTERNAL_EXTENSIONSfalseथर्ड-पार्टी एक्सटेंशन इंपोर्ट के दो गेट में से पहला। देखें External Extensions।
IMPORT_ALLOWED_ROOTSखालीवे फ़ोल्डर, जिन्हें बल्क इंपोर्ट बिना पिकर टोकन के पढ़ सकता है।
PROFILE_EXPORT_JSON_LIMIT_BYTES268435456 (256 MiB)सर्वर ज़्यादा से ज़्यादा इतना बड़ा एक JSON प्रोफ़ाइल एक्सपोर्ट बनाता है।

लोकल पतों की छूट

डिफ़ॉल्ट रूप से AI सेवाओं, इमेज सेवाओं और वेबहुक की तरफ़ जाने वाली रिक्वेस्ट निजी या लोकल पतों तक नहीं जातीं। इससे SSRF (सर्वर-साइड रिक्वेस्ट फ़ोर्जरी) रुकता है, जिसमें किसी रिक्वेस्ट को बहलाकर किसी अंदरूनी पते तक भेजा जाता है। लूपबैक वाले मॉडल सर्वर फिर भी काम करते हैं। निजी नेटवर्क की किसी दूसरी मशीन पर चल रही सेल्फ़-होस्टेड सेवा के लिए सिर्फ़ वही स्विच चालू करें, जिसकी ज़रूरत हो।

वेरिएबलडिफ़ॉल्टयह क्या करता है
PROVIDER_LOCAL_URLS_ENABLEDfalseAI सेवा के URL निजी या LAN पतों तक पहुँच सकते हैं। Android पर यह डिफ़ॉल्ट रूप से चालू रहता है।
IMAGE_LOCAL_URLS_ENABLEDfalseइमेज सेवा के URL निजी या LAN पतों तक पहुँच सकते हैं। निजी नतीजा-URL फिर भी सेवा के ठीक उसी ऑरिजिन से मेल खाने चाहिए।
TTS_LOCAL_URLS_ENABLEDfalseटेक्स्ट टू स्पीच के URL निजी या LAN पतों तक पहुँच सकते हैं।
STT_LOCAL_URLS_ENABLEDfalseSpeech to text सर्वर का URL निजी या LAN पतों तक पहुँच सकता है। उसी मशीन पर चल रहा सर्वर इसके बिना भी काम करता है।
DEEPLX_LOCAL_URLS_ENABLEDfalseDeepLX अनुवाद के URL निजी या LAN पतों तक पहुँच सकते हैं।
WEBHOOK_LOCAL_URLS_ENABLEDfalseकस्टम टूल के वेबहुक निजी या LAN पतों तक पहुँच सकते हैं।

लोकल या सेल्फ़-होस्टेड मॉडल जोड़ने के लिए देखें लोकल या सेल्फ़ होस्टेड मॉडल से कनेक्ट करना।

सुविधा स्विच

असफल प्रोवाइडर कॉल दोहराना या लोरबुक समूह के चुनाव स्थिर रखना जैसे वैकल्पिक सर्वर व्यवहार Settings → Advanced → Features (सेटिंग्स → एडवांस्ड → सुविधाएँ) में हैं। सभी डिफ़ॉल्ट रूप से बंद हैं। कुछ का एक वेरिएबल भी है, जो सेट होने पर स्विच पर भारी पड़ता है। देखें सुविधा स्विच।

Marinara नोटिस

नोटिस मेंटेनर्स की छोटी चेतावनियाँ हैं, जैसे कोई सुरक्षा समस्या या ऐसा मैनुअल कदम जो आपके वर्ज़न को चाहिए। ये बैनर के रूप में दिखते हैं।

नोटिस बंद करने के लिए MARINARA_NOTICES_ENABLED=false सेट करें।

Warning: नोटिस बंद होने पर Marinara आपको सुरक्षा फ़िक्स या ज़रूरी कदमों के बारे में नहीं बता सकता। GitHub रिलीज़ पर खुद नज़र रखें।

फ़ोर्क MARINARA_NOTICES_URL को अपनी फ़ाइल की ओर कर सकते हैं।

वैकल्पिक मल्टीप्लेयर

मल्टीप्लेयर डिफ़ॉल्ट रूप से बंद है। इससे लोग Conversation, Roleplay या Game का एक निजी कमरा साझा कर सकते हैं, जिसमें प्रतिभागियों की कोई तय सीमा नहीं होती। हर मेहमान अपना भरोसेमंद Marinara इस्तेमाल करता है। मेहमानों को AI अकाउंट की ज़रूरत नहीं होती। AI अकाउंट होस्ट देता है, और वह साझा सामग्री पढ़ और रख सकता है। जब तक दोनों में से कोई भी गेट बंद है, Marinara बैकग्राउंड में सेशन, सर्टिफ़िकेट या पीयर की कोई जाँच नहीं करता।

  1. हिस्सा लेने वाले हर Marinara की .env में MULTIPLAYER_ENABLED=true सेट करें और उसे रीस्टार्ट करें। सिर्फ़ हूबहू true वैल्यू ही काम करती है, और हॉट रीलोड इसे लागू नहीं करता।
  2. Settings → Advanced → Multiplayer (सेटिंग्स → एडवांस्ड → मल्टीप्लेयर) खोलें, चेतावनी पढ़ें और सेटिंग चालू करें। इससे न कोई लिस्नर शुरू होता है, न कोई कमरा जॉइन होता है।
  3. होस्ट करने के लिए मोड या सेटअप फ़्लो में Create shared session (साझा सेशन बनाएँ) या Play together (साथ खेलें) इस्तेमाल करें। सेटअप, अपना दिखने वाला नाम और साझा किया जाने वाला पर्सोना टेक्स्ट रिव्यू करें। कोई मौजूदा चैट सिर्फ़ अपने सेटअप के चुनाव साझा करती है, उसका ट्रांसक्रिप्ट, नोट्स या यादें कभी नहीं।
  4. होस्ट पर SSL_CERT और SSL_KEY में ऐसा सर्टिफ़िकेट सेट करें, जो कमरे के होस्टनेम के लिए मान्य हो और जिस पर मेहमान भरोसा करते हों। कमरे के लिए अलग HTTPS पता और पोर्ट चुनें, जैसे https://room.example.org:7861। Host कार्रवाई वह पोर्ट खोलती है। अपने फ़ायरवॉल या राउटर से सिर्फ़ कमरे का पोर्ट आगे भेजें। सामान्य Marinara API बाहर न खोलें। आपके लिए न कोई पोर्ट फ़ॉरवर्डिंग सेट की जाती है, न रिले, न सर्टिफ़िकेट जाँच का कोई बायपास।
  5. कम से कम 12 अक्षरों का कमरे का पासवर्ड रखें, जो आपके एडमिन क्रेडेंशियल से अलग हो। खत्म होने वाला निमंत्रण और पासवर्ड भरोसेमंद लोगों को अलग-अलग भेजें। मेहमान होस्टनेम का फ़िंगरप्रिंट, कमरे का नाम और पर्सोना टेक्स्ट जाँचता है, फिर प्रवेश की रिक्वेस्ट भेजता है। कोई भी इतिहास भेजे जाने से पहले होस्ट Players (खिलाड़ी) में हर रिक्वेस्ट मंज़ूर करता है।

सीमाएँ और व्यवहार:

Warning: सिर्फ़ भरोसेमंद लोगों से जुड़ें, और अपना Marinara क्लाइंट इस्तेमाल करें। होस्ट का दिया हुआ क्लाइंट, एक्सटेंशन या फ़ाइल कभी इंस्टॉल न करें। आप जो साझा करते हैं, उसे होस्ट पढ़ सकता है, और साझा सामग्री उसकी AI सेवाओं को जा सकती है। सीधे कनेक्शन नेटवर्क पते ज़ाहिर कर देते हैं। पासवर्ड, API कुंजियाँ या निजी जानकारी साझा न करें। कुछ भी गड़बड़ लगे, तो तुरंत कमरा छोड़ दें।

ठीक-ठीक पाबंदियों और जाँचे गए प्लैटफ़ॉर्म के लिए कंपैटिबिलिटी और जाँच का रिकॉर्ड देखें। समस्याओं के लिए समस्या-समाधान देखें।

एजेंट और एक्सटेंशन

वैकल्पिक फ़र्स्ट-पार्टी एजेंट ऐप में इंस्टॉल करें: Agents → Agent Organizer (एजेंट → एजेंट ऑर्गनाइज़र)। Marinara Pasta-Devs/Marinara-Agents का वह कैटलॉग चुनता है, जो उसके मेजर वर्ज़न से मेल खाता है।

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

बाहरी एजेंट फ़ाइलें, फ़ोल्डर और रिपॉज़िटरी लॉक रहती हैं। इन्हें चालू करने के लिए 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 रूलसेट या दोनों पब्लिश करती है। रूट में:

  [
    {
      "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."
    }
  ]

इंपोर्ट किए गए रूलसेट का नाम रिपॉज़िटरी के मालिक के नाम पर होता है, जैसे 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 का स्विच यूज़र की स्वीकृति है।

  1. .env में ENABLE_EXTERNAL_EXTENSIONS=true सेट करें।
  2. 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 के लिए है, जब दोनों गेट खुले हों, और इसके लिए अलग से एक चेतावनी स्वीकार करनी पड़ती है। इसे बंद करने के बाद पेज रीलोड करें।

एनवायरनमेंट वेरिएबल की पूरी लिस्ट

ऊपर की टेबल में एक्सेस कंट्रोल, स्टोरेज, लॉगिंग, टाइमआउट, खास अधिकार वाले काम और लोकल पतों की छूट आ चुके हैं। बाकी यहाँ हैं।

सर्वर और स्टार्टअप

वेरिएबलडिफ़ॉल्टयह क्या करता है
PORT7860सर्वर जिस पोर्ट पर सुनता है। Android, Docker और Termux पर यह वैल्यू एक जैसी रखें।
HOST127.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-secretTermux लॉन्चर और लोकल mari कमांड की इस्तेमाल की जाने वाली सीक्रेट फ़ाइल। APK और लॉन्चर इसे मैनेज करते हैं।
AUTO_OPEN_BROWSERtrueलॉन्चर ऐप का URL खोलें या नहीं। false इसे रोकता है। APK से मैनेज होने वाला सेटअप इसे बंद कर देता है।
AUTO_UPDATE_ENABLEDtrueGit वाले लॉन्चर शुरू होने से पहले अपडेट लाकर लागू करें या नहीं। false अगली बार शुरू करने से इसे बंद कर देता है। लॉन्चर फिर भी सिर्फ़ पढ़ने वाली एक जाँच करता है कि कोई नया रिलीज़ आया या नहीं, और याद दिला देता है। --skip-update एक बार शुरू करने के लिए दोनों जाँचें छोड़ देता है।
MARINARA_NOTICES_ENABLEDtrueसर्वर मेंटेनर्स के नोटिस लाए या नहीं। देखें Marinara नोटिस।
MARINARA_NOTICES_URLnotices ब्रांच में notices.jsonफ़ोर्क और मिरर के लिए नोटिस फ़ाइल बदलता है। इसकी जाँच उसी तरह होती है, और https://github.com/Pasta-Devs/ के बाहर के लिंक हटा दिए जाते हैं।
MARINARA_ENV_FILEप्रोजेक्ट रूट का .env.env फ़ाइल के लिए दूसरा पथ। इसे स्टार्टअप से पहले सेट करें।
MARINARA_MEDIA_GENERATION_CONCURRENCY4पूरे सर्वर में एक साथ ज़्यादा से ज़्यादा इतनी इमेज या वीडियो रिक्वेस्ट। लोकल ComfyUI या SwarmUI की VRAM खत्म हो जाए, तो इसे 1-2 तक घटाएँ। 0 यह सीमा हटा देता है। गलत वैल्यू चेतावनी के साथ अनदेखी कर दी जाती हैं। बैच का काम आखिरी स्लॉट कभी नहीं लेता। यह Queue media generation requests (मीडिया जेनरेशन रिक्वेस्ट कतार में लगाएँ) के ऊपर काम करता है, जो Settings → Generations → Overall Generations (सेटिंग्स → जेनरेशन → कुल जेनरेशन) में है और डिफ़ॉल्ट रूप से चालू रहता है। वह हर अकाउंट के लिए इमेज और वीडियो के काम कतार में लगाता है।
MARINARA_MEDIA_GENERATION_WAIT_TIMEOUT_MS600000 (10 मिनट)फ़ेल होने से पहले कोई रिक्वेस्ट खाली स्लॉट का कितनी देर इंतज़ार करती है। 0 हमेशा इंतज़ार करता है।
MARINARA_SHARED_GPU_HOSTSखालीकॉमा से अलग की गई host:port लिस्ट, जब एक GPU किसी लोकल मॉडल और लोकल इमेज या वीडियो बैकएंड के बीच साझा हो, जैसे llama-swap के साथ। लिस्ट वाले होस्ट पर टेक्स्ट और मीडिया रिक्वेस्ट बारी-बारी से चलती हैं, ताकि कोई तस्वीर चैट के जवाबों के पीछे हमेशा इंतज़ार न करती रहे। कोई तस्वीर या क्लिप ज़्यादा से ज़्यादा MARINARA_MEDIA_GENERATION_WAIT_TIMEOUT_MS तक इंतज़ार करती है। एम्बेडिंग को नहीं रोका जाता। बिना रीस्टार्ट के नई रिक्वेस्ट पर लागू होता है।
MARINARA_ENV_WATCH1.env पर कैसे नज़र रखी जाती है। डिफ़ॉल्ट: बदलाव की सूचनाएँ (करीब 250 ms का डिबाउंस), और फ़ॉलबैक के रूप में 30 सेकंड वाली जाँच। poll: हमेशा 30 सेकंड वाली जाँच। 0: बंद। देखें रीस्टार्ट या हॉट रीलोड।
TZसिस्टम डिफ़ॉल्टसर्वर के कामों के लिए होस्ट का फ़ॉलबैक टाइमज़ोन, जैसे Europe/Warsaw। होस्ट का टाइमज़ोन इस्तेमाल करने के लिए इसे सेट न करें या खाली छोड़ें। शेड्यूल के लिए Conversation के सेव किए गए Schedule timezone (शेड्यूल का टाइमज़ोन) को प्राथमिकता मिलती है।
CORS_ORIGINShttp://localhost:5173,http://127.0.0.1:5173वे ब्राउज़र ऑरिजिन, जिन्हें क्रॉस-ऑरिजिन रिक्वेस्ट भेजने की इजाज़त है।
AUTO_CREATE_DEFAULT_CONNECTIONtrueपुराना फ़्लैग। मौजूदा बिल्ड के साथ कोई शुरुआती कुंजी नहीं आती, इसलिए इससे कुछ नहीं बनता। अपना अकाउंट ऐप में खुद जोड़ें।

Schedule timezone डिफ़ॉल्ट रूप से आपके डिवाइस का टाइमज़ोन लेता है। आप इसे Conversation के सेटअप के दौरान, Conversation की Chat Settings (चैट सेटिंग्स) में, या कैरेक्टर के शेड्यूल एडिटर में बदल सकते हैं। यह एक ग्लोबल सेटिंग है, जो हर Conversation चैट में साझा होती है और उसी सर्वर के दूसरे क्लाइंट के साथ सिंक होती है।

मीडिया और स्प्राइट टूल

वेरिएबलडिफ़ॉल्टयह क्या करता है
FFMPEG_PATHखालीffmpeg का पथ, जो एनिमेटेड एक्सप्रेशन GIF के लिए इस्तेमाल होता है। सेट न होने पर आपके PATH वाला ffmpeg इस्तेमाल होता है।
SPRITE_ANIMATED_FFMPEG_TIMEOUT_MS180000 (3 मिनट)एक एनिमेटेड एक्सप्रेशन क्लिप बदलने के लिए मिलने वाला समय।
SPRITE_BACKGROUND_REMOVAL_ENGINEautoauto पहले बिल्ट-इन सफ़ाई आज़माता है, फिर वैकल्पिक AI टूल। builtin सिर्फ़ बिल्ट-इन सफ़ाई इस्तेमाल करता है। backgroundremover AI टूल ज़रूरी कर देता है।
BACKGROUNDREMOVER_AUTO_INSTALLfalsetrue होने पर लॉन्च के समय वैकल्पिक AI बैकग्राउंड रिमूवर इंस्टॉल हो जाता है।
BACKGROUNDREMOVER_COMMANDखालीसिस्टम के backgroundremover प्रोग्राम का पथ।
BACKGROUNDREMOVER_PYTHONखालीउस Python का पथ, जिसमें backgroundremover इंस्टॉल है।
BACKGROUNDREMOVER_TIMEOUT_MS600000 (10 मिनट)AI से बैकग्राउंड हटाने वाली एक कॉल के लिए मिलने वाला समय।

सीन वीडियो प्रोवाइडर

वीडियो अकाउंट ऐप में सेट होते हैं। ये सेटिंग्स सिर्फ़ कामों को ट्यून करती हैं। वैल्यू मिलीसेकंड में हैं।

वेरिएबलडिफ़ॉल्टयह क्या करता है
GOOGLE_VEO_VIDEO_POLL_INTERVAL_MS10000सर्वर Google Veo के काम की जाँच कितनी-कितनी देर में करता है।
XAI_VIDEO_POLL_INTERVAL_MS5000सर्वर xAI Imagine के काम की जाँच कितनी-कितनी देर में करता है।
OPENROUTER_VIDEO_POLL_INTERVAL_MS10000सर्वर OpenRouter के वीडियो काम की जाँच कितनी-कितनी देर में करता है।
SEEDANCE_VIDEO_POLL_INTERVAL_MS10000सर्वर Seedance के काम की जाँच कितनी-कितनी देर में करता है।
VIDEO_REFERENCE_PUBLIC_BASE_URLखालीइस सर्वर का सार्वजनिक HTTPS पता, उन सेवाओं के लिए जिन्हें रेफ़रेंस इमेज URL से लेनी होती है।

लोरबुक

दोनों डिफ़ॉल्ट रूप से बंद हैं और .env बदलने के बाद अगली जेनरेशन पर लागू होते हैं। LOREBOOK_STABLE_GROUP_WINNERS सेट हो, तो वह Settings → Advanced → Features के Stable lorebook picks (स्थिर लोरबुक चुनाव) स्विच पर भारी पड़ता है। नहीं तो स्विच तय करता है। देखें सुविधा स्विच।

वेरिएबलडिफ़ॉल्टयह क्या करता है
LOREBOOK_STABLE_GROUP_WINNERSfalseजब तक उम्मीदवार वही रहें, हर चैट में समावेशन समूह का वही विजेता बनाए रखता है, हर जेनरेशन पर दोबारा चुनने के बजाय। इससे प्रोवाइडर की प्रॉम्प्ट कैशिंग के लिए प्रॉम्प्ट की शुरुआत एक जैसी रहती है।
LOREBOOK_COMPACT_STORED_SCANSfalseचालू हुई एंट्री का पूरा टेक्स्ट सिर्फ़ सबसे नए असिस्टेंट या नैरेटर संदेश पर सेव करता है। पुराने संदेशों में एंट्री 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_ERRORSfalseमना किए गए या पहुँच से बाहर कनेक्शन, या 502 या 503 को ज़्यादा से ज़्यादा 5 सेकंड के इंतज़ार के साथ ज़्यादा से ज़्यादा दो बार दोबारा आज़माता है, और सिर्फ़ तब, जब तक आप तक कोई टेक्स्ट न पहुँचा हो। 504 या बीच में टूटा कनेक्शन कभी दोबारा नहीं आज़माया जाता। अकाउंट का फ़ॉलबैक हो, तो यह इस्तेमाल नहीं होता: फ़ॉलबैक तुरंत आज़माया जाता है। धीरे फ़ेल होने वाले होस्ट पर एरर लगभग 20 सेकंड देर से दिख सकती है।
STORAGE_SKIP_UNCHANGED_WRITESfalseअगर किसी चैट फ़ाइल या manifest.json का कंटेंट वही है जो इस सर्वर ने आखिरी बार लिखा था, और डिस्क पर फ़ाइल बदली नहीं है, तो सेव उसे दोबारा नहीं लिखता। जो फ़ाइल अभी-अभी अपनी .bak से रिस्टोर हुई है, वह हमेशा दोबारा लिखी जाती है।
STORAGE_YIELDING_SERIALIZEfalseबड़ी चैट फ़ाइलों को छोटे-छोटे हिस्सों में सेव के लिए तैयार करता है, ताकि बहुत लंबी चैट सेव होते समय दूसरी रिक्वेस्ट न रुकें। लिखे जाने वाले बाइट वही रहते हैं।
STORAGE_CACHE_WINDOWS_BOOT_IDfalseसिर्फ़ Windows। स्टोरेज लॉक हर शुरुआत पर बूट टाइम की जो जाँच चलाता है (लगभग 1.5 से 2 सेकंड का PowerShell), उसे अगले रीबूट तक DATA_DIR के अंदर .writer-boot-id.json में याद रखता है।
SHUTDOWN_WINDOWS_CONSOLE_SIGNALSfalseसिर्फ़ Windows। <kbd>Ctrl</kbd>+<kbd>Break</kbd> दबाने और कंसोल बंद करने पर भी सर्वर ठीक से बंद होता है और इंतज़ार कर रहे सेव लिख देता है। कंसोल बंद करने पर समय-सीमाएँ छोटी रहती हैं, ताकि काम Windows के दिए लगभग 5 सेकंड में पूरा हो जाए।
SHUTDOWN_FORCE_EXIT_ON_REPEATfalseपहली बार के 1.5 सेकंड से ज़्यादा बाद <kbd>Ctrl</kbd>+<kbd>C</kbd> या <kbd>Ctrl</kbd>+<kbd>Break</kbd> फिर दबाने पर सर्वर तुरंत बंद हो जाता है। जो सेव अभी लिखे नहीं गए, वे खो सकते हैं। इसके बिना दोबारा दबाना अनदेखा होता है और बंद होने की 8 सेकंड की सीमा लागू रहती है।
SHUTDOWN_EARLY_FLUSHfalseस्टॉप सिग्नल मिलते ही इंतज़ार कर रहे सेव लिखना शुरू कर देता है, जबकि कनेक्शन अभी बंद हो रहे हों। Advanced Settings वाला रीस्टार्ट इसका इस्तेमाल नहीं करता।
SHUTDOWN_RUNTIME_STOP_BUDGET_MS0स्टोरेज बंद करने से पहले स्टॉप सिग्नल बैकग्राउंड रनटाइम (पैकेज, एक्सटेंशन, बिल्ट-इन मॉडल) का कितनी देर इंतज़ार करता है। 0 सबका इंतज़ार करता है। ज़्यादा से ज़्यादा 2500, ताकि स्टोरेज 8 सेकंड की सीमा के अंदर बंद हो जाए। Advanced Settings वाला रीस्टार्ट अब भी सबका इंतज़ार करता है।

इंटीग्रेशन और दूसरी चीज़ें

वेरिएबलडिफ़ॉल्टयह क्या करता है
CLAUDE_SUBSCRIPTION_USE_INSTALLED_CLItrueClaude (Subscription) अकाउंट इस कंप्यूटर पर मौजूद Claude Code इस्तेमाल करें या नहीं, जब वह साथ आने वाली कॉपी जितना नया या उससे नया हो। Android पर साथ आने वाली कॉपी नहीं होती, इसलिए वहाँ इसे चालू रखना ज़रूरी है। false हमेशा साथ आने वाली कॉपी इस्तेमाल करता है। पाँच मिनट के अंदर लागू हो जाता है।
DOCS_I18N_BASE_URLआधिकारिक docs-i18n ब्रांचडॉक्यूमेंटेशन और UI भाषा पैक कहाँ से डाउनलोड होते हैं। UI पैक इसका ui/ सबट्री इस्तेमाल करते हैं। यह सार्वजनिक https:// होस्ट होना चाहिए।
GIPHY_API_KEYखालीConversation मोड में GIF सर्च के लिए Giphy कुंजी। जब तक आप इसे सेट करके रीस्टार्ट न करें, सर्च बंद रहती है।
INTIFACE_URLws://127.0.0.1:12345Intiface हैप्टिक ऐप का डिफ़ॉल्ट पता।
SPOTIFY_REDIRECT_URIरिक्वेस्ट से तयSpotify लॉगिन कॉलबैक बदलने के लिए। जब TLS ऊपर की परत पर खत्म होता हो, तब इसे सेट करें।
MARI_WIKI_CONTENT_MAX_BYTES50000Professor Mari छाँटने से पहले ज़्यादा से ज़्यादा इतना विकी पेज कंटेंट पढ़ता है।
MARI_WIKI_REQUEST_TIMEOUT_MS30000Professor Mari की एक विकी रिक्वेस्ट के लिए मिलने वाला समय।
MARI_WIKI_CACHE_TTL_MS300000Professor Mari विकी से पढ़ी गई चीज़ कितनी देर कैश में रखता है।
SIDECAR_RUNTIME_INSTALL_ENABLEDfalse (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 हमेशा प्रॉक्सी से बाहर रहते हैं।

मिलती-जुलती गाइड