Survival LLM
A free AI assistant and survival library (1.5 million offline articles) that runs on your own computer, with no internet. Shows the source of every answer. Mac and Windows.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗griffinlaszlo.com — mocial's sister desktop. The
griffinland icon on mocial.org brings you here in the
same tab, and the mocial icon here takes you back, from the same spot on the
desktop. The idea is that it feels like you never left: the windows, taskbar,
tray clock and fonts are mocial's, and only the desktop changes.
| File | Where it comes from |
|---|---|
main.css | mocial's stylesheet, copied as-is. Rules for mocial's own windows come along unused. |
main.js | mocial's shell, lifted word for word: icon dragging, the password gate, window fly-in/out, the taskbar, the world-clock tray, buildWindowChrome, the typed title. Comments starting griffinland: mark what's its own (the gate's games, and their windows being left off the taskbar) - keep those when copying the shell over again. |
griffinland.css | Styles for griffinland's own desktop. Anything new goes here, not in main.css. |
griffinland.js | griffinland's own desktop toys (below), built on main.js's shell. Loaded after it. |
gifs/ | mocial's own gifs, copied over for the toys to use. |
icons/ | Pixel desktop icons, drawn as SVG. |
supabase/guestbook.sql | Sets up the guestbook's table in Supabase. |
tools/griffin-rig.py | Cuts griffin's chairlift art into the animation layers in gifs/griffin/. |
tools/crew/*.svg, tools/crew-build.py | The other riders on the lift, drawn to match griffin's art, and the script that renders them into the layers in gifs/crew/. |
tools/workstation-cam.py, tools/desk-cam.command | The desk cam (below). |
Because these are copies, a fix to the shell on mocial has to be copied here
too. Keep main.css an exact copy and put griffinland's own styling in
griffinland.css - then updating is just copying the file over. If the two
desktops grow a lot, the next step is moving the shell into one shared file
both sites load.
New windows: build them with buildWindowChrome(win, "TITLE"), add their
title-bar icon to windowIcons, and open them with showPopup(id, iconEl) -
the same calls mocial uses.
Same doorman as mocial, with griffinland's own password: SITE_PASSWORD_HASH
in index.html is the hash of it. Two games flank the dialog, and both win
the password:
Finishing either game fills the password into the dialog, so the visitor only
has to hit OK. Changing the password means changing both the hash and
GATE_WORD in main.js (hashPassword("...") in the console gives the new
hash).
Since the games give the password to anyone who plays, the gate is a toy, not a lock, and the two sites don't carry an unlock across to each other: mocial asks for its own password.
Once a visitor is through the gate (or straight away, when there's no gate),
a "YOU HAVE ASCENDED" window opens: griffinland as the far side of the pearly
gates. The gates swing open, the spinning world rises out of them as an angel
and the WordArt waves, over a single centered "Enter paradise" button that
closes it. It's all CSS and SVG in griffinland.css and index.html; main.js
only adds the title bar, splits the WordArt into letters and opens it.
All in griffinland.js, each in its own section, with styles under matching
headings in griffinland.css. The desktop is forest green (--gl-forest).
standardMenus() builds
them; a window can add its own items to File, Edit or View.SPAM
list). Each ad's button spawns two more. griffinland AntiVirus turns up
afterwards to clear them; Escape works too.PROMO_URL. Point that at whatever's new.TIPS list.griffinlaszlo-dev key so testing never pads it. If the
service can't be reached, the counter hides.firSVG(), aspenSVG(), FOREST_ROWS). It's random, so a new one
grows on every load, and it's drawn once into an image so the moving
chairs never make the browser redraw it. The lift towers are doodled in colour to sit with the chair art
(towerSVG(): blue pole, ladder, yellow pad, braced cross-arm and the wheel
train the cable rides over), with a wobble filter on every line.
The lift runs both ways: a second rope behind carries chairs back down,
right to left. They're the empty chair mirrored, smaller and paler, and
ride behind the towers. Each tower has a second, smaller wheel train for
that rope (backTrainSVG()), and BACK_UP sets how far above the near
rope it sits.Everything that moves holds still for visitors who've asked their system for reduced motion. Below 960px the horizon steps aside and the badges move to the end of the page.
The two cameras on griffin's desk. Visitors only see them while griffin is ON AIR: the icon turns up, and each camera gets a view-only window with a fresh still each second and a LIVE badge, then an OFF AIR screen once it stops. Split screen (a button in each window, or View > Split screen) tiles them over the desktop, each picture fitted to its window on black, never cropped. Esc, the button again, or closing either window puts them back. Phone-sized screens stack every window anyway, so there it's hidden.
tools/griffin-rig.pyACTIONStools/crew/ to match griffin's art: his
three-quarter lounging pose, thin wobbly ink, marker-streaked fills. Each
rider comes in three looks - different people, by swapping the drawing's
colours (VARIANTS in tools/crew-build.py) - and griffinland.js deals
them out fresh on every visit, never the same look twice at once. Each
drawing marks its moving parts with an L- class, and
python3 tools/crew-build.py (Pillow and Chrome) renders every look's
parts as layers into gifs/crew/. Then bump CREW_VERSION in
griffinland.js. CREW_UP and CREW_DOWN there say which chairs carry whom.supabase/guestbook.sql creates it (run it once in the
project's SQL Editor), and SUPABASE_URL / SUPABASE_KEY at the top of the
guestbook section in griffinland.js point the site at it. The key is the
project's publishable key, which is public by design - row-level security
limits it to reading and signing. To delete an entry, use the Supabase
dashboard (Table Editor > guestbook). With the two left blank, entries stay
in each visitor's own browser instead. A hidden form field catches bots.