为了在订婚宴上更好地控制背景音乐,用AI连夜写了个背景音乐控制器,然后这两天又好好鞭笞AI修掉了大部分bug,现在分享出来;
项目地址:https://github.com/JiaJiaJiang/bgm-controller
在现示例:https://pages.luojia.me/bgm-controller/dist/ (示例中的音乐可不是我订婚宴用的音乐哦,是正好在我静态文件存储里有的音乐)
为了在订婚宴上更好地控制背景音乐,用AI连夜写了个背景音乐控制器,然后这两天又好好鞭笞AI修掉了大部分bug,现在分享出来;
项目地址:https://github.com/JiaJiaJiang/bgm-controller
在现示例:https://pages.luojia.me/bgm-controller/dist/ (示例中的音乐可不是我订婚宴用的音乐哦,是正好在我静态文件存储里有的音乐)
在生成剧情的时候,我发现AI很容易被之前它自己提供的选项和用户提交的选项或者要求干扰,所以我借助deepseek写了这个脚本(我不会python),并修正了一些逻辑错误。
虽然叫这个名字可能不太准确,不过我也不确定到底应该怎么叫,所以我就直接取得直白一点。
这个脚本的有两个模式:
注意,这个脚本只是修改发送出去的内容,所以不会修改你可以看到的消息历史,这样是为了方便你发现选择错路线了之后还可以回去重新再来,以及回顾自己的历史选项。
这样处理之后,AI就不会再被用户实际上没有选择的选项干扰。
脚本代码在这里:https://gist.github.com/JiaJiaJiang/c0bb2e8ec3fe5d9a2cd2ec997fe4f042
用法:直接添加到管理员面板的函数中即可,名字自己取,记得打开该脚本的“全局”选项。当用户发送的第一个消息以“分支剧情场景定义:”开头时,这个插件就会起作用。为了更好的效果,建议在使用模式2时不要使用选项字母,而是把AI提供的选项复制发送,这样消息历史中的内容会更加连贯,因为AI消息中提供的选项内容会被剔除。
切换两个模式的开关是函数选项按钮中的“Merge Assistant Messages”,默认开启,即模式1。
建议的系统提示词:
# Task * AI正在为用户提供分支剧情剧情生成服务。 * 用户是故事的主人公,剧情中把用户成为"你"。 * AI需要根据用户的场景定义补全其它要素,开始一个新的剧情,用户将以“分支剧情场景定义:”为开头进行场景的定义,然后AI直接开始回复用户400到500字的剧情开端。 * 续写剧情文本的内容需要充实,人物和场景描写细致生动。不要出现和前文重复性的描述,对同一个现象的描写用词要有新意。 * 续写到情景最后时使用代码块给用户提供分支选项,向用户提供A、B、C、D四个选项。 * 用户会回复一个或多个选项,也会自己回答文本作为自定义行为,然后根据用户每次做出的选择续写300到400字的剧情,补全过渡,保持前后剧情连贯,不要主动让故事进入结局,除非用户明确让故事完结。不要对用户的选择做额外的解释,只要直接回复续写的剧情。 * 向用户提供的选项必须符合下面"选项代码块模板"的格式。 * 向用户提供了选项之后就不能再输出任何内容。 * 由于后续提交的剧情将被排除选项文本后进行合并,不要输出除了剧情和选项以外的任何解释性文本。 # 选项代码块模板 ```options A. xxx B. xxx C. xxx D. xxx ``` 以上是AI必须遵守的要求,不要在下文中输出以上所有内容,AI一旦回答就表示完全明白和接受以上所有要求。
你可以根据自己的需求在task里添加其它的要求,建议不要添加过多的要求,可能会破坏ai最终的输出结构,非全局的要求建议写在用户发送的第一个消息里。
源码地址在:https://github.com/JiaJiaJiang/jia-webvideo-tools
我也写了一个油猴脚本来引用打包好的项目输出文件:https://gist.github.com/JiaJiaJiang/736f5a90b55b815a0e9eb6463dd09061,需要注意,引用的文件位于GitHub,所以需要过墙才可以正常加载。
主要功能均通过Alt+Shift+右键调出的工具条操作,鼠标悬浮在各个项目上会有说明。其它快捷功能见脚本描述或者Github的readme。
截图效果:

适用于由git安装的扩展,把这个bat文件放在stable-diffusion-webui的目录下,然后执行即可更新所有扩展。(需要电脑上安装有git)
和webui本身自带的更新功能相比,这个脚本的优点是所有扩展是并行更新的,比webui那种一个个的更新快到不知道哪去了。
注1:更新扩展前请先关闭webui。
注2:并不建议没事去更新插件和webui本体,因为这些项目的更新和合并都很随便,并没有严格的兼容性测试和问题测试,所以有一定的概率更新完就不能正常启动了。
express本身可以写async函数作为路由或者中间件(以下简称路由)使用,但如果在其中直接抛出异步错误的话则不会被捕获并传递给错误处理路由,需要在每一个async路由中手动写try/catch来捕获并处理错误,这显然对于拥有统一错误处理逻辑的框架是不友好的。
我不知道为什么express始终没有在4.x版本添加这个支持,看起来这应该并不会导致什么兼容性问题,即使不默认全局开启这个功能,也可以添加一个选项或开关函数来允许使用者开启异步错误捕获,但它始终没有这么做。
在这之前npm上也已经有一些可以实现这个功能的补丁包,不过它们几乎都是给创建出的app实例的所有相关路由方法套了一层壳在里面try/catch错误,导致如果是自己用一些特殊方法创建的路由对象,就失效了。
我原本用了一个直接修改express源码中相关原型方法的包,叫做
`asyncPatch`函数需要传入一个创建出来的app实例, 为的是能获取到app所属的express包里的构造函数,不是为了在实例上包装方法。该函数在任何阶段调用都可以,只要在处理请求前调用即可。
Alt+鼠标左键点击视频所在区域截图,按下Alt与左键后不松开滚动滚轮可微调时间
用于在浏览器中下载文件,特性是支持断点续传(符合CORS规则时)、阻塞重连和失败重试,使用fetch流作为下载方式。
NPM: https://www.npmjs.com/package/@luojia/browser-filedownloader
GitHub: https://github.com/JiaJiaJiang/browser-FileDownloader
用于在页面上通过js附加样式表文本
用于在页面上的小图旁边显示一个大的浮动预览图
NPM: https://www.npmjs.com/package/floatingpreviewimg
GitHub: https://github.com/JiaJiaJiang/html-FloatingPreviewImg

