| # Copy to .env and fill in your access keys. | |
| # ----------------------------------------------------------------------------- | |
| # 9Hits Viewer - access key from https://panel.9hits.com/user/profile | |
| ACCESS_KEY= | |
| # --- 9Hits viewer on/off --- | |
| # 9Hits is OFF by default so a bare deploy is conservative. To run BOTH | |
| # viewers on a small free instance (Render 512 MB, Koyeb nano), set: | |
| # NINEHITS_ENABLED=yes | |
| # FEELINGSURF_ENABLED=yes (default) | |
| # DUAL_VIEWER_MODE=auto (see below - this is what stops the OOM) | |
| # and let LOW_MEMORY + memguard shrink/guard/alternate the two viewers. | |
| NINEHITS_ENABLED=no | |
| # --- 512MB dual-viewer management (runs BOTH viewers WITHOUT OOM) ----------- | |
| # Run BOTH viewers AT THE SAME TIME on a 512 MB instance (Render free): | |
| # NINEHITS_ENABLED=yes | |
| # FEELINGSURF_ENABLED=yes | |
| # DUAL_VIEWER_MODE=concurrent # always run both, never time-slice | |
| # LOW_MEMORY=extreme # both viewers --single-process (~324 MB pair) | |
| # Measured with a real Chromium 149: the extreme pair is ~324 MB, so both fit | |
| # comfortably. Safety nets (details in README): | |
| # * memguard.py restarts the heaviest viewer at MEMGUARD_HARD_PCT (97%) | |
| # of the budget so the platform never OOM-kills the container. | |
| # * Crash auto-fallback: if a viewer crash-loops 3x at startup under | |
| # single-process, its SP flags are dropped automatically (NH_SP=no / | |
| # FS_SP=no force that). If FeelingSurf fails under swiftshader+SP, set | |
| # FS_GL_MODE=disable-gpu. | |
| # * DUAL_VIEWER_MODE=auto still works: escalates to time-slice only if the | |
| # box truly cannot fit both. | |
| DUAL_VIEWER_MODE=concurrent | |
| TIME_SLICE=1500 # seconds per viewer turn in time-slice (25 min) | |
| LOW_MEMORY=extreme # auto | off | balanced | extreme | |
| NH_SP=yes # single-process for 9Hits (extreme mode) | |
| FS_SP=yes # single-process for FeelingSurf (extreme mode) | |
| FS_GL_MODE=swiftshader # swiftshader | disable-gpu (last resort) | |
| # MEMGUARD_LIMIT_MB=512 # force the budget (render.yaml sets 512); | |
| # # 0 = auto-detect cgroup limit / MemTotal | |
| # MEMGUARD_HARD_PCT=97 # % of budget at which memguard restarts the | |
| # # heaviest viewer (default 97 on small boxes) | |
| # CREATE_SWAP=256M # best-effort swap where swapon is allowed | |
| # NH_RUN_EXTRA_ARGS=--hide-columns=quality,points # run-pass-only 9Hits flags | |
| # FS_EXTRA_FLAGS= # extra FeelingSurf flags (appended last) | |
| # --- 9Hits proxy settings (choose Option A, A+, or B) --- | |
| # Option A: Static proxy list (5-6 sessions recommended for 512 MB free tier) | |
| #BULK_ADD_PROXY_TYPE=socks5 | |
| #BULK_ADD_PROXY_LIST=1.2.3.4:1080;user;pass|1.2.3.5:1080;user;pass|1.2.3.6:1080;user;pass|1.2.3.7:1080;user;pass|1.2.3.8:1080;user;pass | |
| # Option A+: Fetch proxy list on startup (e.g. Webshare download URL) | |
| #BULK_ADD_PROXY_LIST_URL=https://proxy.webshare.io/api/v2/proxy/list/download/TOKEN/-/any/username/direct/-/ | |
| # Option B: External proxy pool (configured at https://dash.9hits.com/pool) | |
| #EX_PROXY_SESSIONS=5 | |
| #EX_PROXY_URL=https://dash.9hits.com/pool/YOUR_POOL_KEY | |
| # --- 9Hits viewer settings (see README.md for the full list) --- | |
| CLEAR_ALL_SESSIONS=yes | |
| SYSTEM_SESSION=no | |
| SESSION_NOTE=my-proxies | |
| HIDE_BROWSER=yes | |
| ALLOW_POPUPS=no | |
| ALLOW_ADULT=no | |
| ALLOW_CRYPTO=no | |
| CACHE_LIMIT=0 | |
| RESET_INTERVAL=2h | |
| NOTE=local | |
| #EXTRA_ARGS=--hide-columns=quality,points | |
| # --- 9Hits runtime tuning (usually no need to change) --- | |
| # The viewer is baked into the image at build time; DEFAULT_DL swaps it at start. | |
| #DEFAULT_DL=https://dl.9hits.com/9hitsv6-linux64.tar.bz2 | |
| #INIT_TIMEOUT=300 # max seconds for one config "init pass" | |
| #NH_WATCHDOG=yes # restart a wedged viewer (no output AND no CPU) | |
| #NH_WATCHDOG_STUCK=600 # seconds of silence before the watchdog engages | |
| #NH_RESOLUTION=auto # Xvfb resolution, e.g. 1920x1080x24 | |
| #NH_DISPLAY=:99 # X display for 9Hits (FeelingSurf uses :98) | |
| #VNC=yes # mirror the 9Hits display with x11vnc (port 5901) | |
| #VNC_PW=change-me | |
| # ----------------------------------------------------------------------------- | |
| # FeelingSurf Viewer - access token from https://www.feelingsurf.fr/member | |
| # (Profile / API token / Your access token). The default combined deployment | |
| # starts FeelingSurf together with 9Hits. Set FEELINGSURF_ENABLED=no to disable it. | |
| # | |
| # Equivalent to the official quick start: | |
| # docker run -d \ | |
| # -e access_token=$ACCESS_TOKEN \ | |
| # --tmpfs /tmp \ | |
| # --tmpfs /dev/shm \ | |
| # feelingsurf/viewer:stable | |
| ACCESS_TOKEN= | |
| # Run both viewers by default in the one combined container. | |
| FEELINGSURF_ENABLED=yes | |