Danbooru风格图片分享平台szurubooru

news2025/1/11 12:43:25

在这里插入图片描述

什么是 Danbooru ?

Danbooru 是一种流行的图片分享网站,以其独特的图片标签系统和搜索功能而闻名。"Danbooru风格"通常指的是模仿 Danbooru 网站的图片论坛或图片分享平台所具有的特定特征,如:

  1. 标签系统:用户可以给图片添加标签,便于分类和搜索。
  2. 搜索功能:强大的搜索工具,允许用户根据标签、上传日期等条件搜索图片。
  3. 用户交互:用户可以对图片进行评分、评论和收藏。
  4. 社区驱动:内容通常由用户上传和维护,形成一个社区。
  5. 图像板布局:图片以网格形式展示,用户可以浏览和选择感兴趣的图片。

什么是 szurubooru ?

Szurubooru 是一款图像板引擎,其灵感来自 DanbooruGelbooruMoebooru 等专为中小型社区提供的服务。它的名字源于波兰语,具有刮擦或擦洗的拟声意义。它的发音为shoorubooru

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 szurubooru

  • 服务端选择第一个 szurubooru/server,版本选择 latest

本文写作时, latest 版本对应为 2.5

  • 客户端选择第三个 szurubooru/client,版本选择 latest

本文写作时, latest 版本对应为 2.5

env.txt

命名为 env.txt 而不是默认的 .env ,是为了在 FileStation 中编辑方便

参照了官方的 example.env,地址:https://github.com/rr-/szurubooru/blob/master/doc/example.env

相比 example.env,只修改了本机端口,以及图片和数据库的存储目录,改用了相对路径

# Database credentials
POSTGRES_USER=szuru
POSTGRES_PASSWORD=changeme

# This shows up on the homescreen, indicating build information
BUILD_INFO=latest

# Port to expose HTTP service
# Set to 127.0.0.1:8080 if you wish to reverse-proxy the docker's port,
# otherwise the port specified here will be publicly accessible
PORT=7420

# How many waitress threads to start
# 4 is the default amount of threads. If you experience performance
# degradation with a large number of posts, increasing this may
# improve performance, since waitress is most likely clogging up with Tasks.
THREADS=4

# URL base to run szurubooru under
# See "Additional Features" section in INSTALL.md
BASE_URL=/

# Directory to store image data
MOUNT_DATA=./data

# Directory to store database files
MOUNT_SQL=./sql

config.yaml

参照了官方的 config.yaml.dist,地址:https://github.com/rr-/szurubooru/blob/master/server/config.yaml.dist

config.yaml 直接采用了原版 config.yaml.dist 的内容,未做任何修改

# rather than editing this file, it is strongly suggested to create config.yaml
# and override only what you need.

# shown in the website title and on the front page
name: szurubooru
# full url to the homepage of this szurubooru site, with no trailing slash
domain: # example: http://example.com
# used to salt the users' password hashes and generate filenames for static content
secret: change

# Delete thumbnails and source files on post delete
# Original functionality is no, to mitigate the impacts of admins going
# on unchecked post purges.
delete_source_files: no

thumbnails:
    avatar_width: 300
    avatar_height: 300
    post_width: 300
    post_height: 300

# settings used to download files from the web on behalf of the api users
user_agent:
max_dl_filesize: 25.0E+6 # maximum filesize limit in bytes

# automatically convert animated GIF uploads to video formats
convert:
   gif:
     to_webm: false
     to_mp4: false

# allow posts to be uploaded even if some image processing errors occur
allow_broken_uploads: false

# used to send password reset e-mails
smtp:
    host: # example: localhost
    port: # example: 25
    user: # example: bot
    pass: # example: groovy123
    from: # example: noreply@example.com
    # if host is left empty the password reset feature will be disabled,
    # in which case it is recommended to fill contactEmail so that users
    # know who to contact when they want to reset their password

contact_email: # example: bob@example.com. Meant for manual password reset procedures

enable_safety: yes

