suno.go 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package dto
  2. import (
  3. "encoding/json"
  4. )
  5. type SunoSubmitReq struct {
  6. GptDescriptionPrompt string `json:"gpt_description_prompt,omitempty"`
  7. Prompt string `json:"prompt,omitempty"`
  8. Mv string `json:"mv,omitempty"`
  9. Title string `json:"title,omitempty"`
  10. Tags string `json:"tags,omitempty"`
  11. ContinueAt float64 `json:"continue_at,omitempty"`
  12. TaskID string `json:"task_id,omitempty"`
  13. ContinueClipId string `json:"continue_clip_id,omitempty"`
  14. MakeInstrumental bool `json:"make_instrumental"`
  15. }
  16. type SunoDataResponse struct {
  17. TaskID string `json:"task_id" gorm:"type:varchar(50);index"`
  18. Action string `json:"action" gorm:"type:varchar(40);index"` // 任务类型, song, lyrics, description-mode
  19. Status string `json:"status" gorm:"type:varchar(20);index"` // 任务状态, submitted, queueing, processing, success, failed
  20. FailReason string `json:"fail_reason"`
  21. SubmitTime int64 `json:"submit_time" gorm:"index"`
  22. StartTime int64 `json:"start_time" gorm:"index"`
  23. FinishTime int64 `json:"finish_time" gorm:"index"`
  24. Data json.RawMessage `json:"data" gorm:"type:json"`
  25. }
  26. type SunoSong struct {
  27. ID string `json:"id"`
  28. VideoURL string `json:"video_url"`
  29. AudioURL string `json:"audio_url"`
  30. ImageURL string `json:"image_url"`
  31. ImageLargeURL string `json:"image_large_url"`
  32. MajorModelVersion string `json:"major_model_version"`
  33. ModelName string `json:"model_name"`
  34. Status string `json:"status"`
  35. Title string `json:"title"`
  36. Text string `json:"text"`
  37. Metadata SunoMetadata `json:"metadata"`
  38. }
  39. type SunoMetadata struct {
  40. Tags string `json:"tags"`
  41. Prompt string `json:"prompt"`
  42. GPTDescriptionPrompt interface{} `json:"gpt_description_prompt"`
  43. AudioPromptID interface{} `json:"audio_prompt_id"`
  44. Duration interface{} `json:"duration"`
  45. ErrorType interface{} `json:"error_type"`
  46. ErrorMessage interface{} `json:"error_message"`
  47. }
  48. type SunoLyrics struct {
  49. ID string `json:"id"`
  50. Status string `json:"status"`
  51. Title string `json:"title"`
  52. Text string `json:"text"`
  53. }
  54. type SunoGoAPISubmitReq struct {
  55. CustomMode bool `json:"custom_mode"`
  56. Input SunoGoAPISubmitReqInput `json:"input"`
  57. NotifyHook string `json:"notify_hook,omitempty"`
  58. }
  59. type SunoGoAPISubmitReqInput struct {
  60. GptDescriptionPrompt string `json:"gpt_description_prompt"`
  61. Prompt string `json:"prompt"`
  62. Mv string `json:"mv"`
  63. Title string `json:"title"`
  64. Tags string `json:"tags"`
  65. ContinueAt float64 `json:"continue_at"`
  66. TaskID string `json:"task_id"`
  67. ContinueClipId string `json:"continue_clip_id"`
  68. MakeInstrumental bool `json:"make_instrumental"`
  69. }
  70. type GoAPITaskResponse[T any] struct {
  71. Code int `json:"code"`
  72. Message string `json:"message"`
  73. Data T `json:"data"`
  74. ErrorMessage string `json:"error_message,omitempty"`
  75. }
  76. type GoAPITaskResponseData struct {
  77. TaskID string `json:"task_id"`
  78. }
  79. type GoAPIFetchResponseData struct {
  80. TaskID string `json:"task_id"`
  81. Status string `json:"status"`
  82. Input string `json:"input"`
  83. Clips map[string]SunoSong `json:"clips"`
  84. }