# 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