tag_name_regex: ^\S+$
tag_category_name_regex: ^[^\s%+#/]+$

pool_name_regex: ^\S+$
pool_category_name_regex: ^[^\s%+#/]+$

# don't make these more restrictive unless you want to annoy people; if you do
# customize them, make sure to update the instructions in the registration form
# template as well.
password_regex: '^.{5,}$'
user_name_regex: '^[a-zA-Z0-9_-]{1,32}$'

# webhooks to call when events occur (such as post/tag/user/etc. changes)
# the listed urls will be called with a HTTP POST request with a payload
# containing a snapshot resource as JSON. See doc/API.md for details
webhooks:
    # - https://api.example.com/webhooks/

default_rank: regular

privileges:
    'users:create:self':            anonymous # Registration permission
    'users:create:any':             administrator
    'users:list':                   regular
    'users:view':                   regular
    'users:edit:any:name':          moderator
    'users:edit:any:pass':          moderator
    'users:edit:any:email':         moderator
    'users:edit:any:avatar':        moderator
    'users:edit:any:rank':          moderator
    'users:edit:self:name':         regular
    'users:edit:self:pass':         regular
    'users:edit:self:email':        regular
    'users:edit:self:avatar':       regular
    'users:edit:self:rank':         moderator # one can't promote themselves or anyone to upper rank than their own.
    'users:delete:any':             administrator
    'users:delete:self':            regular

    'user_tokens:list:any':         administrator
    'user_tokens:list:self':        regular
    'user_tokens:create:any':       administrator
    'user_tokens:create:self':      regular
    'user_tokens:edit:any':         administrator
    'user_tokens:edit:self':        regular
    'user_tokens:delete:any':       administrator
    'user_tokens:delete:self':      regular

    'posts:create:anonymous':       regular
    'posts:create:identified':      regular
    'posts:list':                   anonymous
    'posts:reverse_search':         regular
    'posts:view':                   anonymous
    'posts:view:featured':          anonymous
    'posts:edit:content':           power
    'posts:edit:flags':             regular
    'posts:edit:notes':             regular
    'posts:edit:relations':         regular
    'posts:edit:safety':            power
    'posts:edit:source':            regular
    'posts:edit:tags':              regular
    'posts:edit:thumbnail':         power
    'posts:feature':                moderator
    'posts:delete':                 moderator
    'posts:score':                  regular
    'posts:merge':                  moderator
    'posts:favorite':               regular
    'posts:bulk-edit:tags':         power
    'posts:bulk-edit:safety':       power
    'posts:bulk-edit:delete':       power

    'tags:create':                  regular
    'tags:edit:names':              power
    'tags:edit:category':           power
    'tags:edit:description':        power
    'tags:edit:implications':       power
    'tags:edit:suggestions':        power
    'tags:list':                    regular
    'tags:view':                    anonymous
    'tags:merge':                   moderator
    'tags:delete':                  moderator

    'tag_categories:create':        moderator
    'tag_categories:edit:name':     moderator
    'tag_categories:edit:color':    moderator
    'tag_categories:edit:order':    moderator
    'tag_categories:list':          anonymous
    'tag_categories:view':          anonymous
    'tag_categories:delete':        moderator
    'tag_categories:set_default':   moderator

    'pools:create':                 regular
    'pools:edit:names':             power
    'pools:edit:category':          power
    'pools:edit:description':       power
    'pools:edit:posts':             power
    'pools:list':                   regular
    'pools:view':                   anonymous
    'pools:merge':                  moderator
    'pools:delete':                 moderator

    'pool_categories:create':       moderator
    'pool_categories:edit:name':    moderator
    'pool_categories:edit:color':   moderator
    'pool_categories:list':         anonymous
    'pool_categories:view':         anonymous
    'pool_categories:delete':       moderator
    'pool_categories:set_default':  moderator

    'comments:create':              regular
    'comments:delete:any':          moderator
    'comments:delete:own':          regular
    'comments:edit:any':            moderator
    'comments:edit:own':            regular
    'comments:list':                regular
    'comments:view':                regular
    'comments:score':               regular

    'snapshots:list':               power

    'uploads:create':               regular
    'uploads:use_downloader':       power

## ONLY SET THESE IF DEPLOYING OUTSIDE OF DOCKER
#debug: 0 # generate server logs?
#show_sql: 0 # show sql in server logs?
#data_url: /data/
#data_dir: /var/www/data
## usage: schema://user:password@host:port/database_name
## example: postgres://szuru:dog@localhost:5432/szuru_test
#database:

docker-compose.yml

参照了官方的 docker-compose.yml,地址:https://github.com/rr-/szurubooru/blob/master/docker-compose.yml

version: '2'

services:
  server:
    image: szurubooru/server:latest
    container_name: szuru-server
    depends_on:
      - sql
    environment:
      ## These should be the names of the dependent containers listed below,
      ## or FQDNs/IP addresses if these services are running outside of Docker
      POSTGRES_HOST: sql
      ## Credentials for database:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      ## Commented Values are Default:
      #POSTGRES_DB: defaults to same as POSTGRES_USER
      #POSTGRES_PORT: 5432
      #LOG_SQL: 0 (1 for verbose SQL logs)
      THREADS: ${THREADS}
    volumes:
      - "${MOUNT_DATA}:/data"
      - "./config.yaml:/opt/app/config.yaml"

  client:
    image: szurubooru/client:latest
    container_name: szuru-client
    depends_on:
      - server
    environment:
      BACKEND_HOST: server
      BASE_URL: ${BASE_URL}
    volumes:
      - "${MOUNT_DATA}:/data:ro"
    ports:
      - "${PORT}:80"

  sql:
    image: postgres:14-alpine
    container_name: szuru-db
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - "${MOUNT_SQL}:/var/lib/postgresql/data""

然后执行下面的命令

# 新建文件夹 szurubooru 和 子目录
mkdir -p /volume1/docker/szurubooru/{data,sql}

# 进入 szurubooru 目录
cd /volume1/docker/szurubooru

# 修改目录权限
chmod a+rw data

# 将 env.txt、config.yaml、docker-compose.yml 放入当前目录

# 一键启动
docker-compose --env-file env.txt up -d

运行

在浏览器中输入 http://群晖IP:7420 ,如果看到👇这个提示,表示还未完成初始化设置

稍等一会儿

点顶部的 Register 菜单注册账号

主界面上多了一些菜单

现在可以 Upload 图片了,支持直接上传图片,也可以粘贴图片的 URL 地址

拖入一张图片

Upload all 上传

点击图片,开始写评论,还可以添加 tags

参考文档

rr-/szurubooru: Image board engine, Danbooru-style.
地址:https://github.com/rr-/szurubooru

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2112586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II 1.题目 1.1复原IP地址 题目链接:93. 复原 IP 地址 - 力扣(LeetCode) 视频讲解:回溯算法如何分割字符串并判断是合法IP?| LeetCod…

2024年高教杯国赛(B题)数学建模竞赛解题思路|完整代码论文集合

我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

【2024高教社杯国赛A题】数学建模国赛建模过程+完整代码论文全解全析

你是否在寻找数学建模比赛的突破点?数学建模进阶思路! 作为经验丰富的数学建模团队,我们将为你带来2024国赛数学建模竞赛(A题)的全面解析。这个解决方案包不仅包括完整的代码实现,还有详尽的建模过程和解析…

WebAPI(二)、DOM事件监听、事件对象event、事件流、事件委托、页面加载与滚动事件、页面尺寸事件

文章目录 一、 DOM事件1. 事件监听2. 事件类型(1)、鼠标事件(2)、焦点事件(3)、键盘事件(4)、文本事件 3. 事件对象(1)、获取事件对象(2)、事件对象常用属性 4. 环境对象 this5. 回调函数 二、 DOM事件进阶1. 事件流(1)、 捕获阶段(2)、 冒泡阶段(3)、 阻止冒泡(4) 、阻止元素默…

Optuna发布 4.0 重大更新:多目标TPESampler自动化超参数优化速度提升显著

Optuna这个备受欢迎的超参数优化框架在近期发布了其第四个主要版本。自2018年首次亮相以来,Optuna不断发展,现已成为机器学习领域的重要工具。其用户社区持续壮大,目前已达到以下里程碑: 10,000 GitHub星标每月300万 下载量16,00…

静心是良性循环

我发现一个挺有意思的事: 花时间修炼自己的心,让自己静心,就愿意多花时间修炼,会更加静心,这样就良性循环了。难的是刚开始,心不静,没时间修炼,心静不下来,更没时间修炼&…

分类中的语义一致性约束:助力模型优化

前言 这里介绍一篇笔者在去年ACL上发表的一篇文章,使用了空间语义约束来提高多模态分类的效果,类似的思路笔者也在视频描述等方向进行了尝试,也都取得了不错的效果。这种建模时对特征进行有意义的划分和约束对模型还是很有帮助的,…

基于人工智能的文本摘要生成系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 文本摘要生成是自然语言处理(NLP)中的一个重要任务,它旨在从长文本中提取出核心内容,生…

【学习笔记】SSL证书安全机制之证书验证

前言:每当Client从Server收到一张证书,有2件事Client需要去验证: 证书是否有效? 证书只是文件中的文本Client如何知道内容能够信任?Server是否是证书真正的拥有者? 证书可以公开获取Client如何知道Server是…

OM5光纤:优化您的数据中心性能

随着数据中心需求的持续增长,传统OM3和OM4光纤在传输距离和带宽方面的局限性日益显现。为应对这些挑战,OM5光纤应运而生。OM5光纤又称为宽带多模光纤(WBMMF),通过支持单根光纤上的多波长传输,显著提高了数据…

ubuntu linux搭建lvgl v9

记录一下ubuntu linux搭建 lvgl的过程 本地环境:ubuntu 16.04 ubuntu lvgl sdl2 1 获取源码 git clone https://github.com/lvgl/lv_port_linux.git cd lv_port_linux/ git submodule update --init --recursive查看分支: git branch -a 我选择的是9.2(master分支一直在变动…

无人机执照拿到后怎么就业?方向有哪些?就业率如何?

无人机执照拿到后,就业方向广泛且多样,就业率也呈现出逐年上升的趋势。这主要得益于无人机技术的广泛应用和无人机市场的不断扩大。以下是对无人机执照持有者就业情况的详细分析: 就业方向 1. 无人机飞行操作: 无人机飞手可以从…

34465A-61/2 数字万用表(六位半)

34465A-61/2 数字万用表(六位半) 文章目录 34465A-61/2 数字万用表(六位半)前言一、测DC/AC电压二、测DC/AC电流四、测电阻五、测电容六、测二极管七、保存截图流程前言 1、6位半数字万用表通常具有200,000个计数器,可以显示最大为199999的数值。相比普通数字万用表,6位半…

经典文献阅读之--Representing 3D sparse map points....(用于相机重定位的3D点线稀疏地图)

0.简介 最近在视觉定位和地图制图方面取得了显著的进展,成功地将点特征和线特征进行了整合。然而,将定位框架扩展到包括额外的地图组件往往会导致对匹配任务的内存和计算资源需求增加。《Representing 3D sparse map points and lines for camera reloc…

尝试用java spring boot+VUE3实现前后端分离部署(8/31)

前言 这几天开学了,公司这边几个和学校对接的项目都挺忙的,然后我又开始有点闲的情况了。问大佬能不能继续看看若依的项目,大佬让我自己去学了。在看若依的项目的时候在想,python的FLASK后端实现和JAVA spring boot的实现差别大不…

通过指令微调提升语言模型性能

人工智能咨询培训老师叶梓 转载标明出处 如何让机器更好地理解和执行人类的指令一直是一个重要课题。Google的研究团队中提出了一种新的方法,通过指令微调(instruction finetuning)来提升语言模型的性能和泛化能力。 他们主要研究了如何通过…

美食|基于SpringBoot+vue的美食网站(源码+数据库+文档)

美食网站 基于SSMvue的美食网站 一、前言 二、系统设计 三、系统功能设计 系统功能实现 后台模块实现 管理员模块实现 用户模块实现 餐厅模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍&…

JavaScript拷贝的艺术:玩转深拷贝和浅拷贝

前言 在实际的项目开发中,我们时刻都在使用数据拷贝功能,赋值、深拷贝和浅拷贝是前端开发中常见的概念,用于复制简单数据类型(字符串、数值、布尔值)和引用类型(对象、数组)。它们的主要区别在…

第十六篇:走入计算机网络的传输层--传输层概述

1. 传输层的功能 ① 分割与重组数据 一次数据传输有大小限制,传输层需要做数据分割,所以在数据送达后必然也需要做数据重组。 ② 按端口号寻址 IP只能定位数据哪台主机,无法判断数据报文应该交给哪个应用,传输层给每个应用都设…

中小型局域网组网规划与实施

一、绪论 1.1 背景 本课题以中小型企业网络搭建为背景,实现网络规划与设计和模拟。该企业网有四个部门,人力部、研发部、市场部和财务部,不同部门分别划分VLAN,不同VLAN之间分配不同的IP地址段。内外网之间要互通。 1.2 发展趋势…