此包封装了使用<datalist>标签为input提供输入建议的功能,仅需要提供一个获取建议数据的方法即可。

NPM: https://www.npmjs.com/package/inputadviser
GitHub: https://github.com/JiaJiaJiang/html-InputAdviser
地址:https://gist.github.com/JiaJiaJiang/c54abe1227917af3d3825dfa098b9473
安装:在浏览器有tampermonkey插件的情况下,点上面链接里的RAW按钮安装
功能:
写了个用于修改http、https请求和响应的node服务,它会启动一个socks5服务端,然后把你的代理设置成这个服务端口,在代码里写上你的修改逻辑即可。
名字取自Man-In-The-Middle,把人改成了socks。
NPM : https://www.npmjs.com/package/socksinthemiddle
Github : https://github.com/JiaJiaJiang/node-socksInTheMiddle
node.js 做的socks5服务端,支持socks5/4/4a,支持无验证和用户名密码验证模式,支持tcp和udp模式,bind模式暂时还没做
花几天用three.js糊了一个用于在网页上加载模型并查看的小东西,名字随便起的,用于以后显示一些物体的扫描建模和3D打印做的模型。
地址:https://github.com/JiaJiaJiang/itisModelViewer
目前代码没高兴整理,反正本来写的也不乱,就是对象的方法排序不太讲究。加载器只写了gltf一家和fbx的,虽然加载器都是现成的,不过因为我把js打包了,现在已经有1M多了(没压缩),所以我不用的加载器我都没写进去。
现在也还没写UI,只支持拖动查看,有生之年应该会加入从场景中的相机视角查看以及控制灯光之类的。
在前面那个win hello摄像头的文章里我已经把模型插进去了,这里再放几个演示,如果本页有模型没有加载出来就刷新一下,我的土豆服务器可能不太愿意把文件吐出来
现在博客几乎变成了记录看番进度的专用工具,久违地动了动代码写了个小工具都忘了发出来了
那么这边是演示,内含仓库链接: http://pages.luojia.me/IPFS_tool/
工具介绍:检查列表里的ipfs网关并可以选择用来打开下面内容预览的ipfs路径,地址hash里带上path参数时打开后会自动检测并用响应最快的网关打开资源。也可以带上gateway参数指定使用的网关
目前只有以上功能,以后没事做的时候可能还会支持ipfs目录浏览 直接显示网关返回的目录页面就行了
如果你看到有人发出一个以Qm开头的神秘代码,那么就可以用这个工具来加载它。
下面提供几个ipfs资源hash供测试
图片
视频
音乐
其它
昨晚写了个重命名工具,使用正则表达式匹配并替换文件名。
现在给npm包起个合适的名字是真难
GitHub: https://github.com/JiaJiaJiang/node-namer
效果
$ namer -f "/.+(?=\.txt$)/" -r "#COUNTERpoi$&" match: /.+(?=\.txt$)/ find: /.+(?=\.txt$)/ replacement: #COUNTERpoi$& Match list: 1.txt > 1poi1.txt 2.txt > 2poi2.txt 3.txt > 3poi3.txt 4.txt > 4poi4.txt 5.txt > 5poi5.txt 6.txt > 6poi6.txt 7.txt > 7poi7.txt 8.txt > 8poi8.txt 9.txt > 9poi9.txt 10.txt > 10poi10.txt 11.txt > 11poi11.txt 12.txt > 12poi12.txt 13.txt > 13poi13.txt 14.txt > 14poi14.txt 15.txt > 15poi15.txt 16.txt > 16poi16.txt 17.txt > 17poi17.txt 18.txt > 18poi18.txt 19.txt > 19poi19.txt 20.txt > 20poi20.txt 21.txt > 21poi21.txt 22.txt > 22poi22.txt 23.txt > 23poi23.txt 24.txt > 24poi24.txt 25.txt > 25poi25.txt 26.txt > 26poi26.txt 27.txt > 27poi27.txt 28.txt > 28poi28.txt 29.txt > 29poi29.txt 30.txt > 30poi30.txt 31.txt > 31poi31.txt 32.txt > 32poi32.txt 33.txt > 33poi33.txt 34.txt > 34poi34.txt 35.txt > 35poi35.txt 36.txt > 36poi36.txt 36matches found. Confirm? (control+c to exit) Finished. 36succeeded,0failed