Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/ai-music-system / index.js |
| Date | Not specified in source |
| Repository | Janady13/ai-music-system |
| Revision | cd5207850253ee238f8a267c043b1e3c070ed81a |
| Branch | codex/create-ai-for-music-generation-ifwcfc |
| Path or archive member | index.js |
| Original SHA-256 | b009e00c35e8131f0465df3d543a291ad1037988f095ab5d48b11b0877cbd337 |
| Git blob SHA | c8b254d7c55020d69f2e599ff3e33315317ae733 |
| Reading-copy SHA-256 | b009e00c35e8131f0465df3d543a291ad1037988f095ab5d48b11b0877cbd337 |
Recovered source transcript
Download complete source text ↓88 lines · 2.6 KB
const express = require("express");
const http = require("http");
const path = require("path");
const fs = require("fs");
const os = require("os");
const pino = require("pino");
const { generateMusicPlan } = require("./lib/music/generator");
const { loadMeta, computeGenreProfiles } = require("./lib/training");
const logger = pino({ level: process.env.LOG_LEVEL || "info" });
const app = express();
const server = http.createServer(app);
const app = express();
app.use(express.json());
app.get("/health", (req, res) => {
try {
const meta = loadMeta();
res.json({ ok: true, uptime: process.uptime(), training: { step: meta.step, loss: meta.loss } });
} catch (err) {
log.error({ err: err.message }, "health check failed");
res.status(500).json({ ok: false, error: err.message });
}
});
app.use(express.json({ limit: "1mb" }));
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Headers", "Content-Type");
if (req.method === "OPTIONS") return res.sendStatus(200);
next();
});
app.get("/health", (_req, res) => {
res.json({ ok: true, uptime: process.uptime() });
});
app.get("/api/profiles", (_req, res) => {
try {
const profiles = computeGenreProfiles();
res.json({ ok: true, profiles });
} catch (error) {
logger.error({ err: error }, "failed to compute profiles");
res.status(500).json({ ok: false, error: "profile computation failed" });
}
});
app.get("/api/status", (_req, res) => {
try {
const meta = loadMeta();
res.json({ ok: true, meta });
} catch (error) {
logger.error({ err: error }, "failed to load status");
res.status(500).json({ ok: false, error: "status read failed" });
}
});
app.post("/api/generate", (req, res) => {
const { genre, mood, duration, tempo, key, instruments } = req.body || {};
const result = generateMusicPlan({ genre, mood, duration, tempo, key, instruments });
if (!result.ok) {
return res.status(400).json(result);
}
logger.info({
genre: result.metadata.genre,
mood: result.metadata.mood,
tempo: result.metadata.tempo,
duration: result.metadata.duration
}, "generated composition plan");
res.json(result);
});
const PUBLIC_DIR = path.join(__dirname, "public");
app.use(express.static(PUBLIC_DIR));
app.get("*", (_req, res) => {
res.sendFile(path.join(PUBLIC_DIR, "index.html"));
});
server.listen(PORT, () => {
const address = server.address();
const port = typeof address === "object" && address ? address.port : PORT;
logger.info({ port }, "narrow ai music engine online");
fs.writeFileSync(path.join(os.homedir(), ".skynet_port"), String(port));
});