## Generate lip sync from uploaded media `client.Lipsync.GenerateWithMedia(ctx, body) (*LipsyncGenerate, error)` **post** `/v1/lipsync/generate-with-media` Starts a lip sync job by uploading one video file and one audio file as multipart form-data. ### Parameters - `body LipsyncGenerateWithMediaParams` - `Audio param.Field[Reader]` Target audio file. - `Video param.Field[Reader]` Source video file. - `DisableActiveSpeakerDetection param.Field[bool]` Disable active speaker detection and use max-face lipsync preprocessing. - `Model param.Field[LipsyncGenerateWithMediaParamsModel]` Optional model selector. - `const LipsyncGenerateWithMediaParamsModelLipsync2 LipsyncGenerateWithMediaParamsModel = "lipsync-2"` - `ReferenceID param.Field[string]` Optional client-provided identifier for later retrieval. ### Returns - `type LipsyncGenerate struct{…}` - `RequestID string` Identifier of the created lip sync request. - `Status LipsyncGenerateStatus` Current state of the newly created request. - `const LipsyncGenerateStatusSuccess LipsyncGenerateStatus = "success"` ### Example ```go package main import ( "bytes" "context" "fmt" "io" "github.com/chamelaion/chamelaion-go" "github.com/chamelaion/chamelaion-go/option" ) func main() { client := chamelaion.NewClient( option.WithAPIKey("My API Key"), ) lipsyncGenerate, err := client.Lipsync.GenerateWithMedia(context.TODO(), chamelaion.LipsyncGenerateWithMediaParams{ Audio: io.Reader(bytes.NewBuffer([]byte("(binary)"))), Video: io.Reader(bytes.NewBuffer([]byte("(binary)"))), Model: chamelaion.LipsyncGenerateWithMediaParamsModelLipsync2, ReferenceID: chamelaion.String("upload-demo-01"), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", lipsyncGenerate.RequestID) } ``` #### Response ```json { "status": "success", "request_id": "3b7df3e8-f578-44de-b4f5-5f58dd6b89e0" } ```