File size: 4,713 Bytes
44b5a51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# 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