Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 

107 righe
5.9 KiB

  1. package router
  2. import (
  3. "github.com/QuantumNous/new-api/controller"
  4. "github.com/QuantumNous/new-api/middleware"
  5. "github.com/gin-gonic/gin"
  6. )
  7. func SetVideoRouter(router *gin.Engine) {
  8. // Video proxy: accepts either session auth (dashboard) or token auth (API clients)
  9. videoProxyRouter := router.Group("/v1")
  10. videoProxyRouter.Use(middleware.TokenOrUserAuth())
  11. {
  12. videoProxyRouter.GET("/videos/:task_id/content", controller.VideoProxy)
  13. }
  14. videoV1Router := router.Group("/v1")
  15. videoV1Router.Use(middleware.TokenAuth(), middleware.Distribute())
  16. {
  17. videoV1Router.POST("/video/generations", controller.RelayTask)
  18. videoV1Router.GET("/video/generations/:task_id", controller.RelayTaskFetch)
  19. videoV1Router.POST("/videos/:video_id/remix", controller.RelayTask)
  20. }
  21. klingAipingRouter := router.Group("/v1")
  22. klingAipingRouter.Use(middleware.TokenAuth())
  23. {
  24. klingAipingRouter.POST("/videos/multi-elements/init-selection", controller.KlingAipingNativeProxy)
  25. klingAipingRouter.POST("/videos/multi-elements/add-selection", controller.KlingAipingNativeProxy)
  26. klingAipingRouter.POST("/videos/multi-elements/delete-selection", controller.KlingAipingNativeProxy)
  27. klingAipingRouter.POST("/videos/multi-elements/clear-selection", controller.KlingAipingNativeProxy)
  28. klingAipingRouter.POST("/videos/multi-elements/preview-selection", controller.KlingAipingNativeProxy)
  29. klingAipingRouter.POST("/videos/text2video", controller.KlingAipingNativeTaskSubmit)
  30. klingAipingRouter.GET("/videos/text2video/:task_id", controller.KlingAipingNativeTaskFetch)
  31. klingAipingRouter.GET("/videos/text2video", controller.KlingAipingNativeTaskList)
  32. klingAipingRouter.POST("/videos/image2video", controller.KlingAipingNativeTaskSubmit)
  33. klingAipingRouter.GET("/videos/image2video/:task_id", controller.KlingAipingNativeTaskFetch)
  34. klingAipingRouter.GET("/videos/image2video", controller.KlingAipingNativeTaskList)
  35. klingAipingRouter.POST("/videos/motion-control", controller.KlingAipingNativeTaskSubmit)
  36. klingAipingRouter.GET("/videos/motion-control/:task_id", controller.KlingAipingNativeTaskFetch)
  37. klingAipingRouter.GET("/videos/motion-control", controller.KlingAipingNativeTaskList)
  38. klingAipingRouter.POST("/videos/omni-video", controller.KlingAipingNativeTaskSubmit)
  39. klingAipingRouter.GET("/videos/omni-video/:task_id", controller.KlingAipingNativeTaskFetch)
  40. klingAipingRouter.GET("/videos/omni-video", controller.KlingAipingNativeTaskList)
  41. klingAipingRouter.POST("/videos/multi-image2video", controller.KlingAipingNativeTaskSubmit)
  42. klingAipingRouter.GET("/videos/multi-image2video/:task_id", controller.KlingAipingNativeTaskFetch)
  43. klingAipingRouter.GET("/videos/multi-image2video", controller.KlingAipingNativeTaskList)
  44. klingAipingRouter.POST("/videos/multi-elements", controller.KlingAipingNativeTaskSubmit)
  45. klingAipingRouter.GET("/videos/multi-elements/:task_id", controller.KlingAipingNativeTaskFetch)
  46. klingAipingRouter.GET("/videos/multi-elements", controller.KlingAipingNativeTaskList)
  47. klingAipingRouter.POST("/elements/custom", controller.KlingAipingNativeProxy)
  48. klingAipingRouter.GET("/elements/custom", controller.KlingAipingNativeProxy)
  49. klingAipingRouter.GET("/elements/presets", controller.KlingAipingNativeProxy)
  50. klingAipingRouter.GET("/elements/:id", controller.KlingAipingNativeProxy)
  51. klingAipingRouter.POST("/elements/delete", controller.KlingAipingNativeProxy)
  52. klingAipingRouter.POST("/kling/general/advanced-custom-elements", controller.KlingAipingNativeTaskSubmit)
  53. klingAipingRouter.GET("/kling/general/advanced-custom-elements/:task_id", controller.KlingAipingNativeTaskFetch)
  54. klingAipingRouter.GET("/kling/general/advanced-custom-elements", controller.KlingAipingNativeProxy)
  55. klingAipingRouter.GET("/kling/general/advanced-presets-elements", controller.KlingAipingNativeProxy)
  56. klingAipingRouter.POST("/kling/general/delete-elements", controller.KlingAipingNativeProxy)
  57. klingAipingRouter.POST("/kling/general/custom-voices", controller.KlingAipingNativeTaskSubmit)
  58. klingAipingRouter.GET("/kling/general/custom-voices/:task_id", controller.KlingAipingNativeTaskFetch)
  59. klingAipingRouter.GET("/kling/general/custom-voices", controller.KlingAipingNativeProxy)
  60. klingAipingRouter.GET("/kling/general/presets-voices", controller.KlingAipingNativeProxy)
  61. klingAipingRouter.POST("/kling/general/delete-voices", controller.KlingAipingNativeProxy)
  62. }
  63. // openai compatible API video routes
  64. // docs: https://platform.openai.com/docs/api-reference/videos/create
  65. {
  66. videoV1Router.POST("/videos", controller.RelayTask)
  67. videoV1Router.GET("/videos/:task_id", controller.RelayTaskFetch)
  68. }
  69. aipingNativeRouter := router.Group("/api/v3/contents/generations")
  70. aipingNativeRouter.Use(middleware.TokenAuth(), middleware.Distribute())
  71. {
  72. aipingNativeRouter.POST("/tasks", controller.AipingNativeVideoSubmit)
  73. }
  74. // Fetch 不需要 Distribute(无请求体分发逻辑)
  75. aipingNativeFetchRouter := router.Group("/api/v3/contents/generations")
  76. aipingNativeFetchRouter.Use(middleware.TokenAuth())
  77. {
  78. aipingNativeFetchRouter.GET("/tasks/:task_id", controller.AipingNativeVideoFetch)
  79. }
  80. klingV1Router := router.Group("/kling/v1")
  81. klingV1Router.Use(middleware.KlingRequestConvert(), middleware.TokenAuth(), middleware.Distribute())
  82. {
  83. klingV1Router.POST("/videos/text2video", controller.RelayTask)
  84. klingV1Router.POST("/videos/image2video", controller.RelayTask)
  85. klingV1Router.GET("/videos/text2video/:task_id", controller.RelayTaskFetch)
  86. klingV1Router.GET("/videos/image2video/:task_id", controller.RelayTaskFetch)
  87. }
  88. // Jimeng official API routes - direct mapping to official API format
  89. jimengOfficialGroup := router.Group("jimeng")
  90. jimengOfficialGroup.Use(middleware.JimengRequestConvert(), middleware.TokenAuth(), middleware.Distribute())
  91. {
  92. // Maps to: /?Action=CVSync2AsyncSubmitTask&Version=2022-08-31 and /?Action=CVSync2AsyncGetResult&Version=2022-08-31
  93. jimengOfficialGroup.POST("/", controller.RelayTask)
  94. }
  95. }