route.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { NextResponse } from "next/server";
  2. import { startRenderJob } from "@/lib/run-render";
  3. export async function POST(request: Request) {
  4. const body = await request.json();
  5. const { input, options } = body as {
  6. input: {
  7. text?: string;
  8. source?: string;
  9. sourceArgs?: Record<string, string>;
  10. template: string;
  11. platform?: string;
  12. platforms?: string[];
  13. ttsProvider: string;
  14. voiceId?: string;
  15. };
  16. options?: {
  17. noTts?: boolean;
  18. };
  19. };
  20. const platforms: string[] = input.platforms
  21. ?? (input.platform ? input.platform.split(",").map(p => p.trim()) : ["bilibili"]);
  22. if (!input.text && !input.source) {
  23. return NextResponse.json({ error: "text or source is required" }, { status: 400 });
  24. }
  25. const { jobId } = startRenderJob({
  26. template: input.template,
  27. platforms,
  28. ttsProvider: input.ttsProvider,
  29. source: input.source,
  30. sourceArgs: input.sourceArgs,
  31. text: input.text,
  32. voiceId: input.voiceId,
  33. noTts: options?.noTts,
  34. });
  35. return NextResponse.json({ jobId, status: "started" });
  36. }