-
魔改了一下B2的商店页面
以前的商铺首页有点丑,而且适合他们做商城的人使用,像我这种写博客的完全用不到。 我只是单纯的来放一些我个人推荐的商品或正在使用的设备推荐。 改完之后,非常舒服,是我想要的。... -
Umami Docker 故障排查实录:从 PostgreSQL pg_control: Permission denied 到平滑迁移到 Named Volume
这次 Umami 故障,表面上看是应用无法启动,实际上根因在 PostgreSQL 数据目录权限异常。日志中最关键的报错是 pg_control: Permission denied,说明数据库虽然识别到了旧数据目录,但已经无法正常读取核心控制文件。 这篇文章记录了我从故障出现、恢复旧数据、排查误区,到最终迁移到更稳妥的 Docker named volume 方案的完整过程。结论很直接:如果 PostgreSQL 数据目录长期使用宿主机 bind mount,在异常关机、目录权限变化、面板操作等场景下,确实更容易出现类似问题。 一、故障现象 最开始看到的 PostgreSQL 日志如下: postgres: could not find the database systemExpected to find it in the directory "/var/lib/postgresql/data",but could not open file "/var/lib/postgresql/data/global/pg_control": Permission deniedPostgreSQL Database directory appears to contain a database; Skipping initialization 同时,Umami 容器中还有这样的报错: Invalid `prisma.$queryRaw()` invocation:Raw query failed. Message: `Can't reach database server at db` 从这两类日志结合来看,可以得出一个比较清晰的判断: Umami 并不是第一故障点 PostgreSQL 先启动失败 Umami 随后因为连接不上数据库而报错 也就是说,这本质上是一次数据库层问题,而不是 Umami 应用本身的问题。 二、问题根因分析 我原本的 PostgreSQL 挂载方式是这样的: volumes: - ./postgres-data:/var/lib/postgresql/data 这属于典型的 Docker bind mount,也就是把宿主机目录直接映射进容器。 这种方式的优点是直观,目录可见、便于备份和手工操作;但缺点也很明显: PostgreSQL 对目录权限和属主要求严格 宿主机目录一旦被修改权限、改属主,或者受到面板、脚本、异常关机影响 容器就可能无法读取 pg_control 一旦 pg_control 不可读,数据库会直接拒绝启动 这次的核心问题,本质上就是: PostgreSQL 数据目录仍然存在,但容器进程已经没有权限正常读取关键数据库文件。 三、第一步修复:先把旧库救活 遇到这类问题时,最重要的不是立刻删卷重建,而是先确认旧数据是否还在。 从后续日志里可以看到类似信息: database system was interrupted database system was not properly shut down; automatic recovery in progress database system is ready to accept connections 这说明: 数据库之前经历过异常中断 但数据本身未必已经损坏 只要目录权限恢复正常,PostgreSQL 有机会自动恢复 所以我第一步做的不是迁移,而是先修复旧数据目录权限,把原有数据库拉起来。 修复思路大致是: 停掉容器 对旧数据目录重新执行 chown 和 chmod 重新启动数据库 观察 PostgreSQL 是否自动完成恢复 这一步成功后,旧数据恢复正常,Umami 页面数据也重新出现。这说明问题主要在目录权限,而不是数据库内容损坏。 四、为什么不应该止步于“先能跑起来” 虽然旧库恢复成功了,但这并不代表风险已经解除。 如果继续沿用 bind mount,把数据库文件直接放在宿主机目录里,那么类似问题后面仍然可能再次出现,尤其是在这些场景下: VPS 异常断电 面板或脚本误改目录权限 手动操作数据目录 宿主机挂载状态变化 文件系统异常 所以我后面的目标就变成了: 在确认旧数据完整的前提下,把 PostgreSQL 从 bind mount 平滑迁移到 Docker named volume。 五、迁移过程中踩到的两个坑 1. 认证失败:password authentication failed 迁移初期我遇到了数据库认证报错,原因后来确认是: 修改了 POSTGRES_PASSWORD 但数据库卷并不是全新初始化的 PostgreSQL 不会自动把已有用户密码改成新的环境变量值 需要特别注意的是: POSTGRES_PASSWORD 只在数据库首次初始化时生效。 如果卷里已经有旧数据,后面再改这个环境变量,并不会自动修改数据库里已有用户的密码。 因此迁移时最稳妥的做法是: 不改数据库用户名 不改数据库密码 只改存储方式 这样可以显著降低迁移过程中的变量数量。 2. 路径错位:容器启动了,但数据“消失”了 另一个坑来自 PGDATA。 一开始我尝试引入这样的配置: PGDATA: /var/lib/postgresql/data/pgdata 但旧数据库实际上是按默认路径初始化的,数据文件原本就在: /var/lib/postgresql/data 结果就出现了一个典型问题: 旧数据还在原目录 PostgreSQL 却在 pgdata/ 子目录里重新初始化了一套新库 容器可以正常启动 但应用里看到的是一个全新的空数据库 这个问题非常隐蔽,因为从表面看服务是正常的,但实际已经连到了新库。…... -
为什么我把DIFY删了?
过去两年,我在 Dify 上搭建了十几条工作流,从即时翻译到 WordPress 的 SEO 提效工具——TDK 自动生成、内容润色、多语言批量翻译——全都跑在 Dify 上,博查搜索、SerpAPI、各家大模型的 API 我一层层串起来,调参、调试、上线。 今天下午我把 WordPress TDK 插件重新写了一遍,把 Dify 的依赖一刀砍掉,整个流程搬到了阿里百炼。跑了几轮测试,Token 消耗低到可以忽略不计,效果跟之前完全一样,甚至响应更快。 Dify 没做错什么,问题是它的存在本身,在这套新范式里已经变得多余。 Dify 到底臃肿在哪 自己部署过 Dify 的人都明白我在说什么,一套生产环境跑起来,至少六个组件:PostgreSQL、Redis、向量数据库(Weaviate 或 Milvus)、API Server、Worker、前端。官方给的 Docker Compose 一键启动看着优雅,实际跑起来的坑只有踩过才知道:数据库备份策略、日志轮转没配好三天撑爆磁盘、内存泄漏、版本升级后 schema 迁移报错——Dify 的迭代节奏又快,每个月都出新版,每升一次级都是一次心跳加速。 资源开销也是一笔烂账,一台 2C4G 的轻量服务器根本拉不动全套,4C8G 是勉强起步。如果你还挂了个 RAG 知识库做向量检索,8C16G 都不一定稳。问题是——我一天才调用 API 几十次,大部分时间它在空转。 最要命的是抽象过度,Dify 在你和大模型之间塞了一层编排引擎。当你真的只需要「接收一段文本 → 调大模型处理 → 返回结果」这条链路时,这层编排就变成了纯负担。你不需要一个工作流引擎来包装一个 API 调用。你不需要一个知识库引擎来存储三个 prompt 模板。你不需要一个对话管理系统来管理一个单次请求。 Dify 诞生于 Agent 生态还没成熟的年代,那时候用拖拽式工作流来弥补编排能力缺失是合理的。但现在不是那时候了。 新范式:百炼 + MCP + OpenClaw 过去半年整个 AI 基础设施层的变化,比之前两年加起来都大。核心就三点: 第一,大厂的应用平台已经够用了。 阿里百炼的智能体应用,直接在控制台配置 prompt、知识库、MCP 服务,发布之后就是一个标准 API endpoint。不做 RAG、不调复杂工作流的前提下,百炼的应用层已经覆盖了我绝大部分需求。关键是计费模式——只按 Token 收费,没有固定月费。不用的时候成本为零。 第二,MCP 协议让工具调用彻底解耦。 以前在 Dify 里接入一个搜索服务,要去插件市场找有没有现成的、没有就自己写 HTTP 节点、配 URL、处理返回格式。现在百炼的 MCP 广场直接挂了一堆现成服务——联网搜索 MCP 每月前 2000 次免费,超出后按次计费;高德地图、天气查询、网页解析、代码解释器,全都是即开即用。MiniMax 的 Token Plan 也有自己的 MCP Server,网络搜索、图片理解、图片生成全部打包,一个 API Key 搞定。你自己部署的 MCP Server 也可以注册进百炼,完全兼容 SSE 协议。 第三,Agent 框架已经成熟了。 OpenClaw 这类工具的出现,意味着你不需要一个 Web 端的编排界面来管理 Agent。它的配置方案、技能系统、持久记忆、心跳机制,都是在你的本地机器上跑的,开源的,可控的。你在本地写好配置文件,Agent 自己就能调度工具、执行任务。不需要再把逻辑交给一个远端的工作流引擎。 这三个变化拼在一起,Dify 的护城河就没了。编排能力?Agent 框架已经更灵活。工具生态?MCP 协议覆盖面更广,接入更简单。可观测性?百炼控制台有完整的调用日志和 Token 统计。部署维护?不需要了——你用的是别人的平台和协议。 一个真实的迁移案例:WordPress TDK 插件 说说我今天的这次迁移。我的博客和一些客户站点用的 SEO TDK 插件,逻辑是这样的: 用户打开文章编辑页,点「生成 TDK」 插件把文章标题、正文摘要发给后端 后端调博查搜索 API 获取相关关键词和竞品信息 结合搜索结果和文章本身,调大模型生成 title、description、keywords 返回结果,填入 Yoast SEO 或 Rank Math 的对应字段 之前在 Dify 上的实现:建一条工作流,四个节点——HTTP 请求节点接博查搜索 → LLM 节点做关键词提取 → 第二个 LLM 节点生成 TDK → 代码节点做格式清洗。每次调整 prompt 或切换模型,要进 Dify 后台改工作流、测试、发布。博查的 API Key 存在 Dify 的环境变量里。工作流出过一次 bug,一个节点改参数后下游格式对不上,我对着 Dify 的执行日志排查了一下午。 今天在百炼上的新实现: 在百炼控制台创建一个应用,prompt 写清楚 TDK 生成规则 去 MCP 广场开通 MiniMax 的 MCP Server,配置 Token Plan 的 API Key 把 MiniMax 搜索 MCP 挂到应用里 发布应用,拿到 API endpoint 我的 WordPress 插件后端从调 Dify API 变成调百炼 API。代码改动不到 20 行,主要是换了 URL…... -
Codex Windows系统Powershell乱码解决方案
一、遇到的问题 今天终于把 Codex 在 Windows 下的中文乱码问题彻底解决了,记录一下整个过程。 先说现象:Codex 在 Windows 下执行命令时,所有中文输出全是乱码——方块字、问号、稀奇古怪的符号,完全无法阅读。比如让它列个带中文文件名的目录,返回的东西根本没法看;让它输出一段中文提示信息,终端里显示的是一坨天书。 一开始以为是 Codex 本身的 bug,折腾了很久才发现问题出在 Windows 的终端编码体系上。 二、乱码根因分析 2.1 核心矛盾 问题不在 Codex,而在 Windows 终端默认的编码机制与 Codex 使用的编码不一致: Codex(基于 Node.js) 默认使用 UTF-8 编码输出。 Windows 默认终端(CMD / PowerShell 5.1) 使用的是 历史代码页(中文系统常见 936 / GBK)。 这个差异导致了一条"烂链路": Codex(UTF-8)→ Windows Console(GBK / 936)→ VS Code 终端 → 中文乱码 两边编码不一致,UTF-8 的多字节中文字符被按 GBK 单字节/双字节方式解析,结果自然是一团乱码。 2.2 为什么 Linux / macOS 没这个问题? Linux 和 macOS 全链路默认 UTF-8: locale = UTF-8终端 = UTF-8Shell = UTF-8CLI = UTF-8 无需任何额外配置,全链路天然一致。而 Windows 的 CLI 层一直背负着历史包袱——GUI 层用 Unicode,终端层用历史代码页,两者割裂至今。 2.3 CMD / PowerShell 5.1 / PowerShell 7 的真实差异 工具定位编码cmd.exeDOS 时代遗产,兼容层强依赖代码页(默认 GBK)PowerShell 5.1系统管理遗产,基于 .NET Framework继承旧控制台编码PowerShell 7(pwsh)现代开发者终端,基于 .NET(跨平台)可控 UTF-8 结论很清晰:需要切换到 PowerShell 7(pwsh),并显式声明 UTF-8 编码。 三、解决方案 Step 1:下载并安装 MSI 版 PowerShell 7 重要:不要用 Microsoft Store 版(Appx),Codex 沙箱环境中 Store 版可能触发权限问题(CreateProcessAsUserW failed: 5)。必须使用 MSI 安装版。 下载链接(x64): https://github.com/PowerShell/PowerShell/releases/download/v7.6.2/PowerShell-7.6.2-win-x64.msi 双击运行,一路默认安装即可。安装时会自动将 C:\Program Files\PowerShell\7 加入 PATH。 验证安装: pwsh --version 预期输出类似: PowerShell 7.6.2 Step 2:卸载 Store / Appx 版 PowerShell 如果之前安装过 Store 版 PowerShell 7,需要卸载掉,避免路径冲突。 先关闭所有占用 PowerShell 进程的软件(Codex、VS Code、IDEA 等),然后执行: # 确认是否存在 Store 版Get-AppxPackage Microsoft.PowerShell 如果有输出,说明存在 Store 版,执行卸载: Get-AppxPackage Microsoft.PowerShell | Remove-AppxPackage 再次确认已卸载: Get-AppxPackage Microsoft.PowerShell 预期输出: 无任何输出(表示已卸载干净)。 Step 3:调整 PATH 顺序 确保 MSI 版 pwsh 的路径在 PATH 中排在 WindowsApps 前面。打开系统环境变量,在用户 PATH 中确认以下顺序: C:\Program Files\PowerShell\7 ← MSI 版(排前面)C:\Users\<用户名>\AppData\Local\Microsoft\WindowsApps ← WindowsApps(排后面) 这样执行 pwsh 时会优先使用 MSI 版。 验证解析顺序:…... -
记一次折腾:利用 Gost V3 解决国内服务器导致 Chrome 插件审核失败的问题
背景与痛点 Chrome 插件审核遇到了一个非常头疼的问题:我的后端 API 和业务网站统一部署在国内的一台服务器上。因为某些原因,这台服务器的 IP 被海外阻断了。这就导致 Google 官方的审核员在审核插件时,根本无法请求到后端数据,核心功能判定不可用,审核直接被拒。 摆在我面前的有几个选择: 海外重新部署一套:太折腾,数据难以同步,两边维护代码极其痛苦。 常规反向代理:买一台香港服务器,装 Nginx、配置 SSL,再通过各种内网穿透工具把国内的 80 端口映射出去。但这会带来一个致命问题:国内这边的业务还要正常服务国内用户,国内本地的 SSL 和强制 HTTPS 绝不能关。如果在香港再套一层 SSL,会导致无限的 301 重定向 死循环。 为了实现单边维护、完美兼容国内用户、且让香港中转站极致省资源,我摸索出了一套基于 Gost V3 + KCP 协议的无面板极简透传架构。 终极架构思路 抛弃复杂的七层 HTTP 反代,直接做纯粹的四层 TCP 数据流透传。让香港的服务器变成一个“没有任何感情的数据管道”。 Google 审核员 -> 香港 VPS 公网 443 端口 (由 Gost 直接接管) -> UDP KCP 加密隧道 -> 国内本地 Gost -> 国内 Nginx 443 端口 (本地处理 SSL 解密) 这套架构的三大核心优势: 去 Nginx 化,极致省资源:香港服务器不需要装宝塔,不需要装 Nginx,只要有个 Docker 环境就行。买最便宜的 1核 512M 纯净系统 VPS 即可,内存占用不到 30MB。 原汁原味的 SSL 握手:香港只负责搬运加密的数据包,所有的 SSL 证书解密、多域名 Host 路由识别,全部在国内服务器 Nginx 本地完成。国内用户直接访问,海外用户通过隧道访问国内,两者体验完全一致。 抗 QoS 阻断:跨境 TCP 长连接很容易被运营商阻断(表现为 timeout 或连不上),我们将隧道的底层通信协议换成了基于 UDP 的 KCP 协议,抗丢包能力极强,速度起飞。 避坑指南:为什么不选 Gost V2 的 RTCP? 在最初的尝试中,我使用的是 Gost V2(ginuerzh/gost),试图通过 rtcp(反向 TCP)让国内去“控制”香港开启 443 端口。但这带来了无数的坑: 端口冲突:如果国内端用了 host 网络模式,rtcp 指令很容易让 Gost 误以为要在国内本地监听 443,直接和宝塔 Nginx 撞车报错 address already in use。 协议限制:服务端和客户端的 rtcp 监听指令如果不匹配,外网访问就会报 Connection refused 或者内部路由报 missing address。 内网穿透隔离:如果不使用 host 模式改用 bridge 桥接网络,Gost 容器又会被宿主机(宝塔)的防火墙拦截,报 dial tcp 172.17.0.1:443: i/o timeout。 最终的解法是:全面拥抱 Gost V3(gogost/gost),并将两边角色对调,改用正向 Relay 隧道! 完整落地教程 第一步:国内(源站)配置为服务端 国内的 Gost 负责开门接客,拿到数据后直接敲本地 127.0.0.1:443 的门。因为没有了抢占端口的问题,直接使用 network_mode: "host",完美绕过本地 Docker 桥接网卡的防火墙拦截。 第二步:香港(中转站)配置为客户端 买一台海外纯净 VPS,装好 Docker。这台机器上的 Gost 负责霸占公网 443,然后无脑往隧道里塞数据。 第三步:启动与解析 最后,去你的域名注册商那里,把 Chrome 插件使用的域名,解析到香港服务器的 IP上。 总结 通过这一套折腾,业务代码一行没改,国内的服务器依旧是唯一的“真神”。海外流量走香港 UDP 隧道,国内流量直连。Chrome 审核员也能正常访问插件了,完美通关!... -
音乐 AI 评分系统
该项目,完全本地运行,无需联网依赖。 本项目使用 Hugging Face Transformers 的 CLAP(`laion/clap-htsat-fused`)对音频进行多维分析,目标是: - 对一批待打分歌曲生成可排序的综合评分与标签,筛选更适合做 AI MV 推广的曲目 - 对歌曲进行提示词反推,辅助音乐制作/复刻方向的定位 - 统一导出 Excel 报表,便于快速浏览、筛选与运营决策 功能概览 - AI综合好听评分(0~100):基于音频-文本相似度的加权评分 - 曲风识别:输出“最可能曲风”并给出曲风 Top3 候选 - 反推创作提示词:从提示词库中匹配最相近的一条,便于复刻创作 - AI MV 推广筛选(更偏运营/投放):输出声学特征、AI MV 推广适配评分、情绪/视觉风格/平台 Top3 与剪辑建议 - Python:建议 3.10+(项目当前在 3.13 环境下运行过) 报表字段说明(核心) - 歌曲名称:源文件名 - AI综合好听评分:0~100 的综合评分 - AI MV推广适配评分:0~100,偏向节奏清晰、能量稳定、易卡点的曲目 - 精细化识别曲风:Top1 曲风标签 - 曲风Top3:Top3 曲风候选(用于降低单标签误判) - 情绪氛围Top3:用于 MV 视觉/文案定位 - MV视觉风格Top3:用于 AI MV 画面风格选择 - 推荐平台Top3:用于投放与分发渠道参考 - 剪辑建议:基于节奏与能量的剪辑策略提示 - 主调/BPM/节奏强度/能量均值/能量波动/亮度均值/时长秒:用于更细粒度的制作与运营筛选 - AI同款音乐复刻创作提示词:反推提示词(从提示词库匹配而来) 部分代码: import os import sys import torch import librosa import numpy as np import pandas as pd from transformers import ClapModel, ClapProcessor # ===================== 0. 终端编码兼容(Windows 控制台 GBK/CP936) ===================== def configure_console_output(): """ 配置标准输出/错误输出的编码容错策略,避免 Windows 控制台(如 GBK/CP936) 在打印包含特殊符号/表情字符时触发 UnicodeEncodeError。 """ for stream in (sys.stdout, sys.stderr): try: if hasattr(stream, "reconfigure"): stream.reconfigure(errors="replace") except Exception: pass configure_console_output() # ===================== 1. 设备自动选择 ===================== device = "cuda" if torch.cuda.is_available() else "cpu" print("当前运行设备:", device) # ===================== 2. 加载本地CLAP模型(全程离线) ===================== model_name = "laion/clap-htsat-fused" processor = ClapProcessor.from_pretrained(model_name) model = ClapModel.from_pretrained(model_name).to(device) model.eval()... -
零门槛做音乐!我用豆包+Suno完成第四张AI原创音乐专辑
当AI成为创作主力,普通人也能轻松拥有属于自己的原创音乐专辑。今天,我的第四张全AI独立创作音乐专辑正式登陆网易云音乐,从灵感落地、提示词打磨、旋律编曲、歌曲生成,全程由豆包+Suno协作完成,无任何人工作曲、编曲、演唱参与,真正实现100%AI原生音乐创作。 这不是简单的AI拼接,也不是翻唱改编,而是从0到1的完整专辑创作。接下来,我把「豆包生成提示词→Suno生成完整歌曲→网易云上线专辑」的全流程毫无保留分享,帮每个热爱音乐的人,用AI圆一张专辑的梦。 一、豆包×Suno,打通AI音乐全链路 在尝试多款AI创作工具后,我确定了豆包+Suno的最优组合,两者分工明确,完美衔接创作全流程: 豆包:担任AI音乐策划师+提示词工程师,负责梳理创作灵感、定制Suno精准提示词、撰写专辑歌词、规划专辑风格与曲目结构,把模糊的情绪想法,转化为音乐AI能精准识别的专业指令。 Suno:担任AI音乐制作人,一键将文字提示词转化为带旋律、编曲、人声的完整歌曲,无需乐理基础、无需乐器设备、无需录音棚,快速产出可上线的成品音乐。 二者配合,实现想法→文字→音乐→专辑的全自动化创作,让音乐创作不再被技术门槛阻挡。 二、第一步:豆包加持,把灵感变成Suno可用的提示词 很多人用Suno生成音乐效果不佳,核心问题是提示词过于笼统,AI无法精准理解创作需求。而我的解决方案,是全程交给豆包,只需要简单描述需求,就能获得可直接复制使用的专业提示词。 1. 给豆包的核心创作指令 我仅用极简需求,就能让豆包输出专辑级创作方案,指令参考: 你是专业AI音乐提示词工程师,擅长为Suno生成高质量可直接使用的创作提示词。请围绕我的专辑创作需求,输出专辑名称、7首歌曲歌单、每首完整风格控制、适配SunoV5.5的精准提示词,明确歌曲风格、情绪、BPM、人声类型、乐器配置,要求风格统一、结构清晰,可直接用于整张专辑创作。 2. 豆包输出的标准化创作内容 豆包会一次性完成全套专辑规划,每首歌都包含完整信息: • 歌曲名称:贴合专辑主题,有记忆点 • 歌词内容:精准的标签控制 • 风格定位:流行/治愈/电子/民谣等精准划分 • 核心参数:BPM数值、人声类型、编曲乐器配置 Suno直用提示词:英文提示词,包含旋律、编曲、音效等细节,复制即可用 3. 批量生成专辑,效率拉满 只需要告诉豆包专辑主题、歌曲数量、整体风格,它就能自动生成一整套专辑内容,无需逐首构思,我只需要筛选确认,5分钟就能完成专辑前期所有文字创作。 三、第二步:Suno一键生成,从提示词到完整歌曲 这一步全程零门槛,哪怕不懂任何音乐知识,也能轻松做出专业歌曲,我的操作流程简单可复制: 1. 登录Suno平台,进入Custom自定义创作模式 2. 粘贴豆包生成的完整歌词 3. 粘贴豆包定制的精准提示词 4. 选择人声性别 5. 点击生成,等待1分钟左右,即可获得完整歌曲 生成的歌曲包含完整的Intro、主歌、副歌、桥段、Outro结构,编曲层次丰富,人声自然有情感,支持直接下载wav格式,完全满足音乐平台上线标准。我整张专辑的所有歌曲,均通过这个流程快速生成,全程不超过30分钟。 四、第三步:从AI歌曲到网易云专辑,完整上线流程 生成所有歌曲后,我按照以下步骤,快速完成专辑整理与网易云上传: 1. 确定专辑信息:敲定专辑名称、封面(可通过AI生成)、曲目排序、专辑简介 2. 整理歌曲文件:统一音频格式、编辑歌曲信息、排版歌词文本 3. 网易云音乐人后台上传:上传音频文件、填写歌曲与专辑信息、提交审核 4. 审核通过上线:等待平台审核完成,专辑正式上架,可生成专属专辑链接 从歌曲生成到专辑上线,全程不超过1小时,彻底颠覆传统专辑制作的漫长周期与高昂成本。 五、AI创作的专辑,到底有多接近真人创作? 实测盲听测试中,大部分人无法分辨这是AI生成的音乐。专辑中的歌曲旋律流畅有记忆点,有情感有故事,编曲层次分明,完全具备原创音乐的质感与听感。 对我而言,AI早已不是娱乐工具,而是靠谱的创作伙伴,它让音乐回归表达本身,让每个有想法、有情绪的人,都能把内心的故事唱成歌。 六、打破门槛:AI让每个人都能做自己的专辑 曾经,制作一张专辑需要作词、作曲、编曲、录音、混音、乐手、棚时等无数环节,成本高、门槛高,普通人几乎无法触及。 而现在,AI把这一切简化到零门槛: ❌ 不需要会乐器 ❌ 不需要懂乐理 ❌ 不需要专业设备 ❌ 不需要高额资金 你只需要有想表达的情绪、想讲述的故事,借助豆包+Suno,就能轻松完成属于自己的原创专辑。这也是我创作AI专辑的意义——让音乐创作,成为每个人都能拥有的权利。 七、我的第四张AI原创专辑,正式上线网易云 目前,这张由豆包策划+Suno生成的全AI独立创作专辑,已在网易云音乐正式上线。 每一首曲目都是AI独立完成编曲,没有任何人工干预。这是AI时代,送给每个热爱创作的普通人的礼物。 成本:豆包免费;suno我用的官方版本,月付10美金大约可以创作500首。 《Ocean of Solitude》专辑介绍: 专辑介绍: 这是一张关于“深海”的现代纯音乐OST。它不是对海洋的记录,而是对内心孤独的隐喻。整张专辑利用合成器音色,结合实地录音般的空灵鲸鸣,构建了一个与世隔绝的声学空间。在这里,现代工业乐器与原始的自然声音完美融合。 灵感故事: 在这个世界上,每个人都是一座孤岛,而深海,是孤独最极致的具象化。 故事的主角是一个在现实世界中感到失语的灵魂,在一个风暴过后的夜晚,他走向大海,任由自己沉入深渊。随着下潜深度的增加,光线消失,声音变得扭曲而遥远。 穿过洋流的叹息和深渊凝视,主角经历了灵魂的震荡与重压,最终在归于虚无中,化作深海的一部分。他不再孤独,因为他已经成为了这片寂静蓝海本身。这张专辑,就是他下沉过程中听到的声音——凄凉、空洞,却又美得令人心碎。 专辑试听:... -
Translate Workflow Service 变更
基于 Node.js 的智能翻译服务,通过接入阿里百炼大模型 API 提供高质量的在线文本翻译能力。 变更与信息 2026-03-31 翻译服务全面重构 后端重构 :废弃了旧的翻译工作流与连接方式,全面迁移至阿里百炼 API (DashScope)。 新增 /api/translate POST 路由,接收规范化的 JSON 参数 { q, s, d }。 服务端自动构建大模型 Prompt 进行高精度翻译,只返回翻译结果。 前端重构 : 采用现代化设计风格(类似 DeepL / Google Translate)完全重写了 public/index.html 和 public/style.css。 实现了左右/上下分栏响应式布局,支持源语言和目标语言的快速切换。 添加了一键复制、字符统计、防抖输入自动翻译等提升用户体验的交互功能。 语言支持更新: 提取并格式化了最新的支持语言列表(共计 190+ 种语言),包含准确的 ISO-639 代码。 前端通过 languages.js 动态渲染下拉选项,不再硬编码语言列表。 技术栈 后端:Node.js, Express, Axios 前端:原生 HTML/CSS/JavaScript (无框架,极致轻量) 大模型 API:阿里百炼 (DashScope) qwen-plus-latest... -
继对接Maccms之后 我从0到1写了一整套程序 彻底丢弃Maccms
前端的皮目前没有换,依旧沿用了上一版的设计,但这个版本把后端的Maccms整个剔除了,采用完全独立的采集程序+后端API。 我只能说:时代变了,大人们! Maccms作为一款开源的CMS来说,诸多方面都非常优秀,但是核心代码存在加密,半夜偷偷跳广告,仍然成为了很多的人心中的痛。 看过诸多开源项目最后都不了了之或各种投毒事件后,我觉得开源变了,使用人的心也变了。 本项目不开源也不售卖,仅自用。 🏗️ 架构理念 NMcms:现代化微服务架构 前后端完全分离,独立部署 支持容器化部署和弹性扩容 采用最新的设计模式和最佳实践 支持DevOps和CI/CD流程 🛠️ 技术栈对比 NMcms技术栈: 后端:Python 3.11 + Node.js 18+(双引擎驱动) 前端:原生JavaScript ES6+ + CSS3 + HTML5 数据库:MySQL 8.0 + Redis 7.0 部署:Docker + Nginx + PM2 没有任何开源或出售源代码的计划。 时代变了,你应该让AI给你写,本项目从0到1,端到端完全由AI完成。 播放器基于西瓜播放器二次开发的P2P服务,所以播放更快。... -
Building a WordPress mShots Proxy: A Developer’s Retrospective
After wrapping up a side project to create a proxy service for WordPress's mShots screenshot API, I realized I never documented the journey. This post serves as that missing blog entry – a look back at the why, the how, and the lessons learned from building a tool to serve website thumbnails reliably. The Problem: Unreliable Thumbnail Generation The core issue was straightforward: relying directly on WordPress.com's public mShots API for generating website screenshots in my applications was becoming inconsistent. The service, while powerful, is primarily intended for WordPress.com itself and its official plugins. For third-party or high-volume use, requests could be throttled, fail silently, or return mixed content errors when served over HTTPS. I needed a reliable middle layer – a proxy. This proxy would handle requests from my application, manage communication with the mShots API, implement caching to respect rate limits, and serve the images securely. The goal was to abstract away the volatility and provide a consistent interface for my projects. Architecting the Solution The architecture drew inspiration from the original mShots service structure, which is split into a request-handling PHP class and a Node.js processing service. My proxy simplified this into a single-service model focused on…...









