feat(solara): 添加Solara(光域)音乐播放器 (#3437)
* 添加Solara(光域)音乐播放器
* 📝 docs(solara): optimize project documentation and add multilingual support
- add init.sh script for automatic SESSION_SECRET generation
- rewrite and simplify main README.md content for clarity
- add new README_en.md file with full English translation
- update data.yml with multilingual descriptions (zh-Hant, ja, ms, pt-br, ru, ko)
- change app type from 'tool' to 'website' in metadata
- remove deprecated _env.sample file
- update latest/data.yml with multilingual form field labels and descriptions
- simplify docker-compose.yml and add pull_policy
- compress application logo image
---------
Co-authored-by: pooneyy <85266337+pooneyy@users.noreply.github.com>
This commit is contained in:
parent
65c43eabaf
commit
e6e83aed5b
|
|
@ -0,0 +1,18 @@
|
||||||
|
## 产品介绍
|
||||||
|
|
||||||
|
由轻量后端服务支撑的现代化网页音乐播放器,整合多种音乐聚合接口,覆盖搜索、播放与音频下载全流程。
|
||||||
|
|
||||||
|
## 主要功能
|
||||||
|
|
||||||
|
- **主题美学**:内置亮/暗模式与玻璃拟态界面,根据当前曲目封面自动取色渲染沉浸式背景,具备沉浸体验。
|
||||||
|
- **竖屏移动端**:全新竖屏布局匹配移动端手势与屏幕比例,按钮、列表与歌词均针对单手操作优化。
|
||||||
|
- **跨站曲库检索**:一键切换数据源,支持分页浏览并批量导入播放队列。
|
||||||
|
- **队列管理灵活**:新增、删除、清空操作即时生效,并自动持久化到浏览器 localStorage。
|
||||||
|
- **收藏列表**:搜索结果与播放列表均可一键收藏,收藏列表拥有独立的播放进度、播放模式与批量操作面板。
|
||||||
|
- **丰富的播放模式**:列表循环、单曲循环与随机播放随手切换,记忆上次偏好。
|
||||||
|
- **动态歌词视图**:逐行滚动高亮,当前行自动聚焦,手动滚动后短暂锁定视图。
|
||||||
|
- **列表导入导出**:支持播放队列与收藏列表统一导入/导出,可一键迁移或恢复收藏歌曲并同步到播放队列。
|
||||||
|
- **多码率下载**:可挑选 128K / 192K / 320K / FLAC 等品质并直接获取音频文件。
|
||||||
|
- **轻量后端代理**:通过 Cloudflare Pages Functions 统一聚合各数据源并处理音频跨域。
|
||||||
|
- **锁屏播放控制**:锁屏界面自动显示专辑封面与播放控件,无需解锁即可进行播放控制。
|
||||||
|
- **调试控制台**:按下 Ctrl + D 呼出实时日志面板,便于排查接口或交互异常。
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
A modern web music player powered by lightweight backend services, integrating multiple music aggregation interfaces, covering the entire process from search and playback to audio download.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Thematic Aesthetics**: Built-in light/dark modes and a glass morphism interface automatically extract colors from the current track's cover to render immersive backgrounds, delivering an engaging experience.
|
||||||
|
- **Vertical Mobile Interface**: A new vertical screen layout matches mobile gestures and screen proportions, with buttons, lists, and lyrics optimized for one-handed operation.
|
||||||
|
- **Cross-Site Music Library Search**: Switch data sources with one click, supporting paginated browsing and batch import to the playback queue.
|
||||||
|
- **Flexible Queue Management**: Add, delete, and clear operations take effect immediately and are automatically persisted to the browser's localStorage.
|
||||||
|
- **Favorites List**: Search results and playlists can be added to favorites with one click. The Favorites List features independent playback progress, playback modes, and a batch operation panel.
|
||||||
|
- **Rich Playback Modes**: Seamlessly switch between list loop, single-track loop, and shuffle play, with preferences remembered from the last session.
|
||||||
|
- **Dynamic Lyrics View**: Scrolling highlight line-by-line, auto-focus on the current line, with view temporarily locked after manual scrolling.
|
||||||
|
- **List Import/Export**: Supports unified import/export of playback queue and favorites list, enabling seamless migration or restoration of favorite songs and synchronization to the playback queue.
|
||||||
|
- **Multi-bitrate Downloads**: Select from 128K / 192K / 320K / FLAC quality options and directly obtain audio files.
|
||||||
|
- **Lightweight Backend Proxy**: Unifies and aggregates various data sources via Cloudflare Pages Functions while handling audio cross-origin requests.
|
||||||
|
- **Lock Screen Playback Controls**: Automatically displays album art and playback controls on the lock screen, allowing playback control without unlocking the device.
|
||||||
|
- **Debug Console**: Press Ctrl + D to summon a real-time log panel, making it easier to troubleshoot interface or interaction issues.
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
name: Solara(光域)
|
||||||
|
tags:
|
||||||
|
- 多媒体
|
||||||
|
title: 基于免费API的极简风格音乐播放器
|
||||||
|
description: 基于免费API的极简风格音乐播放器
|
||||||
|
additionalProperties:
|
||||||
|
key: solara
|
||||||
|
name: Solara(光域)
|
||||||
|
tags:
|
||||||
|
- Media
|
||||||
|
shortDescZh: 基于免费API的极简风格音乐播放器
|
||||||
|
shortDescEn: A minimalist style music player based on free API
|
||||||
|
description:
|
||||||
|
en: A minimalist style music player based on free API
|
||||||
|
zh: 基于免费API的极简风格音乐播放器
|
||||||
|
zh-Hant: 基於免費API的極簡風格音樂播放器
|
||||||
|
ja: 無料APIを基にしたミニマリストスタイルの音楽プレーヤー
|
||||||
|
ms: Pemain muzik gaya minimalis berdasarkan API percuma
|
||||||
|
pt-br: Um player de música estilo minimalista baseado em API gratuita
|
||||||
|
ru: Минималистичный музыкальный плеер на основе бесплатного API
|
||||||
|
ko: 무료 API 기반의 미니멀리스트 스타일 음악 플레이어
|
||||||
|
type: website
|
||||||
|
crossVersionUpdate: true
|
||||||
|
limit: 0
|
||||||
|
website: https://github.com/akudamatata/Solara
|
||||||
|
github: https://github.com/akudamatata/Solara
|
||||||
|
document: https://github.com/akudamatata/Solara
|
||||||
|
architectures:
|
||||||
|
- amd64
|
||||||
|
- arm64
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
additionalProperties:
|
||||||
|
formFields:
|
||||||
|
- default: 8080
|
||||||
|
envKey: PANEL_APP_PORT_HTTP
|
||||||
|
labelZh: HTTP 端口
|
||||||
|
labelEn: HTTP Port
|
||||||
|
label:
|
||||||
|
zh: HTTP 端口
|
||||||
|
zh-Hant: HTTP 連接埠
|
||||||
|
en: HTTP Port
|
||||||
|
ja: HTTP ポート
|
||||||
|
ko: HTTP 포트
|
||||||
|
ms: Port HTTP
|
||||||
|
pt-br: Porta HTTP
|
||||||
|
ru: HTTP Порт
|
||||||
|
tr: HTTP Portu
|
||||||
|
description:
|
||||||
|
zh: "设置应用的 HTTP 访问端口,有效范围: 1-65535"
|
||||||
|
zh-Hant: "設定應用程式的 HTTP 存取連接埠,有效範圍: 1-65535"
|
||||||
|
en: "Set the HTTP access port for the application, valid range: 1-65535"
|
||||||
|
ja: "アプリケーションのHTTPアクセスポートを設定します。有効範囲: 1-65535"
|
||||||
|
ko: "애플리케이션의 HTTP 접근 포트를 설정합니다. 유효 범위: 1-65535"
|
||||||
|
ms: "Tetapkan port akses HTTP untuk aplikasi, julat sah: 1-65535"
|
||||||
|
pt-br: "Defina a porta de acesso HTTP para o aplicativo, intervalo válido: 1-65535"
|
||||||
|
ru: "Установите порт доступа HTTP для приложения, допустимый диапазон: 1-65535"
|
||||||
|
tr: "Uygulama için HTTP erişim portunu ayarlayın, geçerli aralık: 1-65535"
|
||||||
|
required: true
|
||||||
|
type: number
|
||||||
|
edit: true
|
||||||
|
rule: paramPort
|
||||||
|
- default: solara
|
||||||
|
envKey: SOLARA_PASSWORD
|
||||||
|
labelZh: 登录密码
|
||||||
|
labelEn: Login Password
|
||||||
|
label:
|
||||||
|
zh: 登录密码
|
||||||
|
en: Login Password
|
||||||
|
required: true
|
||||||
|
type: password
|
||||||
|
edit: true
|
||||||
|
rule: paramComplexity
|
||||||
|
random: true
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
services:
|
||||||
|
solara-music:
|
||||||
|
image: aexus/solara-music:latest
|
||||||
|
container_name: ${CONTAINER_NAME}
|
||||||
|
restart: always
|
||||||
|
pull_policy: always
|
||||||
|
networks:
|
||||||
|
- 1panel-network
|
||||||
|
ports:
|
||||||
|
- ${PANEL_APP_PORT_HTTP}:3001
|
||||||
|
environment:
|
||||||
|
- NODE_ENV=production
|
||||||
|
- PORT=3001
|
||||||
|
- SOLARA_PASSWORD=${SOLARA_PASSWORD}
|
||||||
|
- SESSION_SECRET=${SESSION_SECRET}
|
||||||
|
labels:
|
||||||
|
createdBy: Apps
|
||||||
|
networks:
|
||||||
|
1panel-network:
|
||||||
|
external: true
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/bash
|
||||||
|
if [[ ! -f ".env" ]]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
NEW_SECRET=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 32)
|
||||||
|
if grep -q "SESSION_SECRET=" .env; then
|
||||||
|
if [[ "$(uname)" == "Darwin" ]]; then
|
||||||
|
sed -i '' "s/SESSION_SECRET=.*/SESSION_SECRET=$NEW_SECRET/" .env
|
||||||
|
else
|
||||||
|
sed -i "s/SESSION_SECRET=.*/SESSION_SECRET=$NEW_SECRET/" .env
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "SESSION_SECRET=$NEW_SECRET" >> .env
|
||||||
|
fi
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 7.4 KiB |
Loading…
Reference in New Issue