Expose gateway billing flows from the synced server baseline

The preserved local work adds PopiNewAPI billing checkout, gateway account binding, and matching web console/pricing surfaces on top of the current test-server baseline. During the merge, the start-end video helpers from the deployed baseline were kept alongside the actionGenerate prompt handling from the WIP.

Constraint: Current usable baseline is 7054436, already deployed on the test server.

Rejected: Commit the WIP before syncing the baseline | would have hidden conflicts with the deployed start-end-frame changes.

Confidence: medium

Scope-risk: broad

Directive: Do not deploy this commit to the test server without rechecking gateway credentials and billing checkout behavior in that environment.

Tested: go test ./...

Tested: make build

Tested: cd web && npm run build
This commit is contained in:
wtgoku
2026-05-21 16:53:07 +08:00
parent 7054436a99
commit baba209519
31 changed files with 6035 additions and 86 deletions
+66
View File
@@ -55,6 +55,72 @@ go run ./cmd/popiart --endpoint http://127.0.0.1:8080/v1 media upload ./source.p
go run ./cmd/popiart --endpoint http://127.0.0.1:8080/v1 artifacts upload ./source.png --role source
```
### Jimeng action transfer
`popiartServer` supports the `popiart video action-transfer` CLI path by routing
`jimeng*` / DreamActor video model requests through PopiNewAPI's unified video
gateway:
```text
popiartcli
-> POST /v1/models/infer
-> popiartServer video.image2video job
-> PopiNewAPI POST /v1/video/generations
-> PopiNewAPI GET /v1/video/generations/{task_id}
```
CLI usage:
```sh
popiart --endpoint http://127.0.0.1:8080/v1 video action-transfer \
--image ./face.jpg \
--video ./source-action.mp4 \
--cut-result-first-second-switch \
--wait \
--output json \
--quiet \
--non-interactive
```
Request mapping:
- `model_id=jimeng_dreamactor_m20_gen_video`
- `model_type=video`
- `input.images[0]` becomes gateway `images[0]`
- `input.videos[0]` becomes gateway `videos[0]`
- `metadata.action` defaults to `actionGenerate` for DreamActor
- `--cut-result-first-second-switch` maps to `metadata.cut_result_first_second_switch`
- Image data URLs are normalized to pure base64 before submission because Jimeng rejects the `data:image/*;base64,` prefix.
The test server at `http://101.42.99.35:18080/v1` has been verified with a 5 second action-transfer preview returning an MP4 artifact.
### Seedance / Doubao video
`popiartServer` also supports Seedance / Doubao video models through the same
`video.image2video` job lane, but submits them to PopiNewAPI's unified JSON
video generations endpoint instead of the OpenAI-style `/v1/videos` path.
CLI usage:
```sh
popiart --endpoint http://127.0.0.1:8080/v1 video seedance \
--prompt "keep the motion style consistent" \
--video https://example.com/ref.mp4 \
--ratio 16:9 \
--return-last-frame \
--wait \
--output json \
--quiet \
--non-interactive
```
Request mapping:
- default model: `doubao-seedance-2-0-260128`
- `images[]`, `videos[]`, `audios[]` pass through to gateway JSON input
- `size` and `duration` stay at top level
- `action`, `frames`, `ratio`, `return_last_frame`, `generate_audio`, `service_tier`, and related options map into `metadata`
Optional skillhub source:
```sh