dorkhub

shiyun

把中国三千年的诗放进一片可漫游的三维星系:每位诗人是一颗星,每首诗都有坐标,星与星之间的虚空是「一切可能的诗」。32,657 位诗人 / 933,857 首。灵感来自刘慈欣《诗云》。

Cohenjikan
TypeScript19126 forksupdated 1 week ago
visit the demogit clone https://github.com/Cohenjikan/shiyun.gitCohenjikan/shiyun
诗云 · Poetry Cloud —— 把中国三千年的诗放进一片三维星系

诗云 · Poetry Cloud

中文 · English

把中国全历史的诗,放进一片可以漫游的三维星系。
每位诗人是一颗星,每首诗都有自己的坐标 —— 星与星之间的虚空,是「一切可能的诗」。

灵感来自刘慈欣《诗云》与博尔赫斯《巴别图书馆》:诗不被储存 —— 给一个编号就能算出第几首诗,反之亦然。

License: PolyForm Noncommercial 1.0.0 Three.js React TypeScript 100% Static Stars


在线体验 · shiyun.cohenjikan.com

诗云主界面:一整片由真实诗人构成的星系,顶栏可按诗体 / 朝代 / 格律筛选

▶ 介绍视频:docs/assets/promo.mp4 · 哔哩哔哩 · 抖音 · 小红书


这是什么

33,458 位诗人、970,319 首诗,我把中国全历史的诗歌放进了一片三维星系。灵感来自刘慈欣的短篇《诗云》—— 那本书讲述了一个想用穷举写尽所有诗的超级文明,我做的这个也叫「诗云」。

每位诗人是一颗星,每首诗都有自己的空间坐标,可以缩放、漫游整片星空,随手点开一颗星就是一首诗,还能看到诗人之间的关系网络。从《诗经》到近现代,三千年的诗都在这一片宇宙里。李白是很亮的一颗星,但更多的是那些你从没听过名字的人,也各自占着一个坐标。

而星与星之间的虚空,藏着比这更大的东西 —— 它是「一切可能的近体诗」。点一下空处,就从噪声里 unrank 出一首诗,并显示它在「全集目录」里那个长达 82–229 位的编号:地址几乎和诗本身一样长(目录即图书馆)。诗不被储存,给一个编号就能算出它是第几首诗,反之亦然 —— 杰作只是噪声海里的零测度亮点。

🖥 PC 端体验最完整。 移动端可用(触控漫游 + 自适应画质),但飞行、拾取与关系网在大屏鼠标下最舒服。

打开 shiyun.cohenjikan.com,到星海里捞一首诗


截图

点开一颗星:李白《望庐山瀑布》竖排呈现,并显示它在全集目录里的完整编号
随手点开一颗星,就是一首诗 —— 连同它在「全集目录」里那个长长的唯一地址。
选中李白:金色弧线汇出他与其他诗人的赠答网络,右侧列出全部作品
赠诗网络 —— 解析诗题与字号别名连出 5,165 条赠答弧线,选中一位即勾出其往来。
探诗:左侧填字成诗实时算出编号,右侧可凭编号反查回一首诗
探诗 —— 填字成诗实时算出编号,或凭一串编号反查回唯一的那首诗。
选中杜甫:他的作品系统与赠答关系在星系中点亮
每位诗人都是一个小星系 —— 作品越多,星系越大;点定位即可飞到任意一首。

它能做什么

能力 说明
全朝代 + 新诗 先秦 → 当代,15 个朝代同心壳,可按朝代筛选;并收入现代新诗(徐志摩《再别康桥》、海子、北岛、顾城、戴望舒…,自由体归入「其它」)。
五种诗体 五绝 / 七绝 / 五律 / 七律,外加自由格式 / 词(变长断句,换行也由编号决定);格律开关让你只在「合律子目录」里漫游。
寻诗 · 逐句搜索 输入任意一句(不限开头)→ 它在「真实诗人」里属于谁(疑是地上霜 → 李白《静夜思》,非首句也命中),同时给出「纯随机」目录里那个被诗句锁定的半编号
探诗 · 编号反查 把一个长编号 unrank 回它的诗,核对行索引与全文,告诉你这串数字是否对应一首真实存在的诗 —— 目录 ↔ 诗的闭环,全程显示未截断的完整编号,一键复制。
赠诗网络 解析诗题(寄 / 赠 / 和 / 次韵…)与 ~250 条字号别名(少陵 → 杜甫、子瞻 → 苏轼、香山 → 白居易…)连出 5,165 条赠答弧线,束状汇向银心,沿弧涌动柔光脉冲。
可分享的永久链接 #a=<诗人id> / #p=<诗体>.<编号>,诗与诗人面板均有 🔗 分享,打开即从链接重建那首诗、复位那片星空。
纯静态 所有索引运算与渲染都在浏览器里完成,服务器只发静态文件,永不加后端(唯一可选后端是匿名反馈收集)。

