Rebrand SonicForge Studio -> ScoreFX Studio: UI names, About logo, favicon + icons for all exe builds

This commit is contained in:
2026-08-24 19:28:22 +07:00
parent 2bcc8369a5
commit 5b747606c7
30 changed files with 31 additions and 24 deletions
+1 -1
View File
@@ -29,7 +29,7 @@ def _info_sub(fourcc, text):
def _bext(md, now):
fixed = bytearray(_BEXT_FIXED)
fixed[0:256] = _pad(md.get("description", ""), 256)
fixed[256:288] = _pad(md.get("originator", "SonicForgeStudio"), 32)
fixed[256:288] = _pad(md.get("originator", "ScoreFXStudio"), 32)
fixed[288:320] = _pad(md.get("originator_reference", ""), 32)
fixed[320:330] = _pad((md.get("date") or now.strftime("%Y-%m-%d")), 10)
fixed[330:338] = _pad((md.get("time") or now.strftime("%H:%M:%S")), 8)
+2 -2
View File
@@ -44,7 +44,7 @@ async def lifespan(app: FastAPI):
_SF_SCANNER_STOP.set()
app = FastAPI(title="SonicForge API Engine", lifespan=lifespan)
app = FastAPI(title="ScoreFX API Engine", lifespan=lifespan)
app.add_middleware(GZipMiddleware, minimum_size=500)
@@ -124,7 +124,7 @@ async def health():
async def get_index():
index_path = os.path.join(settings.TEMPLATES_DIR, "index.html")
if not os.path.exists(index_path):
return HTMLResponse(content=f"<h1>SonicForge Studio: index.html not found at {index_path}</h1>", status_code=404)
return HTMLResponse(content=f"<h1>ScoreFX Studio: index.html not found at {index_path}</h1>", status_code=404)
with open(index_path, "r", encoding="utf-8") as file:
resp = HTMLResponse(content=file.read(), status_code=200)
# no-cache: index.html PHẢI luôn mới (các bundle JS dùng ?v= để bust) —
Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

+5 -5
View File
@@ -8235,9 +8235,9 @@ const AboutModal = ({ isOpen, onClose }) => {
<div className="fixed inset-0 z-[9999] flex items-center justify-center bg-black/70 backdrop-blur-sm" onClick={onClose}>
<div className="bg-[#1e1e24] border border-zinc-700 rounded-xl shadow-2xl w-full max-w-md p-6 text-slate-200" onClick={e => e.stopPropagation()}>
<div className="flex items-center gap-3 mb-4">
<img src="/favicon.svg" alt="SonicForge Studio" className="w-12 h-12 rounded-lg bg-zinc-900 border border-zinc-700 shadow-lg object-contain p-0.5" />
<img src="/static/img/scorefx_app.png" alt="ScoreFX Studio" className="w-12 h-12 rounded-lg bg-zinc-900 border border-zinc-700 shadow-lg object-contain p-0.5" />
<div>
<h2 className="text-lg font-bold text-white">SonicForge Studio</h2>
<h2 className="text-lg font-bold text-white">ScoreFX Studio</h2>
<p className="text-xs text-zinc-400">Professional DAW — v{APP_VERSION}</p>
</div>
</div>
@@ -8284,7 +8284,7 @@ const HelpModal = ({ isOpen, onClose, lang }) => {
<div className="fixed inset-0 z-[9999] flex items-center justify-center bg-black/70 backdrop-blur-sm" onClick={onClose}>
<div className="bg-[#1e1e24] border border-zinc-700 rounded-xl shadow-2xl w-full max-w-2xl max-h-[85vh] flex flex-col text-slate-200" onClick={e => e.stopPropagation()}>
<div className="flex items-center justify-between px-5 py-3 border-b border-zinc-800 shrink-0">
<h2 className="text-base font-bold text-white">{vi ? 'Hướng dẫn sử dụng SonicForge Studio' : 'SonicForge Studio User Guide'}</h2>
<h2 className="text-base font-bold text-white">{vi ? 'Hướng dẫn sử dụng ScoreFX Studio' : 'ScoreFX Studio User Guide'}</h2>
<button onClick={onClose} className="w-6 h-6 rounded hover:bg-zinc-700 text-zinc-400 hover:text-white text-sm">✕</button>
</div>
<div className="overflow-y-auto px-5 py-4 space-y-3">
@@ -28462,7 +28462,7 @@ const App = () => {
const handleSaveCloud = handleSaveProject;
const handleExportSFS = (customName = null) => {
const finalName = customName || projectName || 'Dự án SonicForge';
const finalName = customName || projectName || 'Dự án ScoreFX';
const projectSchemaObj = serializeProjectToSchema(currentProjectId || 'proj_' + Date.now(), finalName, bpm, tracks, subTabs, sessionTabs, masteringSettings, masterVolume, { volL: masterVolL, volR: masterVolR, link: masterLink, muted: masterMuted });
window.SonicStorage.exportProjectToSFS(projectSchemaObj);
showToast("Đã xuất dự án (.sfs) thành công!", "success");
@@ -31514,7 +31514,7 @@ STRICT CONSTRAINTS:
}, {
sep: true
}, {
label: 'About SonicForge Studio...',
label: 'About ScoreFX Studio...',
icon: 'info',
action: () => setAboutModalOpen(true)
}]
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -4,7 +4,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>SonicForge Studio - Professional DAW Editor</title>
<title>ScoreFX Studio - Professional DAW Editor</title>
<script>
// ── Chặn BROWSER ZOOM toàn trang ──
// UI dùng px cố định cho item/button/label — browser zoom (Ctrl+wheel,
@@ -24,7 +24,7 @@
document.addEventListener('gesturestart', function (e) { e.preventDefault(); }, { passive: false });
document.addEventListener('gesturechange', function (e) { e.preventDefault(); }, { passive: false });
</script>
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="icon" type="image/png" href="/static/img/scorefx_favicon.png">
<!-- Bug #11: vendor local — trước đây load CDN (unpkg/cdn.tailwindcss/cdnjs) →
desktop Tauri offline trắng màn hình. Các file này nằm /static/vendor/. -->
<script src="/static/vendor/tailwindcdn.js"></script>
@@ -51,7 +51,7 @@
<script src="/static/js/services/promptTemplateManager.js?v=202607281039"></script>
<script src="/static/js/services/undoRedoEngine.js?v=202607290941"></script>
<script src="/static/js/services/chordTheory.js?v=202608211300"></script>
<script src="/static/js/app.precompiled.js?v=202608232200" defer></script>
<script src="/static/js/app.precompiled.js?v=202608241919" defer></script>
<link rel="stylesheet" href="/static/css/styles.css?v=202607271016">
<style>
:root {