Projects là tài nguyên cấp cao nhất trong Youka. Mỗi project sở hữu tệp nguồn, các stem đã tách, lời bài hát đã đồng bộ, các bản xuất, và cài đặt project.
Tạo một project
Trong hầu hết trường hợp, hãy dùng client.projects.create() — hàm này sẽ tự xử lý việc tải lên cho bạn.
const operation = await client.projects.create({
source: { type: "path", path: "./song.mp3" },
lyricsSource: { type: "transcribe" },
});
// => ProjectOperation
Các loại source
Đọc một tệp từ ổ đĩa.source: {
type: "path",
path: "./song.mp3",
contentType: "audio/mpeg", // optional, inferred if omitted
}
Blob, File, ArrayBuffer, hoặc Uint8Array trong bộ nhớ.source: {
type: "bytes",
data: fileBuffer,
filename: "song.mp3",
contentType: "audio/mpeg", // optional
}
URL HTTP hoặc HTTPS từ xa.Các trang được hỗ trợ phụ thuộc vào yt-dlp. Xem danh sách URL được hỗ trợ.source: {
type: "url",
url: "https://example.com/song.mp4",
maxVideoQuality: "1080p", // optional: "720p", "1080p", "4k", or "best"
}
maxVideoQuality điều khiển chất lượng video tối đa được tải xuống cho các source
dạng URL. Mặc định là 1080p. SDK sẽ dùng chất lượng tốt nhất hiện có
trong giới hạn đó, và sẽ rơi về định dạng tốt nhất hiện có nếu nền tảng
không cung cấp luồng có giới hạn. Dùng best để không giới hạn.Trên Node.js và Bun, SDK sẽ tự động đảm bảo các binary phụ thuộc cần thiết cho URL
(ffmpeg, ffprobe, yt-dlp) ngay lần sử dụng đầu tiên. Lệnh CLI tương đương là youka deps ensure --for url.
Các trường khác
Tiêu đề project. Mặc định là tên tệp nguồn.
Áp dụng một preset có thể tái sử dụng tại thời điểm tạo.
Cấu hình đồng bộ lời bài hát. Xem bên dưới.
Các nguồn lyrics
// Transcribe lyrics from the audio
lyricsSource: {
type: "transcribe",
syncModel: "audioshake-transcription", // optional
language: "en", // optional
}
// Align exact lyrics to the audio
lyricsSource: {
type: "align",
lyrics: "First line\nSecond line\n...",
syncModel: "audioshake-alignment",
}
client.projects.create() cũng chấp nhận source inputFile cấp thấp khi bạn đã có inputFileId được tải lên.
const upload = await client.uploads.create({
filename: "song.mp3",
contentType: "audio/mpeg",
contentLength: buffer.byteLength,
});
await client.uploads.upload(upload.uploadUrl, buffer, {
contentType: "audio/mpeg",
});
const operation = await client.projects.create({
source: {
type: "inputFile",
inputFileId: upload.inputFileId,
filename: "song.mp3",
},
title: "My Song",
});
Báo giá số credits cần để tạo một project mà không tạo project đó.
const quote = await client.projects.quote({
source: { type: "path", path: "./song.mp3" },
lyricsSource: { type: "transcribe", language: "en" },
splitModel: "mdx23c",
});
console.log(quote.creditsRequired, quote.sufficientBalance);
client.projects.quote(...) chấp nhận cùng các dạng source như
client.projects.create(...), bao gồm URL maxVideoQuality. Nếu bạn đã
biết thời lượng media và không muốn tải tệp lên chỉ để báo giá, hãy truyền
dạng REST cấp thấp:
const quote = await client.projects.quote({
durationSeconds: 210,
lyricsSource: null,
splitModel: "mdx23c",
});
client.uploads.create(body, options?)
Cấp phát một slot tải lên và nhận một URL đã ký.
const upload = await client.uploads.create({
filename: "song.mp3",
contentType: "audio/mpeg",
contentLength: 4_521_344,
});
// => { inputFileId, uploadUrl }
client.uploads.upload(uploadUrl, body, options?)
PUT các byte của tệp lên URL đã ký.
await client.uploads.upload(upload.uploadUrl, fileBuffer, {
contentType: "audio/mpeg",
signal: abortController.signal,
});
Bất kỳ body tương thích với fetch: Blob, File, ArrayBuffer, Uint8Array,
ReadableStream, hoặc string.
Ném YoukaRequestError với mã UPLOAD_FAILED nếu thao tác tải lên trả về trạng thái không thuộc 2xx.
client.projects.get(projectId, options?)
Lấy trạng thái đầy đủ của project, bao gồm stems, lyrics, và exports.
const project = await client.projects.get("prj_abc123");
console.log(project.title, project.stems, project.lyrics);
client.projects.update(projectId, body, options?)
Patch metadata của project.
const project = await client.projects.update("prj_abc123", {
title: "Updated title",
artists: ["Artist name"],
});
Hãy truyền ít nhất một trong title hoặc artists.
client.projects.list(options?)
Liệt kê mọi project thuộc về tài khoản đã xác thực.
const projects = await client.projects.list();
projects.forEach((p) => console.log(p.id, p.title));
Trả về một mảng các project list item (một dạng gọn hơn so với getProject).
client.projects.delete(projectId, options?)
Xóa một project và tất cả stems, lyrics, và exports liên quan.
await client.projects.delete("prj_abc123", {
idempotencyKey: "delete-prj_abc123",
});
Việc xóa là vĩnh viễn. Hãy kết hợp với một idempotency key để việc thử lại được an toàn.
Tiếp theo
- Stems — chạy lại tách stem
- Lyrics sync — đồng bộ lại lyrics
- Exports — render video hoàn chỉnh
- Tasks — chờ các thao tác project với
client.projects.wait