三种 pull 模式,感受这个项目: 纯随机「牛蝛茙漂綵」→ 格律「趰㵎憣烔岆」→ 格律+常用字「思伦要锁馆」;再加自由格式的词式变行,以及「寻诗」从一句话找回一首真实的诗。


背后的想法

诗云不存诗 —— 它存的是一个双射。每一首近体诗,都对应一个巨大的整数编号;给定编号能精确还原出诗,给定诗也能算回编号(base-N「巴别」进制 + 格律混合基数 rank/unrank,叠加可逆的 BigInt Feistel 置乱做空间散布)。索引引擎是纯 TypeScript、零依赖的,往返可逆,单元测试全绿。

于是「写出所有可能的诗」不是收藏,而是计算:星海里的每一个坐标都是一首诗,绝大多数是噪声,偶尔一颗恰好是李白。真实诗人的真实作品,则是这片噪声海里被点亮的、有名有姓的亮点。

更多细节见 docs/ARCHITECTURE.md(分层架构)、docs/ENGINE_API.md(引擎接口与不变量)、docs/DATA_CONTRACT.md(数据契约)。


🚀 快速开始

npm install
npm run dev      # 开发预览(Vite)
npm test         # 引擎往返 + 数据加载等单元测试
npm run build    # 类型检查 + 静态构建 → dist/

Node 20+。技术栈:Vite + React 18 + TypeScript + three.js / @react-three(fiber · drei · postprocessing)+ zustand

仓库自带轻量数据(星系、作者搜索、格律、半编号、赠诗网络都能跑);逐首诗的全文逐句搜索索引是体量很大的衍生数据(git-ignore),需要时按 docs/PIPELINE.md 从开放语料重新生成。部署到静态主机的完整教程见 docs/DEPLOY.md(注意 poems/*.json 必须以 RAW 提供,HTTP Range 取片依赖它)。


文档

文档 内容
docs/ARCHITECTURE.md 分层架构,哪些稳定 / 哪些是可替换的前端原型,数据流。
docs/ENGINE_API.md 引擎与 engineApi 接口、不变量、最高位约定。
docs/DATA_CONTRACT.md 静态资源 schema、语料来源、朝代归一化。
docs/DATA_AUDIT.md 语料选型审计:为什么是现在这套开放语料。
docs/PIPELINE.md 数据与格律字库是怎么构建的。
docs/FRONTEND_GUIDE.md 重写前端的契约:4 个稳定接口、交互模型。
docs/DEPLOY.md 静态部署(nginx + 压缩 + poems/ Range 注意事项)。
docs/DEVLOG.md · docs/devlog/ 开发日记(迭代编年史)+ 历史会话交接 / 单次变更运维单归档。

关于

诗云是一个 vibecoding 作品:由我(Cohen)设计并把关方向,主要的代码骨架与迭代由 Claude 编写处理 —— 仓库里完整保留了这段人机协作的开发日记(docs/DEVLOG.mddocs/devlog/)。

它在抖音 / 小红书 / 哔哩哔哩等平台全网累计播放超 1000 万、点赞超 150 万,也是我一系列非商业、源码公开项目中的一个。代码以 PolyForm Noncommercial 1.0.0 许可发布,欢迎学习、自建与非商业二次创作;诗歌语料(尤其现当代新诗文本)的版权属于原作者,请勿用于商业用途。

更多项目见我的主页 cohenjikan.com 与 GitHub @Cohenjikan


开源致谢

站在这些开源工作之上:


许可

代码以 PolyForm Noncommercial 1.0.0 许可发布 —— 源码公开、仅限非商业使用;商用授权请联系作者(截至提交 0a64a5d 的旧版本仍按 MIT 授权,对那些版本继续有效)。诗云自有的整理性元数据(标注 / 索引)以 CC BY-NC 4.0 提供;诗歌语料各自保留上游许可与权利,尤其现 / 当代诗歌文本的版权归原作者所有,仅作非商业使用。详见 LICENSEdocs/DATA_CONTRACT.md

从《诗经》到近现代,三千年的诗都在这一片宇宙里。

more like this

lottery

🎉🌟✨🎈年会抽奖程序,基于 Express + Three.js的 3D 球体抽奖程序,奖品🧧🎁,文字,图片,抽奖规则均可配置,😜抽奖人员信息Excel一键导入😍,抽奖结果Excel导出😎,给你的抽奖活动带来全新酷炫体验🚀🚀🚀

JavaScript4.6k

search

search projects, people, and tags