25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 

95 satır
4.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/text2video", controller.KlingAipingNativeTaskSubmit)
  25. klingAipingRouter.GET("/videos/text2video/:task_id", controller.KlingAipingNativeTaskFetch)
  26. klingAipingRouter.GET("/videos/text2video", controller.KlingAipingNativeTaskList)
  27. klingAipingRouter.POST("/videos/image2video", controller.KlingAipingNativeTaskSubmit)
  28. klingAipingRouter.GET("/videos/image2video/:task_id", controller.KlingAipingNativeTaskFetch)
  29. klingAipingRouter.GET("/videos/image2video", controller.KlingAipingNativeTaskList)
  30. klingAipingRouter.POST("/videos/motion-control", controller.KlingAipingNativeTaskSubmit)
  31. klingAipingRouter.GET("/videos/motion-control/:task_id", controller.KlingAipingNativeTaskFetch)
  32. klingAipingRouter.GET("/videos/motion-control", controller.KlingAipingNativeTaskList)
  33. klingAipingRouter.POST("/videos/omni-video", controller.KlingAipingNativeTaskSubmit)
  34. klingAipingRouter.GET("/videos/omni-video/:task_id", controller.KlingAipingNativeTaskFetch)
  35. klingAipingRouter.GET("/videos/omni-video", controller.KlingAipingNativeTaskList)
  36. klingAipingRouter.POST("/videos/multi-image2video", controller.KlingAipingNativeTaskSubmit)
  37. klingAipingRouter.GET("/videos/multi-image2video/:task_id", controller.KlingAipingNativeTaskFetch)
  38. klingAipingRouter.GET("/videos/multi-image2video", controller.KlingAipingNativeTaskList)
  39. klingAipingRouter.POST("/videos/video-extend", controller.KlingAipingNativeTaskSubmit)
  40. klingAipingRouter.GET("/videos/video-extend/:task_id", controller.KlingAipingNativeTaskFetch)
  41. klingAipingRouter.GET("/videos/video-extend", controller.KlingAipingNativeTaskList)
  42. klingAipingRouter.POST("/general/advanced-custom-elements", controller.KlingAipingNativeTaskSubmit)
  43. klingAipingRouter.GET("/general/advanced-custom-elements/:task_id", controller.KlingAipingNativeTaskFetch)
  44. klingAipingRouter.GET("/general/advanced-custom-elements", controller.KlingAipingNativeProxy)
  45. klingAipingRouter.GET("/general/advanced-presets-elements", controller.KlingAipingNativeProxy)
  46. klingAipingRouter.POST("/general/delete-advanced-elements", controller.KlingAipingNativeProxy)
  47. klingAipingRouter.POST("/general/custom-voices", controller.KlingAipingNativeTaskSubmit)
  48. klingAipingRouter.GET("/general/custom-voices/:task_id", controller.KlingAipingNativeTaskFetch)
  49. klingAipingRouter.GET("/general/custom-voices", controller.KlingAipingNativeProxy)
  50. klingAipingRouter.GET("/general/presets-voices", controller.KlingAipingNativeProxy)
  51. klingAipingRouter.POST("/general/delete-voices", controller.KlingAipingNativeProxy)
  52. }
  53. // openai compatible API video routes
  54. // docs: https://platform.openai.com/docs/api-reference/videos/create
  55. {
  56. videoV1Router.POST("/videos", controller.RelayTask)
  57. videoV1Router.GET("/videos/:task_id", controller.RelayTaskFetch)
  58. }
  59. aipingNativeRouter := router.Group("/api/v3/contents/generations")
  60. aipingNativeRouter.Use(middleware.TokenAuth(), middleware.Distribute())
  61. {
  62. aipingNativeRouter.POST("/tasks", controller.AipingNativeVideoSubmit)
  63. }
  64. // Fetch 不需要 Distribute(无请求体分发逻辑)
  65. aipingNativeFetchRouter := router.Group("/api/v3/contents/generations")
  66. aipingNativeFetchRouter.Use(middleware.TokenAuth())
  67. {
  68. aipingNativeFetchRouter.GET("/tasks/:task_id", controller.AipingNativeVideoFetch)
  69. }
  70. klingV1Router := router.Group("/kling/v1")
  71. klingV1Router.Use(middleware.KlingRequestConvert(), middleware.TokenAuth(), middleware.Distribute())
  72. {
  73. klingV1Router.POST("/videos/text2video", controller.RelayTask)
  74. klingV1Router.POST("/videos/image2video", controller.RelayTask)
  75. klingV1Router.GET("/videos/text2video/:task_id", controller.RelayTaskFetch)
  76. klingV1Router.GET("/videos/image2video/:task_id", controller.RelayTaskFetch)
  77. }
  78. // Jimeng official API routes - direct mapping to official API format
  79. jimengOfficialGroup := router.Group("jimeng")
  80. jimengOfficialGroup.Use(middleware.JimengRequestConvert(), middleware.TokenAuth(), middleware.Distribute())
  81. {
  82. // Maps to: /?Action=CVSync2AsyncSubmitTask&Version=2022-08-31 and /?Action=CVSync2AsyncGetResult&Version=2022-08-31
  83. jimengOfficialGroup.POST("/", controller.RelayTask)
  84. }
  85. }