2
0

models.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package hailuo
  2. type SubjectReference struct {
  3. Type string `json:"type"` // Subject type, currently only supports "character"
  4. Image []string `json:"image"` // Array of subject reference images (currently only supports single image)
  5. }
  6. type VideoRequest struct {
  7. Model string `json:"model"`
  8. Prompt string `json:"prompt,omitempty"`
  9. PromptOptimizer *bool `json:"prompt_optimizer,omitempty"`
  10. FastPretreatment *bool `json:"fast_pretreatment,omitempty"`
  11. Duration *int `json:"duration,omitempty"`
  12. Resolution string `json:"resolution,omitempty"`
  13. CallbackURL string `json:"callback_url,omitempty"`
  14. AigcWatermark *bool `json:"aigc_watermark,omitempty"`
  15. FirstFrameImage string `json:"first_frame_image,omitempty"` // For image-to-video and start-end-to-video
  16. LastFrameImage string `json:"last_frame_image,omitempty"` // For start-end-to-video
  17. SubjectReference []SubjectReference `json:"subject_reference,omitempty"` // For subject-reference-to-video
  18. }
  19. type VideoResponse struct {
  20. TaskID string `json:"task_id"`
  21. BaseResp BaseResp `json:"base_resp"`
  22. }
  23. type BaseResp struct {
  24. StatusCode int `json:"status_code"`
  25. StatusMsg string `json:"status_msg"`
  26. }
  27. type QueryTaskRequest struct {
  28. TaskID string `json:"task_id"`
  29. }
  30. type QueryTaskResponse struct {
  31. TaskID string `json:"task_id"`
  32. Status string `json:"status"`
  33. FileID string `json:"file_id,omitempty"`
  34. VideoWidth int `json:"video_width,omitempty"`
  35. VideoHeight int `json:"video_height,omitempty"`
  36. BaseResp BaseResp `json:"base_resp"`
  37. }
  38. type ErrorInfo struct {
  39. StatusCode int `json:"status_code"`
  40. StatusMsg string `json:"status_msg"`
  41. }
  42. type TaskStatusInfo struct {
  43. TaskID string `json:"task_id"`
  44. Status string `json:"status"`
  45. FileID string `json:"file_id,omitempty"`
  46. VideoURL string `json:"video_url,omitempty"`
  47. ErrorCode int `json:"error_code,omitempty"`
  48. ErrorMsg string `json:"error_msg,omitempty"`
  49. }
  50. type ModelConfig struct {
  51. Name string
  52. DefaultResolution string
  53. SupportedDurations []int
  54. SupportedResolutions []string
  55. HasPromptOptimizer bool
  56. HasFastPretreatment bool
  57. }
  58. type RetrieveFileResponse struct {
  59. File FileObject `json:"file"`
  60. BaseResp BaseResp `json:"base_resp"`
  61. }
  62. type FileObject struct {
  63. FileID int64 `json:"file_id"`
  64. Bytes int64 `json:"bytes"`
  65. CreatedAt int64 `json:"created_at"`
  66. Filename string `json:"filename"`
  67. Purpose string `json:"purpose"`
  68. DownloadURL string `json:"download_url"`
  69. }
  70. func GetModelConfig(model string) ModelConfig {
  71. configs := map[string]ModelConfig{
  72. "MiniMax-Hailuo-2.3": {
  73. Name: "MiniMax-Hailuo-2.3",
  74. DefaultResolution: Resolution768P,
  75. SupportedDurations: []int{6, 10},
  76. SupportedResolutions: []string{Resolution768P, Resolution1080P},
  77. HasPromptOptimizer: true,
  78. HasFastPretreatment: true,
  79. },
  80. "MiniMax-Hailuo-2.3-Fast": {
  81. Name: "MiniMax-Hailuo-2.3-Fast",
  82. DefaultResolution: Resolution768P,
  83. SupportedDurations: []int{6, 10},
  84. SupportedResolutions: []string{Resolution768P, Resolution1080P},
  85. HasPromptOptimizer: true,
  86. HasFastPretreatment: true,
  87. },
  88. "MiniMax-Hailuo-02": {
  89. Name: "MiniMax-Hailuo-02",
  90. DefaultResolution: Resolution768P,
  91. SupportedDurations: []int{6, 10},
  92. SupportedResolutions: []string{Resolution512P, Resolution768P, Resolution1080P},
  93. HasPromptOptimizer: true,
  94. HasFastPretreatment: true,
  95. },
  96. "T2V-01-Director": {
  97. Name: "T2V-01-Director",
  98. DefaultResolution: Resolution768P,
  99. SupportedDurations: []int{6},
  100. SupportedResolutions: []string{Resolution768P, Resolution1080P},
  101. HasPromptOptimizer: true,
  102. HasFastPretreatment: false,
  103. },
  104. "T2V-01": {
  105. Name: "T2V-01",
  106. DefaultResolution: Resolution720P,
  107. SupportedDurations: []int{6},
  108. SupportedResolutions: []string{Resolution720P},
  109. HasPromptOptimizer: true,
  110. HasFastPretreatment: false,
  111. },
  112. "I2V-01-Director": {
  113. Name: "I2V-01-Director",
  114. DefaultResolution: Resolution720P,
  115. SupportedDurations: []int{6},
  116. SupportedResolutions: []string{Resolution720P, Resolution1080P},
  117. HasPromptOptimizer: true,
  118. HasFastPretreatment: false,
  119. },
  120. "I2V-01-live": {
  121. Name: "I2V-01-live",
  122. DefaultResolution: Resolution720P,
  123. SupportedDurations: []int{6},
  124. SupportedResolutions: []string{Resolution720P, Resolution1080P},
  125. HasPromptOptimizer: true,
  126. HasFastPretreatment: false,
  127. },
  128. "I2V-01": {
  129. Name: "I2V-01",
  130. DefaultResolution: Resolution720P,
  131. SupportedDurations: []int{6},
  132. SupportedResolutions: []string{Resolution720P, Resolution1080P},
  133. HasPromptOptimizer: true,
  134. HasFastPretreatment: false,
  135. },
  136. "S2V-01": {
  137. Name: "S2V-01",
  138. DefaultResolution: Resolution720P,
  139. SupportedDurations: []int{6},
  140. SupportedResolutions: []string{Resolution720P},
  141. HasPromptOptimizer: true,
  142. HasFastPretreatment: false,
  143. },
  144. }
  145. if config, exists := configs[model]; exists {
  146. return config
  147. }
  148. return ModelConfig{
  149. Name: model,
  150. DefaultResolution: DefaultResolution,
  151. SupportedDurations: []int{6},
  152. SupportedResolutions: []string{DefaultResolution},
  153. HasPromptOptimizer: true,
  154. HasFastPretreatment: false,
  155. }
  156. }