Skip to content

moli-xia/AIradio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI Radio

AI Radio 是一个面向中文场景的 24 小时 AI 电台应用,包含前台播放页、后台节目管理、每日早报、今日热榜、AI 节目生成、TTS 配音、音乐连播与定时生成能力。

技术原理:

**第一步,**在应用后台配置AI大模型(我配置的deepseek-v4-flash),配置TTS语音模型(用于给文字内容配音,我使用的是当前免费的MiMo-V2.5-TTS),配置音乐APP的api(我只接了一个狗的,VIP扫码即可),再配置一些公共的免费接口(我配置了alapi.cn的每日早报和微博热搜接口)

**第二步,**在后台编辑好单个节目,并作为预设节目。

**第三步,**设定节目的播出时间,一键生成当天节目。其他没设置节目的时间段,使用AI自动调用音乐api生成歌曲连播来填充时段。

还有很多功能不详述了,比如自己搜索添加歌曲、排序,自定义AI配音的背景音乐、节目转场音效等等……

临时演示站点

https://fm.aabb.live/

界面预览

功能概览

  • 24 小时节目流:支持后台一键生成全天节目。
  • 定时任务:可配置每天固定时间自动生成当天节目。
  • 内容插件:每日早报、今日热榜、酷狗音乐、网易云音乐、QQ 音乐与自定义节目。
  • AI 生成:调用 OpenAI 兼容大模型生成节目文案、音乐连播歌单及 Suno 歌曲提示词与歌词。
  • AI 音乐:内置对本项目 suno-api 的调用,支持随机批量全自动创作、手动 Lyrics / Styles、男女声选择、Suno 双版本试听选择及生成音频本地归档。
  • 网络媒体节目:支持直接音频、含音轨的视频文件、HLS 地址及 yt-dlp 可识别的播放页面,可自动解析 Bilibili 等站点、检测格式/时长、用 FFmpeg 本地提取音轨,并在播放前加入 AI 或原文介绍配音。
  • TTS 配音:支持 OpenAI 兼容 TTS 接口。
  • 生成进度:后台显示生成耗时、节点进度、当前处理节点、失败信息。
  • 音乐连播补歌:AI 歌单支持分批生成,播放列表低于阈值时继续补充。
  • 数据持久化:SQLite 数据库、音频文件、音效文件统一存储在运行时目录。

Docker Hub 镜像

镜像仓库:

docker pull superneed/airadio:latest

该镜像支持:

  • linux/amd64
  • linux/arm64

使用 Docker 运行

创建数据目录:

mkdir -p ./airadio-data

启动容器:

docker run -d \
  --name airadio \
  --restart unless-stopped \
  -p 4177:4177 \
  -e TZ=Asia/Shanghai \
  -e AIRADIO_ADMIN_USER=admin \
  -e AIRADIO_ADMIN_PASSWORD='请改成强密码' \
  -v "$PWD/airadio-data:/data" \
  superneed/airadio:latest

容器启动时会自动创建并修正 /data/data/audio/data/sound-effects 的权限,因此可以直接使用宿主机目录挂载。

访问:

http://localhost:4177

后台登录使用:

  • 用户名:AIRADIO_ADMIN_USER
  • 密码:AIRADIO_ADMIN_PASSWORD

AIRADIO_ADMIN_PASSWORD 必须显式设置,否则后台登录会被拒绝。

使用 Docker Compose 运行

复制环境变量示例:

cp .env.example .env

编辑 .env,至少修改:

AIRADIO_ADMIN_PASSWORD=请改成强密码

启动:

docker compose up -d

查看日志:

docker compose logs -f airadio

停止:

docker compose down

保留数据停止:

docker compose down

连同 Docker volume 一起删除:

docker compose down -v

本地构建 Docker 镜像

构建当前平台镜像:

docker build -t superneed/airadio:local .

运行本地构建镜像:

docker run --rm -p 4177:4177 \
  -e AIRADIO_ADMIN_PASSWORD='请改成强密码' \
  -v "$PWD/airadio-data:/data" \
  superneed/airadio:local

构建并推送多架构镜像

准备 buildx:

docker buildx create --name airadio-builder --use
docker buildx inspect --bootstrap

登录 Docker Hub:

docker login

构建并推送 amd64arm64

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t superneed/airadio:latest \
  -t superneed/airadio:0.1.1 \
  --push .

查看镜像架构:

docker buildx imagetools inspect superneed/airadio:latest

环境变量

变量 默认值 说明
NODE_ENV production Node 运行模式
TZ Asia/Shanghai 应用墙上时间,建议保持中国时区
AIRADIO_API_HOST 0.0.0.0 HTTP 监听地址
AIRADIO_API_PORT 4177 HTTP 监听端口
AIRADIO_STORAGE_DIR ./server/storage(本地)/ /data(Docker) SQLite、音频、音效等运行时数据目录;运行服务的用户必须拥有写权限
AIRADIO_ADMIN_USER admin 后台管理员用户名
AIRADIO_ADMIN_PASSWORD 后台管理员密码,必须设置
KUGOU_WX_APPID 可选,酷狗微信登录相关配置
KUGOU_WX_LITE_APPID 可选,酷狗概念版微信登录相关配置
KUGOU_WX_SECRET 可选,酷狗微信登录 secret
KUGOU_WX_LITE_SECRET 可选,酷狗概念版微信登录 secret

