这是一个专为摄影爱好者设计的记录网站,基于 Nuxt 3 开发,采用瀑布流展示图片,支持预览图片及 EXIF 信息,兼容常见的图片格式。 它可以读取 EXIF 信息并上传、管理维护图片数据,首页展示精品照片,子页面分类展示等功能。 图片存储兼容 S3 API、AList API,并支持 CDN 配置。同时适配了 PC 和移动端的样式与交互。 今天又是想成为二次元摄影高手的一天呢!
试试 kamera 的下一个版本 PicImpact
我们正在努力支持无障碍功能,主要基于 WAI-ARIA 规范,有爱,无障碍!
你可以 Fork 后点击下面的按钮来一键部署到 Vercel(自定义配置及容器部署请往下看)
<a href="https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fbesscroft%2Fkamera&env=Postgre_HOST,Postgre_PORT,Postgre_DATABASE,Postgre_USERNAME,Postgre_PASSWORD"><img src="https://vercel.com/button" alt="Deploy with Vercel"/></a>
当然,如果你想部署到其它平台或者自部署也是可以的,只需要改一下预设即可 nuxt.config.ts
:
nitro: { preset: 'vercel' // 可选 vercel、netlify、node-server,或者删除这一行,构建时也会自适应的。 }
数据库请选择兼容 PostgreSQL 的数据库,我推荐 SupaBase,它的每月免费额度足够个人使用了!
创建数据库后,将 doc/sql/schema.sql
导入到数据库执行。在 Dashboard
的 Settings
找到 Database
部分,你就能查看连接信息了。
当然,只要是兼容 pg 的数据库都 是可以选择的,不必局限于某个平台。
注:从 2024-01-26 起,将删除通过 IPv4 和 pgBouncer 的数据库访问方式。 在这之前部署且数据库使用 SupaBase 的用户,请更新数据库连接信息。 在
Connection parameters
里勾选Use connection pooling
选项即可。
请确保您的数据库用户配置了正确的 Row Level Security(行级别安全性)权限,否则将无法正常访问。
如果您是第一次部署,仅需要执行
schema.sql
即可,如果您是升级到涉及数据库变更的版本,请在执行对应版本编号的 sql 后再升级部署!系统默认账号密码为:admin / 666666
存储你可以选择 AWS S3、阿里云 OSS 或者自建 MinIO(理论上来说兼容 S3 的都行),也可以交由你正在用的 AList 来维护。
请在部署前设置您的环境变量,程序会去读这些值,用以更改构建步骤或函数执行期间的行为。
所有值都经过静态加密,并且对有权访问该项目的任何用户都可见。使用非敏感数据和敏感数据都是安全的。但请注意您自己不要泄露环境变量的值!
如果您更改了环境变量,它不会影响当前的部署,您需要重新构建部署后才会生效!
当然,如果您是容器化部署的,更改环境变量后只需要重启容器就行了,无需重新构建!
受限于 Nuxt3 的局限性,某些设计可能不是特别人性化(主要还是懒),望理解!
请注意,平台部署请在平台控制台填写环境变量,会自动覆盖
.env.production
的值,以免发生机密信息泄露!项目内默认的 key 都是用作演示用途!
Key | 备注 |
---|---|
Postgre_HOST | Postgre 数据库主机,如:db.kamera.supabase.co |
Postgre_PORT | Postgre 数据库端口,默认值:5432 |
Postgre_DATABASE | Postgre 数据库名称,默认值:postgres |
Postgre_USERNAME | Postgre 数据库用户名,默认值:postgres |
Postgre_PASSWORD | Postgre 数据库密码,默认值:postgres |
我们支持自定义相册页面的标题和链接,当然也是支持多个相册页面的。
你需要在 constants\photos.json
文件中,进行如下配置:
[ { "title": "Cosplay", "url": "/cosplay", "icon": "i-carbon-camera" }, { "title": "集邮", "url": "/tietie", "icon": "i-carbon-face-wink" }, { "title": "时光相册", "url": "/timeline", "icon": "i-carbon-image" } ]
顾名思义,title
和 url
对应的就是页面标题和页面地址,如果您想正常使用的话,还请照葫芦画瓢,而不是乱填。
图标可以在 Icones 找到,用相同的规则填写在 icon
中.
每配置一个页面,都会对应的增添一个图片类别选项,在您的对象存储中,也会增加对应的文件夹。
同时也会被配置成
pre-rendered
,从而在某些情况下加快Hydration
,带来更快的页面加载,以及更好的 SEO。注意添加的页面,别忘了配置白名单哦!
我们提供了客户端路由中间件和服务端接口中间件,默认情况下你不需要管,但如果你想自定义白名单,这里提供了配置方案。
在 app.config.ts
文件中,可以看到如下默认配置:
export default defineAppConfig({ noLoginPageWhiteList: [ '/', '/login', '/tietie', '/cosplay', '/timeline', '/about', '/error', ], loginPageWhiteList: [ '/admin', '/admin/upload', '/admin/list', '/admin/system', ], apiWhiteList: [ '/api/login', '/api/verify', '/api/getImageList', ] })
noLoginPageWhiteList
对于客户端路由中间件和服务端接口中间件来说,不需要登录就能访问的页面。
loginPageWhiteList
对于客户端路由中间件来说,需要 token 才能访问;对于服务端接口中间件来说,必须要填写才能访问的页面。
apiWhiteList
不需要 token 就能访问的接口。
在 constants/index.ts
文件,可以配置:
Key | 备注 |
---|---|
appName | 网站标题 |
appDescription | 网站描述 |
在 app.config.ts
文件中,可以配置:
Key | 备注 |
---|---|
mobileRow | 移动端瀑布流显示列数,可选值[1, 2] |
我把容器部署往后放,是不希望前面的内容被跳过,这样你在构建/部署时才能得心应手!
如果你想用我的镜像(由 GitHub Actions 构建),就意味着你的某些配置与我相同,比如网站的几个目录。 但实际上你肯定得改一下网站标题,配置子页面啊之类的,改一下音乐播放器里面的歌之类的。
所以我的镜像只适合你快速体验预览之类的,还是建议你自己构建(反正也很方便),或者你直接部署到 Vercel 之类的平台。 如果你要运行我的镜像,你只需要执行下面的命令即可部署:
docker run -d --name kamera \ -p 3000:3000 \ -e Postgre_HOST="db.supabase.co" \ -e Postgre_PORT="5432" \ -e Postgre_DATABASE="postgres" \ -e Postgre_USERNAME="postgres" \ -e Postgre_PASSWORD="postgres" \ besscroft/kamera:latest
看到这里您应该明白,环境变量当然要换成自己的!
无需多说,直接 fork 本项目,然后更改任意文件并 commit
后,会自动触发 GitHub Actions 构建。
当然在那之前,你需要先在你 fork 的仓库创建 2 个机密,具体看为存储库创建机密
DOCKERHUB_USERNAME
和DOCKERHUB_TOKEN
这两个,这样 才能在构建后,上传到你自己的 docker 仓库去。
在构建好镜像之后,你可以用上面的命令执行(记得镜像换成你自己构建的哈),如果你要 Docker Compose 执行:
version: '3' services: kamera: image: besscroft/kamera:latest container_name: kamera ports: - 3000:3000 environment: - Postgre_HOST="db.supabase.co" - Postgre_PORT=5432 - Postgre_DATABASE="postgres" - Postgre_USERNAME="postgres" - Postgre_PASSWORD="postgres"
一样的,参考上面的环境变量表格,配置你自己的环境变量。
问:我 fork 仓库后,修改了网站设置为自己的,构建的镜像被他人使用会有风险吗?
答:原则上没有风险,但如果你自己在文件中填写了机密信息,那就是你自己的问题! 除非你自己泄露,否则别人是不知道你的环境变量值的!
问:为什么使用你这个工具这么麻烦?其他人的都能把数据存在数据库里,访问时动态获取。
答:基于 SSR 的特性,大部分配置内容是在编译期处理的,比如我们配置的那些自定 义页面。原则上来说,能放进数据库的配置,我已经尽可能放进去了!
这种方式适合那些想自己打包直接在 Node 上运行的朋友。
git clone https://github.com/besscroft/kamera.git pnpm i pnpm run build
构建完成后,你会看到一个 .output
文件夹,你可以使用如下命令运行:
node /app/.output/server/index.mjs
如果你选择这种部署方式,我相信你是会使用 Node 的。
对于使用宝塔面板、1Panel 等面板的用户,以及使用 Nginx 来提供访问服务的用户,记得配置反向代理:
location ^~ / { proxy_pass http://localhost:3000; }
端口和路径等设置,取决于你自己部署时的具体配置。
克隆到本地进行开发:
git clone https://github.com/besscroft/kamera.git pnpm i pnpm run dev
如果您有任何建议,欢迎反馈!
提出新想法 & 提交 Bug | Fork & Pull Request
Kamera 欢迎各种形式的贡献,包括但不限于改进、新功能、文档和代码改进、问题和错误报告。dev
分支接受 PR
!
有需求 和建议都可以提出,有空的话我会处理,但受限于 Nuxt3 / SSR 的⌈局限性⌋,很多功能的设计上可能会有取舍。
使用本程序时,您需要自行维护各个平台的配置信息(毕竟与我们无关,需要在相应的平台进行配置),以及对象存储的读写权限、访问控制、防盗链、跨域设置、缓存策略和 CDN 等配置,以最大程度地避免天价账单。
如您有更多疑问,可以提交 Issue。
实际上,只要不是过于老旧的浏览器,通常都是可以使用的。
本项目使用 JetBrains 的开源许可证,基于 IntelliJ IDEA 开发,感谢!
Kamera 是基于 MIT 许可的开源软件。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解 耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团 队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号