后台 API 配置

应用不会在源码或镜像中内置大模型、TTS、ALAPI、Suno、酷狗、网易云或 QQ 音乐 Cookie 等密钥。

首次启动后进入后台,在配置页面填写:

  • 大模型 API Key、Base URL、模型名。
  • TTS API Key、Base URL、模型名和音色。
  • 每日早报 / 今日热榜 token。
  • 酷狗、网易云或 QQ 音乐 Cookie / 登录信息。
  • Suno Cookie、本地 suno-api 地址和模型版本;自动模式会为付费账号选择 v5.5,为免费账号选择 v4.5。Suno 触发 hCaptcha 时还需要填写 2Captcha API Key。

这些配置会写入运行时 SQLite 数据库。Docker 部署时请持久化 /data,否则容器重建后配置和生成的音频会丢失。

Suno Cookie 获取方法:登录 Suno,按 F12 打开浏览器开发者工具,在 Network 中找到 client?__clerk_api_version=2025-11-10&_clerk_js_version=5.117.0 请求。优先复制 Request Headers 中的完整 Cookie;也可以复制响应里的四段 Set-Cookie,后台会自动合并并去除 PathSecureSameSite 等属性。最终 Cookie 必须包含 __client。Cookie 属于账号凭证,请勿提交到代码仓库或发送给他人;过期后需要重新获取。

Suno 当前会在歌曲生成时要求 hCaptcha token。项目内的 suno-api 使用 2Captcha 完成挑战,因此还需在“模型配置 → 本地 suno-api”填写有效且有余额的 2Captcha API Key。Suno 订阅额度与 2Captcha 余额是两个独立账户。

本地开发

安装依赖:

npm install
npm run install:music-apis
npm run install:suno-api
npm run build:suno-api

第二条命令安装项目内 NeteaseCloudMusicApiQQMusicApi 的运行依赖,后两条命令安装本地 suno-api、下载它所需的固定版本 Chromium 并完成构建。浏览器保存在 suno-api/.playwright-browsers,运行服务的用户必须有读取和执行权限。后台“接口 API”负责三种音乐接口的启停和 Cookie;节目来源、选歌类型、数量、主播与串场设置在“节目制作”维护。

创建本地环境变量:

cp .env.example .env

启动前端和后端:

npm run dev:full

只启动后端:

npm run dev:api

构建生产前端:

npm run build

生产启动:

AIRADIO_ADMIN_PASSWORD='请改成强密码' npm run start

网络媒体节目需要系统安装 ffmpegffprobe 和最新版本的 yt-dlp。Debian / Ubuntu 可执行:

sudo apt-get install ffmpeg
sudo curl -L --fail https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux -o /usr/local/bin/yt-dlp
sudo chmod 0755 /usr/local/bin/yt-dlp

Docker 镜像构建流程已自动安装 FFmpeg 和 yt-dlp。后台会先尝试直链探测,再使用 yt-dlp 解析播放页面;Bilibili 页面遇到 412 风控时会自动改用公开播放接口。较长媒体可使用“保存节目后台生成”,任务会立即入库并在服务端继续解析、下载和转码,节目状态会由“后台生成中”自动更新为“可播”或“生成失败”。需要登录的页面可以临时填写站点 Cookie,Cookie 不会写入节目或后台配置;DRM 内容仍不受支持。

另开一个进程启动本地 Suno 服务:

npm run start:suno-api

它默认只监听 127.0.0.1:3010。使用 systemd 部署时可参考 deploy/airadio-suno.service,按实际项目目录和 Node 路径调整后启用。Suno 音乐生成依赖有效的 Suno 账号 Cookie 与可用额度;未配置 Cookie 时,其他节目制作功能不受影响。

数据目录

默认本地数据目录:

server/storage/

Docker 数据目录:

/data

目录内容包括:

  • airadio.sqlite:配置、节目、预设、归档等数据。
  • audio/:生成或上传的节目音频。
  • sound-effects/:上传的音效文件。

这些文件包含运行时数据和可能的密钥配置,已经通过 .gitignore.dockerignore 排除,不应提交到 Git 仓库或打进镜像。

安全说明

  • 不要提交 .env、SQLite 数据库、音频存储目录或任何真实 API Key。
  • 后台管理员密码必须通过环境变量设置。
  • 公开部署时建议放在反向代理后,并启用 HTTPS。
  • 如果使用 Docker Compose,.env 只用于本机部署,不应上传到公开仓库。

GitHub

开源仓库:

https://github.com/moli-xia/AIradio

About

AIradio 是一款 AI 驱动的在线电台应用,支持节目制作、AI/原文配音、网络媒体音频解析和音乐播放管理。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors