From ebcf3c5779864e4d8a9eff801c27557e66994614 Mon Sep 17 00:00:00 2001 From: chiyi Date: Sat, 8 Aug 2026 11:15:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(grok):=20=E8=A7=86=E9=A2=91=E6=94=B9?= =?UTF-8?q?=E8=B5=B0=20Grok=20Console=20=E5=B9=B6=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - grok 视频/图片统一走 console.x.ai:sso 换 DPoP 短期 token,绕开 grok.com 的 statsig 反爬 - 新增 grok-image:不带参考图走 /v1/images/generations,带图自动走 quality 上游 + /v1/images/edits - grok 额度改本地写死 图5/视频2,成功各扣一次,两份归零直接判死,无恢复时间 - 视频渲染预算统一 20 分钟(adobe/runway/grok/custom) - 删除参考图人脸打码(facemask + onnxruntime 依赖 + 前台开关) --- README.en.md | 4 +- README.md | 4 +- backend/Dockerfile | 12 +- backend/go.mod | 1 - backend/go.sum | 2 - .../internal/http/handler/user_generation.go | 94 ++- backend/internal/provider/custom/client.go | 2 +- backend/internal/provider/grok/console.go | 609 ++++++++++++++++++ backend/internal/provider/grok/video.go | 2 +- backend/internal/repo/token_repo.go | 52 ++ backend/internal/service/assets/yunet.onnx | Bin 232418 -> 0 bytes backend/internal/service/facemask.go | 305 --------- backend/internal/service/tokens.go | 130 ++-- backend/internal/service/v1.go | 157 ++++- frontend/src/views/AccountsView.vue | 17 +- frontend/src/views/PlaygroundView.vue | 11 +- 16 files changed, 956 insertions(+), 446 deletions(-) create mode 100644 backend/internal/provider/grok/console.go delete mode 100644 backend/internal/service/assets/yunet.onnx delete mode 100644 backend/internal/service/facemask.go diff --git a/README.en.md b/README.en.md index b111f94..579cd22 100644 --- a/README.en.md +++ b/README.en.md @@ -133,7 +133,7 @@ It's more than an API proxy: it ships with **credit billing, CDK top-ups, referr | **Adobe Firefly** | firefly-image-5 · firefly-gpt-image-2 · flux-kontext-max · nano-banana-2 · nano-banana-pro · firefly-video · firefly-ray · gemini-veo31 | Image / Video | | **OpenAI** | gpt-image-2 | Image | | **Runway** | runway-gen4-turbo · runway-nano-banana-2 (Nano Banana 2) · runway-nano-banana-pro (Nano Banana Pro) | Video / Image | -| **Grok (grok.com)** | grok-video (imagine text/image-to-video) | Video | +| **Grok (console.x.ai)** | grok-video (imagine text/image-to-video), grok-image / grok-image-quality (imagine text/image-to-image) | Video / Image | | **Leonardo.ai** | seedream-4.5 | Image | | **Krea.ai** | flux-klein-2 | Image | | **Imagine.art** | imagine-1.5 · imagine-1.5pro | Image | @@ -245,7 +245,7 @@ backend/ Backend source (Go) │ │ ├── adobe/ Adobe Firefly (tls-client fingerprint) │ │ ├── chatgpt/ OpenAI (incl. PoW / turnstile) │ │ ├── runway/ Runway video + Nano Banana image -│ │ ├── grok/ Grok (grok.com, spoofed statsig, video) +│ │ ├── grok/ Grok (console.x.ai DPoP, video / image; account state via grok.com) │ │ ├── leonardo/ Leonardo │ │ ├── krea/ Krea │ │ ├── imagine/ Imagine.art diff --git a/README.md b/README.md index 135815b..21841e6 100644 --- a/README.md +++ b/README.md @@ -140,7 +140,7 @@ | **Adobe Firefly** | firefly-image-5 · firefly-gpt-image-2 · flux-kontext-max · nano-banana-2 · nano-banana-pro · firefly-video · firefly-ray · gemini-veo31 | 图像 / 视频 | | **OpenAI** | gpt-image-2 | 图像 | | **Runway** | runway-gen4-turbo · runway-nano-banana-2 (Nano Banana 2) · runway-nano-banana-pro (Nano Banana Pro) | 视频 / 图像 | -| **Grok(grok.com)** | grok-video(imagine 文生 / 图生视频) | 视频 | +| **Grok(console.x.ai)** | grok-video(imagine 文生 / 图生视频)、grok-image / grok-image-quality(imagine 文生图 / 图生图) | 视频 / 图像 | | **Leonardo.ai** | seedream-4.5 | 图像 | | **Krea.ai** | flux-klein-2 | 图像 | | **Imagine.art** | imagine-1.5 · imagine-1.5pro | 图像 | @@ -251,7 +251,7 @@ backend/ 后端源码(Go) │ │ ├── adobe/ Adobe Firefly(tls-client 指纹) │ │ ├── chatgpt/ OpenAI(含 PoW / turnstile) │ │ ├── runway/ Runway 视频 + Nano Banana 图像 -│ │ ├── grok/ Grok(grok.com,statsig 伪造,视频) +│ │ ├── grok/ Grok(console.x.ai DPoP,视频 / 图像;账号态走 grok.com) │ │ ├── leonardo/ Leonardo │ │ ├── krea/ Krea │ │ ├── imagine/ Imagine.art diff --git a/backend/Dockerfile b/backend/Dockerfile index 322ad58..806f4c7 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,30 +1,20 @@ # syntax=docker/dockerfile:1 -# onnxruntime 版本要与 go.mod 里 yalue/onnxruntime_go 的 API 版本匹配 -ARG ORT_VERSION=1.28.0 - # --- Stage 1: build the Go binary from source --- -# YuNet 人脸检测走 onnxruntime,需要 CGO(gcc) + libonnxruntime 动态库, -# 因此构建/运行镜像都用 glibc 的 debian(onnxruntime 官方包不支持 musl/alpine)。 FROM golang:1.26-bookworm AS build -ARG ORT_VERSION WORKDIR /src -RUN wget -qO /tmp/ort.tgz https://github.com/microsoft/onnxruntime/releases/download/v${ORT_VERSION}/onnxruntime-linux-x64-${ORT_VERSION}.tgz \ - && tar -xzf /tmp/ort.tgz -C /opt && rm /tmp/ort.tgz # Cache deps first for faster rebuilds. COPY go.mod go.sum ./ RUN go mod download COPY . . -RUN CGO_ENABLED=1 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/api ./cmd/api +RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/api ./cmd/api # --- Stage 2: minimal runtime image --- FROM debian:bookworm-slim -ARG ORT_VERSION # ca-certificates: outbound HTTPS to the AI providers. tzdata: POSTGRES_DSN sets # TimeZone=Asia/Shanghai. wget: container healthcheck. RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates tzdata wget \ && rm -rf /var/lib/apt/lists/* -COPY --from=build /opt/onnxruntime-linux-x64-${ORT_VERSION}/lib/libonnxruntime.so* /usr/local/lib/ WORKDIR /app COPY --from=build /out/api /app/api # Local fallback for generated media / reference uploads (RustFS/S3 is primary). diff --git a/backend/go.mod b/backend/go.mod index 1d71b82..e2d4df0 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -13,7 +13,6 @@ require ( github.com/google/uuid v1.6.0 github.com/matoous/go-nanoid/v2 v2.1.0 github.com/redis/go-redis/v9 v9.16.0 - github.com/yalue/onnxruntime_go v1.32.0 golang.org/x/crypto v0.54.0 golang.org/x/image v0.43.0 gorm.io/datatypes v1.2.7 diff --git a/backend/go.sum b/backend/go.sum index 3f35ee9..49a24f7 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -156,8 +156,6 @@ github.com/ugorji/go/codec v1.3.0 h1:Qd2W2sQawAfG8XSvzwhBeoGq71zXOC/Q1E9y/wUcsUA github.com/ugorji/go/codec v1.3.0/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= -github.com/yalue/onnxruntime_go v1.32.0 h1:O4pPw3IT+46CRrfuT0lcHWkczVoFvtfq6kMAO/iIVKc= -github.com/yalue/onnxruntime_go v1.32.0/go.mod h1:b4X26A8pekNb1ACJ58wAXgNKeUCGEAQ9dmACut9Sm/4= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= golang.org/x/arch v0.20.0 h1:dx1zTU0MAE98U+TQ8BLl7XsJbgze2WnNKF/8tGp/Q6c= diff --git a/backend/internal/http/handler/user_generation.go b/backend/internal/http/handler/user_generation.go index 1796951..e6bbb4c 100644 --- a/backend/internal/http/handler/user_generation.go +++ b/backend/internal/http/handler/user_generation.go @@ -4,6 +4,8 @@ import ( "errors" "net/http" "strings" + "sync" + "time" "backend/internal/service" "github.com/gin-gonic/gin" @@ -12,12 +14,63 @@ import ( type UserGenerationHandler struct { userGen *service.UserGenerationService admin *service.AdminReadService + idem *idemStore } func NewUserGenerationHandler(userGen *service.UserGenerationService, admin *service.AdminReadService) *UserGenerationHandler { return &UserGenerationHandler{ userGen: userGen, admin: admin, + idem: &idemStore{m: map[string]*idemEntry{}}, + } +} + +// /generate 是同步长请求(视频要跑好几分钟)。等待期间连接一旦被重置(CDN 回源 +// 超时 / HTTP2 GOAWAY),浏览器会把还没拿到响应的 POST 透明重发,后端就会再生成 +// 一次、再扣一次积分。前端为每个任务带一个 Idempotency-Key,同一个 key 只真正 +// 执行一次:原任务还在跑就直接拒绝,已经跑完就把原结果返回。 +const idemTTL = 10 * time.Minute + +type idemEntry struct { + done bool + resp map[string]any + at time.Time +} + +type idemStore struct { + mu sync.Mutex + m map[string]*idemEntry +} + +// begin 登记一个 key。第二个返回值为 true 表示这个 key 已经在处理或刚处理完, +// 返回的 entry 是原来那次的状态。 +func (s *idemStore) begin(key string) (*idemEntry, bool) { + s.mu.Lock() + defer s.mu.Unlock() + now := time.Now() + for k, e := range s.m { + if e.done && now.Sub(e.at) > idemTTL { + delete(s.m, k) + } + } + if e, ok := s.m[key]; ok { + return e, true + } + e := &idemEntry{at: now} + s.m[key] = e + return e, false +} + +// finish 记下结果供重发命中;resp 为 nil(本次失败)时直接释放 key,允许用户重试。 +func (s *idemStore) finish(key string, resp map[string]any) { + s.mu.Lock() + defer s.mu.Unlock() + if resp == nil { + delete(s.m, key) + return + } + if e, ok := s.m[key]; ok { + e.done, e.resp, e.at = true, resp, time.Now() } } @@ -76,6 +129,20 @@ func (h *UserGenerationHandler) Generate(c *gin.Context) { return } + var generated map[string]any // 成功时的响应,供同 key 的重发直接命中 + if key := strings.TrimSpace(c.GetHeader("Idempotency-Key")); key != "" { + key = user.ID + "|" + key + if e, dup := h.idem.begin(key); dup { + if e.done { + c.JSON(http.StatusOK, e.resp) + } else { + c.JSON(http.StatusConflict, gin.H{"detail": "该任务已在生成中,已忽略重复提交"}) + } + return + } + defer func() { h.idem.finish(key, generated) }() + } + resp, err := h.userGen.Generate(c.Request.Context(), user, service.UserGenerateRequest{ Model: body.Model, Prompt: body.Prompt, @@ -113,6 +180,7 @@ func (h *UserGenerationHandler) Generate(c *gin.Context) { } return } + generated = resp c.JSON(http.StatusOK, resp) } @@ -602,11 +670,22 @@ func (h *UserGenerationHandler) catalogEntries(c *gin.Context) ([]gin.H, error) "type": "video", "ratios": []string{"2:3", "3:2", "1:1", "9:16", "16:9"}, "resolutions": []string{"720p"}, - "durations": []string{"6s", "10s"}, - "max_reference_images": 6, - "reference_mode": "asset", + "durations": []string{"6s", "10s", "15s"}, + "max_reference_images": 1, + "reference_mode": "frame", "description": "Grok Imagine video (文/图生视频)", }, + { + "id": "grok-image", + "provider": "grok", + "type": "image", + "ratios": []string{"1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9"}, + "resolutions": []string{"1K", "2K"}, + "image_to_image": true, + "max_reference_images": 3, + "reference_mode": "asset", + "description": "Grok Imagine image (文生图 / 图生图)", + }, { "id": "seedream-4.5", "provider": "leonardo", @@ -801,6 +880,15 @@ func (h *UserGenerationHandler) publicModels() ([]gin.H, error) { "description": "Grok Imagine video", "stub": false, }, + { + "id": "grok-image", + "provider": "grok", + "kind": "image", + "ratios": []string{"1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9"}, + "resolutions": []string{"1K", "2K"}, + "description": "Grok Imagine image", + "stub": false, + }, { "id": "seedream-4.5", "provider": "leonardo", diff --git a/backend/internal/provider/custom/client.go b/backend/internal/provider/custom/client.go index 7ef1957..c011249 100644 --- a/backend/internal/provider/custom/client.go +++ b/backend/internal/provider/custom/client.go @@ -55,7 +55,7 @@ func sanitizeErr(err error) string { return "upstream request failed" } -func httpClient() *http.Client { return &http.Client{Timeout: 10 * time.Minute} } +func httpClient() *http.Client { return &http.Client{Timeout: 20 * time.Minute} } // GenerateImage calls the upstream OpenAI image API. With reference images it // uses /v1/images/edits (multipart); otherwise /v1/images/generations. Returns diff --git a/backend/internal/provider/grok/console.go b/backend/internal/provider/grok/console.go new file mode 100644 index 0000000..71adf2a --- /dev/null +++ b/backend/internal/provider/grok/console.go @@ -0,0 +1,609 @@ +package grok + +// Grok Console (console.x.ai) is xAI's own product console. It serves the same +// grok-imagine media models as grok.com, but over a plain JSON API that is NOT +// anti-bot gated: no x-statsig-id, no media-post + streaming-conversation dance. +// Auth reuses the very same website "sso" cookie — POST /v1/dpop/token exchanges +// it for a short-lived access token bound to a locally generated P-256 key, and +// every call then carries "Authorization: DPoP " plus a per-request ES256 +// DPoP proof (RFC 9449) over (method, url, token hash). + +import ( + "context" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/sha256" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "io" + "net/url" + "strings" + "sync" + "time" + + http "github.com/bogdanfinn/fhttp" + tlsclient "github.com/bogdanfinn/tls-client" + "github.com/google/uuid" +) + +const ( + consoleBase = "https://console.x.ai" + consoleOrigin = "https://console.x.ai" + + // Upstream model ids of the Console media catalog. The -quality image model + // is what the reference-image (edit) path uses. + ConsoleVideoModel = "grok-imagine-video" + ConsoleImageModel = "grok-imagine-image" + ConsoleImageQualityModel = "grok-imagine-image-quality" + + // consoleTokenSkew refreshes a DPoP token slightly before it expires. + consoleTokenSkew = 20 * time.Second + // consoleMaxEditImages is the upstream cap for image-to-image references + // (video takes a single 首图). + consoleMaxEditImages = 3 + + consoleVideoPollEvery = 2 * time.Second + consoleVideoDeadline = 20 * time.Minute +) + +// consoleSession is one minted DPoP token plus the key it is bound to. skew is +// (server time − local time) learned from the mint response Date header; the +// proof iat is shifted by it so a drifting host clock doesn't fail every proof. +type consoleSession struct { + accessToken string + key *ecdsa.PrivateKey + jwk consoleJWK + expiresAt time.Time + skew time.Duration +} + +type consoleJWK struct { + Crv string `json:"crv"` + Kty string `json:"kty"` + X string `json:"x"` + Y string `json:"y"` +} + +var ( + consoleMu sync.Mutex + consoleSessions = map[string]consoleSession{} // keyed by sso token hash +) + +// GenerateConsoleVideo runs Console's video pipeline: POST /v1/videos/generations +// returns a request_id, GET /v1/videos/{id} is polled until the clip is rendered +// and reports its vidgen.x.ai URL. frames is optional (image-to-video, one 首图 +// max) and is inlined as a data URL — Console takes the image in the request, so +// there is no separate upload step. When downloadResult is false, returns nil +// bytes and the artifact URL in meta["video_url"]; otherwise downloads the mp4. +func (c *Client) GenerateConsoleVideo(ctx context.Context, token, prompt, aspectRatio, resolution string, seconds int, frames [][]byte, downloadResult bool) ([]byte, map[string]any, error) { + token = strings.TrimSpace(strings.TrimPrefix(token, "Bearer ")) + if token == "" { + return nil, nil, ErrAuth + } + prompt = strings.TrimSpace(prompt) + if prompt == "" && len(frames) == 0 { + return nil, nil, fmt.Errorf("grok console: prompt required") + } + if seconds < 1 || seconds > 15 { + seconds = 10 + } + submitClient, err := c.newTLSClient() + if err != nil { + return nil, nil, err + } + directClient, err := c.newDirectTLSClient() + if err != nil { + return nil, nil, err + } + + payload := map[string]any{"model": ConsoleVideoModel, "duration": seconds} + if prompt != "" { + payload["prompt"] = prompt + } + if ratio := strings.TrimSpace(aspectRatio); ratio != "" { + payload["aspect_ratio"] = ratio + } + if res := consoleVideoResolution(resolution); res != "" { + payload["resolution"] = res + } + for _, f := range frames { + if len(f) == 0 { + continue + } + payload["image"] = map[string]any{"url": dataURL(f)} + break // 上游只吃 1 张首图 + } + + created, err := c.consoleJSON(ctx, submitClient, token, http.MethodPost, "/v1/videos/generations", payload) + if err != nil { + return nil, nil, err + } + requestID := strings.TrimSpace(stringValue(created["request_id"])) + if requestID == "" { + return nil, nil, fmt.Errorf("%w: video create missing request_id", ErrTemporaryUpstream) + } + + deadline := time.Now().Add(consoleVideoDeadline) + videoURL := "" + for { + status, pollErr := c.consoleJSON(ctx, submitClient, token, http.MethodGet, "/v1/videos/"+url.PathEscape(requestID), nil) + if pollErr != nil { + return nil, nil, pollErr + } + url, done, sErr := parseConsoleVideoStatus(status) + if sErr != nil { + return nil, nil, sErr + } + if done { + videoURL = url + break + } + if time.Now().After(deadline) { + return nil, nil, fmt.Errorf("%w: video render did not complete in time", ErrTemporaryUpstream) + } + select { + case <-ctx.Done(): + return nil, nil, ctx.Err() + case <-time.After(consoleVideoPollEvery): + } + } + + meta := map[string]any{ + "provider": "grok", + "request_id": requestID, + "video_url": videoURL, + } + if !downloadResult { + return nil, meta, nil + } + data, err := c.download(ctx, directClient, token, videoURL) + if err != nil { + return nil, nil, err + } + return data, meta, nil +} + +// GenerateConsoleImage runs Console's image pipeline: /v1/images/generations on +// grok-imagine-image for text-to-image, and /v1/images/edits on the +// grok-imagine-image-quality model (up to 3 inlined reference images) as soon as +// references are supplied — 带参考图自动走 quality 那个上游模型. Returns the +// artifact URL in meta["image_url"]; the bytes are downloaded unless urlOnly. +func (c *Client) GenerateConsoleImage(ctx context.Context, token, prompt, aspectRatio, resolution string, refs [][]byte, urlOnly bool) ([]byte, map[string]any, error) { + token = strings.TrimSpace(strings.TrimPrefix(token, "Bearer ")) + if token == "" { + return nil, nil, ErrAuth + } + if strings.TrimSpace(prompt) == "" { + return nil, nil, fmt.Errorf("grok console: prompt required") + } + submitClient, err := c.newTLSClient() + if err != nil { + return nil, nil, err + } + directClient, err := c.newDirectTLSClient() + if err != nil { + return nil, nil, err + } + + payload := map[string]any{ + "model": ConsoleImageModel, "prompt": strings.TrimSpace(prompt), + "n": 1, "response_format": "url", + } + + if ratio := consoleImageAspectRatio(aspectRatio); ratio != "" { + payload["aspect_ratio"] = ratio + } + if res := consoleImageResolution(resolution); res != "" { + payload["resolution"] = res + } + path := "/v1/images/generations" + var images []map[string]any + for _, r := range refs { + if len(r) == 0 || len(images) >= consoleMaxEditImages { + continue + } + images = append(images, map[string]any{"type": "image_url", "url": dataURL(r)}) + } + if len(images) > 0 { + path = "/v1/images/edits" + payload["model"] = ConsoleImageQualityModel + if len(images) == 1 { + payload["image"] = images[0] + } else { + payload["images"] = images + } + } + + res, err := c.consoleJSON(ctx, submitClient, token, http.MethodPost, path, payload) + if err != nil { + return nil, nil, err + } + items, _ := res["data"].([]any) + imageURL := "" + for _, item := range items { + entry, _ := item.(map[string]any) + if entry == nil { + continue + } + if v := strings.TrimSpace(stringValue(entry["url"])); v != "" { + imageURL = v + break + } + } + if imageURL == "" { + return nil, nil, fmt.Errorf("%w: image response missing url", ErrTemporaryUpstream) + } + meta := map[string]any{"provider": "grok", "image_url": imageURL} + if urlOnly { + return nil, meta, nil + } + data, err := c.download(ctx, directClient, token, imageURL) + if err != nil { + return nil, nil, err + } + return data, meta, nil +} + +// consoleJSON does an authed Console JSON call and parses the response object. A +// 401 means the DPoP token went stale (or the sso died): the cached session is +// dropped and the call retried once with a freshly minted token. +func (c *Client) consoleJSON(ctx context.Context, client tlsclient.HttpClient, token, method, path string, body any) (map[string]any, error) { + var payload []byte + if body != nil { + encoded, err := json.Marshal(body) + if err != nil { + return nil, err + } + payload = encoded + } + for attempt := 0; attempt < 2; attempt++ { + session, err := c.consoleSession(ctx, client, token) + if err != nil { + return nil, err + } + var reader io.Reader + if len(payload) > 0 { + reader = strings.NewReader(string(payload)) + } + req, err := http.NewRequest(method, consoleBase+path, reader) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if err := c.applyConsoleHeaders(req, token, session); err != nil { + return nil, err + } + resp, err := client.Do(req) + if err != nil { + return nil, fmt.Errorf("%w: %v", ErrTemporaryUpstream, err) + } + raw, readErr := io.ReadAll(resp.Body) + resp.Body.Close() + if resp.StatusCode == 401 && attempt == 0 { + consoleForget(token, session.accessToken) + continue + } + if readErr != nil { + return nil, fmt.Errorf("%w: %v", ErrTemporaryUpstream, readErr) + } + if e := consoleMapStatus(path, resp.StatusCode, raw); e != nil { + return nil, e + } + out := map[string]any{} + if len(raw) == 0 { + return out, nil + } + if err := json.Unmarshal(raw, &out); err != nil { + return nil, fmt.Errorf("%w: %s non-json: %s", ErrTemporaryUpstream, path, clip(raw, 120)) + } + return out, nil + } + return nil, fmt.Errorf("%w: console retry state invalid", ErrTemporaryUpstream) +} + +// consoleSession returns a live DPoP session for the sso token, minting one when +// the cache is empty or the token is about to expire. +func (c *Client) consoleSession(ctx context.Context, client tlsclient.HttpClient, token string) (consoleSession, error) { + key := consoleCacheKey(token) + consoleMu.Lock() + cached, ok := consoleSessions[key] + consoleMu.Unlock() + if ok && cached.expiresAt.After(time.Now().Add(consoleTokenSkew)) { + return cached, nil + } + session, err := c.mintConsoleSession(ctx, client, token) + if err != nil { + return consoleSession{}, err + } + consoleMu.Lock() + consoleSessions[key] = session + consoleMu.Unlock() + return session, nil +} + +// consoleForget drops a cached session (only if it is still the one that failed, +// so a concurrent refresh isn't thrown away). +func consoleForget(token, accessToken string) { + key := consoleCacheKey(token) + consoleMu.Lock() + if current, ok := consoleSessions[key]; ok && current.accessToken == accessToken { + delete(consoleSessions, key) + } + consoleMu.Unlock() +} + +func consoleCacheKey(token string) string { + sum := sha256.Sum256([]byte(token)) + return fmt.Sprintf("%x", sum[:]) +} + +// mintConsoleSession posts the freshly generated public JWK to /v1/dpop/token +// with the sso cookie and keeps the returned DPoP-bound access token. +func (c *Client) mintConsoleSession(ctx context.Context, client tlsclient.HttpClient, token string) (consoleSession, error) { + privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + return consoleSession{}, err + } + jwk := consoleJWK{ + Crv: "P-256", Kty: "EC", + X: base64.RawURLEncoding.EncodeToString(privateKey.PublicKey.X.FillBytes(make([]byte, 32))), + Y: base64.RawURLEncoding.EncodeToString(privateKey.PublicKey.Y.FillBytes(make([]byte, 32))), + } + body, err := json.Marshal(map[string]any{"jwk": jwk}) + if err != nil { + return consoleSession{}, err + } + req, err := http.NewRequest(http.MethodPost, consoleBase+"/v1/dpop/token", strings.NewReader(string(body))) + if err != nil { + return consoleSession{}, err + } + req = req.WithContext(ctx) + c.applyConsoleBrowserHeaders(req, token, nil) + before := time.Now().UTC() + resp, err := client.Do(req) + if err != nil { + return consoleSession{}, fmt.Errorf("%w: %v", ErrTemporaryUpstream, err) + } + after := time.Now().UTC() + raw, err := io.ReadAll(resp.Body) + resp.Body.Close() + if err != nil { + return consoleSession{}, fmt.Errorf("%w: %v", ErrTemporaryUpstream, err) + } + if e := consoleMapStatus("/v1/dpop/token", resp.StatusCode, raw); e != nil { + return consoleSession{}, e + } + var out struct { + AccessToken string `json:"access_token"` + TokenType string `json:"token_type"` + ExpiresIn int `json:"expires_in"` + } + if err := json.Unmarshal(raw, &out); err != nil { + return consoleSession{}, fmt.Errorf("%w: dpop token non-json: %s", ErrTemporaryUpstream, clip(raw, 120)) + } + if strings.TrimSpace(out.AccessToken) == "" || !strings.EqualFold(strings.TrimSpace(out.TokenType), "DPoP") { + return consoleSession{}, fmt.Errorf("%w: dpop token response invalid", ErrTemporaryUpstream) + } + if out.ExpiresIn <= 0 || out.ExpiresIn > 3600 { + out.ExpiresIn = 300 + } + return consoleSession{ + accessToken: out.AccessToken, + key: privateKey, + jwk: jwk, + expiresAt: time.Now().Add(time.Duration(out.ExpiresIn) * time.Second), + skew: consoleClockSkew(resp.Header.Get("Date"), before, after), + }, nil +} + +// applyConsoleHeaders sets the browser-like header set plus the DPoP +// Authorization header and its per-request proof. +func (c *Client) applyConsoleHeaders(req *http.Request, token string, session consoleSession) error { + proof, err := consoleProof(session, req) + if err != nil { + return err + } + c.applyConsoleBrowserHeaders(req, token, map[string]string{ + "authorization": "DPoP " + session.accessToken, + "dpop": proof, + }) + return nil +} + +func (c *Client) applyConsoleBrowserHeaders(req *http.Request, token string, extra map[string]string) { + h := http.Header{ + "accept": {"*/*"}, + "accept-language": {"en-US,en;q=0.9"}, + "content-type": {"application/json"}, + "origin": {consoleOrigin}, + "referer": {consoleOrigin + "/"}, + "user-agent": {userAgent}, + "sec-ch-ua": {`"Chromium";v="133", "Not(A:Brand";v="99"`}, + "sec-ch-ua-mobile": {"?0"}, + "sec-ch-ua-platform": {`"Windows"`}, + "sec-fetch-dest": {"empty"}, + "sec-fetch-mode": {"cors"}, + "sec-fetch-site": {"same-origin"}, + "cookie": {"sso=" + token + "; sso-rw=" + token}, + } + for k, v := range extra { + h[k] = []string{v} + } + h[http.HeaderOrderKey] = []string{ + "accept", "accept-language", "authorization", "content-type", "dpop", + "origin", "referer", "user-agent", "sec-ch-ua", "sec-ch-ua-mobile", + "sec-ch-ua-platform", "sec-fetch-dest", "sec-fetch-mode", "sec-fetch-site", "cookie", + } + req.Header = h +} + +// consoleProof builds the ES256 DPoP proof JWT for one request: it binds the +// method + URL (without query) and the access token hash (ath), signed with the +// key the token was issued against. +func consoleProof(session consoleSession, req *http.Request) (string, error) { + if session.key == nil || strings.TrimSpace(session.accessToken) == "" || req == nil || req.URL == nil { + return "", errors.New("grok console: dpop session invalid") + } + path := req.URL.EscapedPath() + if path == "" { + path = "/" + } + ath := sha256.Sum256([]byte(session.accessToken)) + header := map[string]any{"typ": "dpop+jwt", "alg": "ES256", "jwk": session.jwk} + claims := map[string]any{ + "jti": uuid.NewString(), + "htm": strings.ToUpper(req.Method), + "htu": req.URL.Scheme + "://" + req.URL.Host + path, + "iat": time.Now().Add(session.skew).UTC().Unix(), + "ath": base64.RawURLEncoding.EncodeToString(ath[:]), + } + headerJSON, err := json.Marshal(header) + if err != nil { + return "", err + } + claimsJSON, err := json.Marshal(claims) + if err != nil { + return "", err + } + signingInput := base64.RawURLEncoding.EncodeToString(headerJSON) + "." + base64.RawURLEncoding.EncodeToString(claimsJSON) + digest := sha256.Sum256([]byte(signingInput)) + r, s, err := ecdsa.Sign(rand.Reader, session.key, digest[:]) + if err != nil { + return "", err + } + signature := make([]byte, 64) + r.FillBytes(signature[:32]) + s.FillBytes(signature[32:]) + return signingInput + "." + base64.RawURLEncoding.EncodeToString(signature), nil +} + +// consoleClockSkew mirrors the console.x.ai frontend: proof iat is local time +// corrected by (server Date − local time) so host clock drift doesn't break +// every proof. before/after bound the RTT around the mint response. +func consoleClockSkew(dateHeader string, before, after time.Time) time.Duration { + dateHeader = strings.TrimSpace(dateHeader) + if dateHeader == "" { + return 0 + } + serverTime, err := http.ParseTime(dateHeader) + if err != nil { + return 0 + } + if after.Before(before) { + after = before + } + mid := before.Add(after.Sub(before) / 2) + return serverTime.UTC().Sub(mid.UTC()).Round(time.Second) +} + +// parseConsoleVideoStatus reads one poll response: (url, done, error). +func parseConsoleVideoStatus(res map[string]any) (string, bool, error) { + status := strings.ToLower(strings.TrimSpace(stringValue(res["status"]))) + switch status { + case "done", "completed", "succeeded", "success", "ready": + video, _ := res["video"].(map[string]any) + url := "" + if video != nil { + url = strings.TrimSpace(stringValue(video["url"])) + } + if url == "" { + return "", false, fmt.Errorf("%w: video done without content url", ErrTemporaryUpstream) + } + return url, true, nil + case "pending", "processing", "in_progress", "queued", "": + return "", false, nil + default: + message := consoleErrorMessage(res["error"]) + if isCreditError(message) { + return "", false, fmt.Errorf("%w: %s", ErrQuotaExhausted, message) + } + if message == "" { + message = status + } + return "", false, fmt.Errorf("grok console: video generation failed: %s", message) + } +} + +// consoleMapStatus maps a Console HTTP status to the shared provider sentinels. +// Console is not anti-bot gated, so a 403 is a real rejection (dead sso / no +// access) unless the body is a Cloudflare interstitial. +func consoleMapStatus(path string, status int, raw []byte) error { + body := string(raw) + switch { + case status >= 200 && status < 300: + return nil + case status == 401: + return fmt.Errorf("%w: %s 401 %s", ErrAuth, path, clip(raw, 160)) + case status == 403: + if isBotChallenge(body) { + return fmt.Errorf("%w: %s 403 %s", ErrTemporaryUpstream, path, clip(raw, 160)) + } + return fmt.Errorf("%w: %s 403 %s", ErrAuth, path, clip(raw, 160)) + case status == 429: + if isCreditError(body) { + return fmt.Errorf("%w: %s 429 %s", ErrQuotaExhausted, path, clip(raw, 160)) + } + return fmt.Errorf("%w: %s 429 %s", ErrTemporaryUpstream, path, clip(raw, 160)) + case status >= 500: + return fmt.Errorf("%w: %s %d %s", ErrTemporaryUpstream, path, status, clip(raw, 160)) + default: + if isCreditError(body) { + return fmt.Errorf("%w: %s", ErrQuotaExhausted, clip(raw, 160)) + } + return fmt.Errorf("grok console: %s %d %s", path, status, clip(raw, 160)) + } +} + +func consoleErrorMessage(value any) string { + switch v := value.(type) { + case string: + return strings.TrimSpace(v) + case map[string]any: + for _, key := range []string{"message", "code", "type"} { + if text := strings.TrimSpace(stringValue(v[key])); text != "" { + return text + } + } + } + return "" +} + +// consoleImageAspectRatio keeps only the ratios Console's image models accept; +// anything else is dropped so the upstream picks its default instead of 400ing. +func consoleImageAspectRatio(value string) string { + switch strings.TrimSpace(value) { + case "1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3", "2:1", "1:2": + return strings.TrimSpace(value) + } + return "" +} + +// consoleImageResolution maps our tier to the Console enum (only 1k / 2k exist). +func consoleImageResolution(value string) string { + switch strings.ToUpper(strings.TrimSpace(value)) { + case "1K": + return "1k" + case "2K", "4K": + return "2k" + } + return "" +} + +// consoleVideoResolution clamps to the two tiers Console accepts. +func consoleVideoResolution(value string) string { + switch strings.ToLower(strings.TrimSpace(value)) { + case "480p": + return "480p" + default: + return "720p" + } +} + +// dataURL inlines reference image bytes; Console takes images in the request +// body, so no upload endpoint is involved. +func dataURL(img []byte) string { + return "data:image/png;base64," + base64.StdEncoding.EncodeToString(img) +} diff --git a/backend/internal/provider/grok/video.go b/backend/internal/provider/grok/video.go index 973ab74..290f66f 100644 --- a/backend/internal/provider/grok/video.go +++ b/backend/internal/provider/grok/video.go @@ -291,7 +291,7 @@ func (c *Client) createPost(ctx context.Context, client tlsclient.HttpClient, to // assets.grok.com is not anti-bot gated) until grok finishes rendering it. // 404 means "still rendering"; auth failures abort. func (c *Client) waitForAsset(ctx context.Context, client tlsclient.HttpClient, token, url string) error { - deadline := time.Now().Add(6 * time.Minute) + deadline := time.Now().Add(20 * time.Minute) for { if err := ctx.Err(); err != nil { return err diff --git a/backend/internal/repo/token_repo.go b/backend/internal/repo/token_repo.go index a58a619..963d5d5 100644 --- a/backend/internal/repo/token_repo.go +++ b/backend/internal/repo/token_repo.go @@ -124,6 +124,58 @@ func (r *TokenRepository) ReserveQuota(ctx context.Context, pool, id string, amo return allowed, deducted, err } +// Grok accounts carry a forced local quota instead of an upstream balance: +// Console 没有额度接口,所以导入时写死 图 5 / 视频 2,用一次扣一次,两个都归零直接判死。 +const ( + GrokImageQuotaKey = "grok_image_remaining" + GrokVideoQuotaKey = "grok_video_remaining" + GrokImageQuota = 5 + GrokVideoQuota = 2 +) + +// ConsumeGrokQuota deducts one unit from a grok account's local per-kind quota +// under a row lock. Zeroed kinds are flagged (image_limited / video_limited) so +// scheduling skips them; once both are zero the account is dead (no reset time — +// 用完就废). +func (r *TokenRepository) ConsumeGrokQuota(ctx context.Context, id, kind string) error { + return r.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { + var item model.TokenAccount + if e := tx.Clauses(clause.Locking{Strength: "UPDATE"}). + First(&item, "pool = ? AND id = ?", "grok", id).Error; e != nil { + return e + } + images, known := metaInt(item.Meta, GrokImageQuotaKey) + if !known { + images = GrokImageQuota + } + videos, known := metaInt(item.Meta, GrokVideoQuotaKey) + if !known { + videos = GrokVideoQuota + } + if kind == "video" { + videos = max(0, videos-1) + } else { + images = max(0, images-1) + } + meta := cloneMeta(item.Meta) + meta[GrokImageQuotaKey] = images + meta[GrokVideoQuotaKey] = videos + patch := map[string]any{ + "meta": meta, + "image_limited": images <= 0, + "video_limited": videos <= 0, + "updated_at": time.Now(), + } + if images <= 0 && videos <= 0 { + patch["status"] = "disabled" + patch["dead"] = true + } + return tx.Model(&model.TokenAccount{}). + Where("pool = ? AND id = ?", "grok", id). + Updates(patch).Error + }) +} + // RefundQuota atomically adds `amount` back to cached_quota_remaining (releasing a // hold from a reservation whose render then failed). No-op if the balance is // unknown. Row-locked like ReserveQuota. diff --git a/backend/internal/service/assets/yunet.onnx b/backend/internal/service/assets/yunet.onnx deleted file mode 100644 index 73a37b10b998856eb7188a6865f4a7ddfa5e9711..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232418 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

C?*o= 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�~JwAo5gC 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 diff --git a/backend/internal/service/facemask.go b/backend/internal/service/facemask.go deleted file mode 100644 index 7cdf9ad..0000000 --- a/backend/internal/service/facemask.go +++ /dev/null @@ -1,305 +0,0 @@ -package service - -import ( - "bytes" - _ "embed" - "errors" - "fmt" - "image" - "image/draw" - "image/png" - "math" - "os" - "runtime" - "sort" - "sync" - - ort "github.com/yalue/onnxruntime_go" -) - -// YuNet 人脸检测模型(opencv_zoo face_detection_yunet_2023mar,输入尺寸已改为 -// 动态),编译进二进制,运行时只额外依赖 onnxruntime 动态库。 -// -//go:embed assets/yunet.onnx -var yunetModel []byte - -const ( - // 检出分数下限与 NMS 的 IoU 阈值 - faceScoreThreshold = 0.35 - faceNMSIoU = 0.3 - // 推理输入的长边上限:更大的图先等比缩小,检出框再映射回原图, - // 避免超大参考图把内存和耗时拉爆。 - faceMaxInferSide = 2560 -) - -// YuNet 的三个输出分支步长 -var faceStrides = []int{8, 16, 32} - -// ErrNoFaceDetected 表示图中没有检出人脸,调用方按原图处理。 -var ErrNoFaceDetected = errors.New("no face detected") - -var ( - faceOnce sync.Once - faceSession *ort.DynamicAdvancedSession - faceInitErr error -) - -// onnxruntimeLibPath 返回 onnxruntime 动态库路径:ONNXRUNTIME_LIB_PATH 优先, -// 否则用各平台的默认位置。 -func onnxruntimeLibPath() string { - if p := os.Getenv("ONNXRUNTIME_LIB_PATH"); p != "" { - return p - } - if runtime.GOOS == "windows" { - return "onnxruntime.dll" - } - return "/usr/local/lib/libonnxruntime.so" -} - -// faceOutputNames 是 YuNet 需要读取的输出名,顺序与 readOutputs 的下标约定一致: -// 先 cls_*、再 obj_*、最后 bbox_*(关键点分支用不到)。 -func faceOutputNames() []string { - names := make([]string, 0, len(faceStrides)*3) - for _, prefix := range []string{"cls", "obj", "bbox"} { - for _, s := range faceStrides { - names = append(names, fmt.Sprintf("%s_%d", prefix, s)) - } - } - return names -} - -func faceDetector() (*ort.DynamicAdvancedSession, error) { - faceOnce.Do(func() { - ort.SetSharedLibraryPath(onnxruntimeLibPath()) - if err := ort.InitializeEnvironment(); err != nil { - faceInitErr = fmt.Errorf("onnxruntime init: %w", err) - return - } - faceSession, faceInitErr = ort.NewDynamicAdvancedSessionWithONNXData( - yunetModel, []string{"input"}, faceOutputNames(), nil) - }) - if faceInitErr != nil { - return nil, faceInitErr - } - return faceSession, nil -} - -type faceDetection struct { - rect image.Rectangle - score float32 -} - -// detectFaces 返回图中的人脸矩形框(坐标基于 src 的原始尺寸)。 -func detectFaces(src image.Image) ([]image.Rectangle, error) { - sess, err := faceDetector() - if err != nil { - return nil, err - } - bounds := src.Bounds() - long := bounds.Dx() - if bounds.Dy() > long { - long = bounds.Dy() - } - scale := 1.0 - if long > faceMaxInferSide { - scale = float64(faceMaxInferSide) / float64(long) - } - inW := int(float64(bounds.Dx()) * scale) - inH := int(float64(bounds.Dy()) * scale) - if inW < 1 || inH < 1 { - return nil, nil - } - // 输入补齐到 32 的整数倍,三个步长分支才有整数网格 - padW := (inW + 31) / 32 * 32 - padH := (inH + 31) / 32 * 32 - - // YuNet 吃 BGR、NCHW、未归一化的 0~255 像素 - pixels := make([]float32, 3*padW*padH) - plane := padW * padH - for y := 0; y < inH; y++ { - srcY := bounds.Min.Y + int(float64(y)/scale) - for x := 0; x < inW; x++ { - r, g, b, _ := src.At(bounds.Min.X+int(float64(x)/scale), srcY).RGBA() - i := y*padW + x - pixels[i] = float32(b >> 8) - pixels[plane+i] = float32(g >> 8) - pixels[2*plane+i] = float32(r >> 8) - } - } - input, err := ort.NewTensor(ort.NewShape(1, 3, int64(padH), int64(padW)), pixels) - if err != nil { - return nil, err - } - defer input.Destroy() - - outputs := make([]ort.Value, len(faceStrides)*3) - if err := sess.Run([]ort.Value{input}, outputs); err != nil { - return nil, err - } - defer func() { - for _, out := range outputs { - if out != nil { - out.Destroy() - } - } - }() - - branch := func(i int) ([]float32, error) { - t, ok := outputs[i].(*ort.Tensor[float32]) - if !ok { - return nil, fmt.Errorf("yunet output %d is not a float32 tensor", i) - } - return t.GetData(), nil - } - inferBounds := image.Rect(0, 0, inW, inH) - var dets []faceDetection - for si, stride := range faceStrides { - cls, err := branch(si) - if err != nil { - return nil, err - } - obj, err := branch(len(faceStrides) + si) - if err != nil { - return nil, err - } - box, err := branch(2*len(faceStrides) + si) - if err != nil { - return nil, err - } - cols, rows := padW/stride, padH/stride - for row := 0; row < rows; row++ { - for col := 0; col < cols; col++ { - idx := row*cols + col - score := float32(math.Sqrt(float64(clampUnit(cls[idx]) * clampUnit(obj[idx])))) - if score < faceScoreThreshold { - continue - } - cx := (float32(col) + box[idx*4]) * float32(stride) - cy := (float32(row) + box[idx*4+1]) * float32(stride) - w := float32(math.Exp(float64(box[idx*4+2]))) * float32(stride) - h := float32(math.Exp(float64(box[idx*4+3]))) * float32(stride) - rect := image.Rect(int(cx-w/2), int(cy-h/2), int(cx+w/2), int(cy+h/2)).Intersect(inferBounds) - if rect.Dx() > 0 && rect.Dy() > 0 { - dets = append(dets, faceDetection{rect: rect, score: score}) - } - } - } - } - - boxes := make([]image.Rectangle, 0, len(dets)) - for _, d := range suppressOverlaps(dets, faceNMSIoU) { - rect := d.rect - if scale != 1 { - rect = image.Rect( - int(float64(rect.Min.X)/scale), int(float64(rect.Min.Y)/scale), - int(float64(rect.Max.X)/scale), int(float64(rect.Max.Y)/scale), - ).Intersect(image.Rect(0, 0, bounds.Dx(), bounds.Dy())) - } - if rect.Dx() > 0 && rect.Dy() > 0 { - boxes = append(boxes, rect.Add(bounds.Min)) - } - } - return boxes, nil -} - -func clampUnit(v float32) float32 { - if v < 0 { - return 0 - } - if v > 1 { - return 1 - } - return v -} - -// suppressOverlaps 按分数从高到低做 NMS,丢掉与已保留框 IoU 超过阈值的框。 -func suppressOverlaps(dets []faceDetection, iouThreshold float64) []faceDetection { - sort.SliceStable(dets, func(i, j int) bool { return dets[i].score > dets[j].score }) - kept := make([]faceDetection, 0, len(dets)) - for _, d := range dets { - overlaps := false - for _, k := range kept { - if rectIoU(d.rect, k.rect) > iouThreshold { - overlaps = true - break - } - } - if !overlaps { - kept = append(kept, d) - } - } - return kept -} - -func rectIoU(a, b image.Rectangle) float64 { - inter := a.Intersect(b) - if inter.Empty() { - return 0 - } - interArea := float64(inter.Dx() * inter.Dy()) - return interArea / (float64(a.Dx()*a.Dy()+b.Dx()*b.Dy()) - interArea) -} - -// applyFaceNotice 给图中每张人脸盖一层黑丝网眼,返回 PNG。 -// 没检出人脸(或不是可解码的图片)时返回 ErrNoFaceDetected,调用方应继续用原图; -// 其它错误说明检测器不可用,调用方不应把未打码的图上传。 -func applyFaceNotice(b []byte) ([]byte, error) { - src, _, err := image.Decode(bytes.NewReader(b)) - if err != nil { - return nil, ErrNoFaceDetected - } - boxes, err := detectFaces(src) - if err != nil { - return nil, err - } - if len(boxes) == 0 { - return nil, ErrNoFaceDetected - } - - w, h := src.Bounds().Dx(), src.Bounds().Dy() - dst := image.NewRGBA(image.Rect(0, 0, w, h)) - draw.Draw(dst, dst.Bounds(), src, src.Bounds().Min, draw.Src) - - offset := image.Pt(-src.Bounds().Min.X, -src.Bounds().Min.Y) - for _, box := range boxes { - r := box.Add(offset).Intersect(dst.Bounds()) - // 网眼只盖脸中央,留出边缘的发型与轮廓。 - r = image.Rect(r.Min.X+r.Dx()/8, r.Min.Y+r.Dy()/8, r.Max.X-r.Dx()/8, r.Max.Y-r.Dy()/8) - drawStocking(dst, r) - } - - var out bytes.Buffer - if err := png.Encode(&out, dst); err != nil { - return nil, err - } - return out.Bytes(), nil -} - -// drawStocking 在给定区域上盖一层黑丝网眼:细密的深色网格线,遮住五官细节但保留轮廓。 -func drawStocking(dst *image.RGBA, r image.Rectangle) { - r = r.Intersect(dst.Bounds()) - step := r.Dx() / 24 - if step < 3 { - step = 3 - } - line := step / 2 - if line < 1 { - line = 1 - } - for y := r.Min.Y; y < r.Max.Y; y++ { - for x := r.Min.X; x < r.Max.X; x++ { - if (x-r.Min.X)%step >= line && (y-r.Min.Y)%step >= line { - continue - } - c := dst.RGBAAt(x, y) - c.R = uint8(uint32(c.R) * 10 / 100) - c.G = uint8(uint32(c.G) * 10 / 100) - c.B = uint8(uint32(c.B) * 10 / 100) - dst.SetRGBA(x, y, c) - } - } -} - -// faceMaskPromptNote 附加到 Seedance 提示词后:告知模型参考图脸部的网格线只是打码, -// 需要忽略网格本身并完整还原面部细节。 -const faceMaskPromptNote = "参考图人物脸部覆盖的细密网格线仅为隐私打码,不是人物本身的特征:生成时请完全忽略这些网格线,不要在画面中出现任何网格、方格、纹理或遮挡;请依据参考图的五官轮廓完整还原人物真实面孔,保留妆容、眉眼、发型、发饰、耳饰、头冠等一切面部与头部装饰细节,人物面部必须清晰完整、前后镜头保持一致。" diff --git a/backend/internal/service/tokens.go b/backend/internal/service/tokens.go index 72e466e..4b81640 100644 --- a/backend/internal/service/tokens.go +++ b/backend/internal/service/tokens.go @@ -964,30 +964,13 @@ func (s *TokenService) checkPendingGrok(tokenID, ssoToken string) { } else if strings.TrimSpace(email) != "" { _, _ = s.tokens.Update(ctx, "grok", tokenID, map[string]any{"account_email": strings.TrimSpace(email)}) } - data, err := s.grok.FetchCreditsBalance(ctx, ssoToken) - if err != nil { - if errors.Is(err, grok.ErrAuth) { - s.finishPending(ctx, "grok", tokenID, "disabled", true, nil) - return - } - s.finishPending(ctx, "grok", tokenID, "active", false, nil) - return - } - quotaMeta := map[string]any{} - if rem, ok := data["remaining"].(int); ok { - quotaMeta["cached_quota_remaining"] = rem - quotaMeta["cached_quota_at"] = int(time.Now().Unix()) - } - if used, ok := data["used"].(int); ok { - quotaMeta["cached_quota_used"] = used - } - if total, ok := data["total"].(int); ok { - quotaMeta["cached_quota_total"] = total - } - if reset := strings.TrimSpace(stringValue(data["reset_after"])); reset != "" { - _, _ = s.tokens.Update(ctx, "grok", tokenID, map[string]any{"cached_quota_reset_after": reset}) - } - s.finishPending(ctx, "grok", tokenID, "active", false, quotaMeta) + // Console 没有额度接口,所以额度不查上游:导入即写死 图 5 / 视频 2,生成时各扣各的, + // 两个都归零就判死;没有恢复时间。 + s.finishPending(ctx, "grok", tokenID, "active", false, map[string]any{ + repo.GrokImageQuotaKey: repo.GrokImageQuota, + repo.GrokVideoQuotaKey: repo.GrokVideoQuota, + "cached_quota_at": int(time.Now().Unix()), + }) } // RefreshGrokLiveness re-validates every live grok account each maintenance tick. @@ -1039,28 +1022,15 @@ func (s *TokenService) RefreshGrokLiveness(ctx context.Context) { _, _ = s.tokens.Update(ctx, "grok", it.ID, map[string]any{"status": "disabled", "dead": true}) continue } - data, derr := s.grok.FetchCreditsBalance(ctx, it.Value) - if derr != nil { - // Same policy as the subscription probe: a credits-balance 401/403 is - // transient, never a reason to kill a live account. Skip and retry. + // 额度不查上游(Console 无额度接口):只给老号补齐写死的 图 5 / 视频 2。 + if _, ok := jsonMapInt(it.Meta, repo.GrokImageQuotaKey); ok { continue } meta := cloneJSONMap(it.Meta) + meta[repo.GrokImageQuotaKey] = repo.GrokImageQuota + meta[repo.GrokVideoQuotaKey] = repo.GrokVideoQuota meta["cached_quota_at"] = int(time.Now().Unix()) - if rem, ok := data["remaining"].(int); ok { - meta["cached_quota_remaining"] = rem - } - if used, ok := data["used"].(int); ok { - meta["cached_quota_used"] = used - } - if total, ok := data["total"].(int); ok { - meta["cached_quota_total"] = total - } - patch := map[string]any{"meta": meta} - if reset := strings.TrimSpace(stringValue(data["reset_after"])); reset != "" { - patch["cached_quota_reset_after"] = reset - } - _, _ = s.tokens.Update(ctx, "grok", it.ID, patch) + _, _ = s.tokens.Update(ctx, "grok", it.ID, map[string]any{"meta": meta}) } } @@ -1567,53 +1537,28 @@ func (s *TokenService) Quota(ctx context.Context, pool, id string) (map[string]a "error": data["error"], }, nil } - if poolToType(item.Pool) == "grok" && s.grok != nil { - data, err := s.grok.FetchCreditsBalance(ctx, item.Value) - if err != nil { - if errors.Is(err, grok.ErrAuth) { - _, _ = s.tokens.Update(ctx, item.Pool, item.ID, map[string]any{ - "status": "disabled", - "dead": true, - "fails": gorm.Expr("fails + 1"), - }) - } - return nil, err + if poolToType(item.Pool) == "grok" { + // 本地写死的额度(图 5 / 视频 2),没有上游接口可查,所以刷新只是回读本地计数。 + images, ok := jsonMapInt(item.Meta, repo.GrokImageQuotaKey) + if !ok { + images = repo.GrokImageQuota } - patch := map[string]any{} - meta := cloneJSONMap(item.Meta) - meta["cached_quota_at"] = int(time.Now().Unix()) - if remaining, ok := data["remaining"].(int); ok { - // Refresh only updates the displayed credit number; never flips status. - // Out-of-credits is judged at generation time (dead/401, no renewal). - meta["cached_quota_remaining"] = remaining - } - if used, ok := data["used"].(int); ok { - meta["cached_quota_used"] = used - } - if total, ok := data["total"].(int); ok { - meta["cached_quota_total"] = total - } - patch["meta"] = meta - // Recovery time is the credits' weekly reset (when the grant refills) — - // purely informational, NOT a death deadline (liveness is judged by the - // subscriptions sweep / real 401s), so it's safe to refresh every time. - if reset := strings.TrimSpace(stringValue(data["reset_after"])); reset != "" { - patch["cached_quota_reset_after"] = reset - item.CachedQuotaResetAfter = reset - } - if updated, updateErr := s.tokens.Update(ctx, item.Pool, item.ID, patch); updateErr == nil { - item = updated + videos, ok := jsonMapInt(item.Meta, repo.GrokVideoQuotaKey) + if !ok { + videos = repo.GrokVideoQuota } return map[string]any{ "supported": true, - "remaining": data["remaining"], - "used": data["used"], - "total": data["total"], - "reset_after": emptyToNil(item.CachedQuotaResetAfter), - "quota_cached_at": meta["cached_quota_at"], - "unchanged": false, - "unknown": boolValueWithDefault(data["unknown"], false), - "error": data["error"], + "remaining": images + videos, + "image_remaining": images, + "video_remaining": videos, + "used": nil, + "total": nil, + "reset_after": nil, + "quota_cached_at": item.Meta["cached_quota_at"], + "unchanged": true, + "unknown": false, + "error": nil, }, nil } remaining, hasRemaining := jsonMapInt(item.Meta, "cached_quota_remaining") @@ -1734,6 +1679,19 @@ func accountRow(item model.TokenAccount, inFlight int64) map[string]any { if item.Meta != nil { teamID = strings.TrimSpace(stringValue(item.Meta["team_id"])) } + // grok 额度是本地写死的两个计数(图 / 视频),前台单独一列展示成 "5/2"。 + var grokImages, grokVideos any + if typeLabel == "grok" { + images, ok := jsonMapInt(item.Meta, repo.GrokImageQuotaKey) + if !ok { + images = repo.GrokImageQuota + } + videos, ok := jsonMapInt(item.Meta, repo.GrokVideoQuotaKey) + if !ok { + videos = repo.GrokVideoQuota + } + grokImages, grokVideos = images, videos + } hasQuota := typeLabel == "openai" || typeLabel == "adobe" || typeLabel == "runway" || typeLabel == "leonardo" || typeLabel == "krea" || typeLabel == "imagine" || typeLabel == "grok" return map[string]any{ "id": item.ID, @@ -1742,6 +1700,8 @@ func accountRow(item model.TokenAccount, inFlight int64) map[string]any { "email": emptyToNil(email), "team_id": emptyToNil(teamID), "remaining": valueOrNil(hasQuota && hasRemaining, remaining), + "image_remaining": grokImages, + "video_remaining": grokVideos, "reset_after": emptyToNil(item.CachedQuotaResetAfter), "quota_cached_at": valueOrNil(quotaAt != 0, quotaAt), "created_at": unixOrNil(item.AddedAt), diff --git a/backend/internal/service/v1.go b/backend/internal/service/v1.go index feb33e3..e087b58 100644 --- a/backend/internal/service/v1.go +++ b/backend/internal/service/v1.go @@ -568,6 +568,24 @@ func (s *V1Service) prepareImageExecution(ctx context.Context, principal *APIPri } imageBytes = b upstreamURL = u + case "grok": + b, u, execErr := s.generateGrokImage(genCtx, eventID, modelItem, in, aspectRatio, resolution, noStore) + if execErr != nil { + _ = s.refundIfNeeded(ctx, principal, eventID, price) + _ = s.events.UpdateStatus(ctx, eventID, "failed", execErr.Error(), 0) + switch { + case errors.Is(execErr, grok.ErrAuth): + return nil, ErrProviderAuth + case errors.Is(execErr, grok.ErrQuotaExhausted): + return nil, ErrProviderQuota + case errors.Is(execErr, grok.ErrTemporaryUpstream): + return nil, ErrProviderTemporary + default: + return nil, fmt.Errorf("%w: %v", ErrProviderExecution, execErr) + } + } + imageBytes = b + upstreamURL = u case "runway": b, u, execErr := s.generateRunwayImage(genCtx, eventID, modelItem, in, aspectRatio, resolution, noStore) if execErr != nil { @@ -718,7 +736,7 @@ func (s *V1Service) prepareVideoExecution(ctx context.Context, principal *APIPri return nil, err } } - genCtx, cancel := context.WithTimeout(ctx, 12*time.Minute) + genCtx, cancel := context.WithTimeout(ctx, videoGenBudget) defer cancel() // Per-user concurrency gate (画图台 + API key combined); admin tests exempt. @@ -920,7 +938,7 @@ func (s *V1Service) StartVideoJob(ctx context.Context, principal *APIPrincipal, // runVideoJob renders the clip in the background, capturing the upstream URL // (downloadResult=false → no bytes, no RustFS) and storing it on the event. func (s *V1Service) runVideoJob(ctx context.Context, principal *APIPrincipal, in V1VideoRequest, modelItem *model.ModelConfig, eventID, aspectRatio, resolution, duration string, price float64) { - genCtx, cancel := context.WithTimeout(ctx, 12*time.Minute) + genCtx, cancel := context.WithTimeout(ctx, videoGenBudget) defer cancel() s.inflight.Add(eventID, cancel) defer s.inflight.Done(eventID) @@ -1487,6 +1505,10 @@ func (s *V1Service) finishUnimplementedEvent(ctx context.Context, eventID string return s.events.UpdateStatus(ctx, eventID, "failed", "generation executor not implemented yet", 0) } +// videoGenBudget caps one video render end-to-end (submit + poll + download). +// 上游慢的时候(seedance 长镜头)12 分钟不够,统一给 20 分钟。 +const videoGenBudget = 20 * time.Minute + // grokConcurrencyPerAccount is how many simultaneous generations one grok account // may run (grok tolerates 10, unlike the 1-per-account default elsewhere). const grokConcurrencyPerAccount = 10 @@ -1801,26 +1823,7 @@ func (s *V1Service) generateAdobeVideo(ctx context.Context, eventID string, mode imgRefs = append(imgRefs, r) } } - // Seedance 参考图先做人脸打码再上传;检不出人脸就沿用原图, - // 检测器不可用则直接报错,避免把未打码的人脸传给上游。 prompt := in.Prompt - if isSeedanceModel(modelItem.ID) { - faceMasked := false - for i, r := range imgRefs { - marked, mErr := applyFaceNotice(r) - if errors.Is(mErr, ErrNoFaceDetected) { - continue - } - if mErr != nil { - return nil, "", fmt.Errorf("face mask: %w", mErr) - } - imgRefs[i] = marked - faceMasked = true - } - if faceMasked { - prompt = strings.TrimSpace(prompt + "\n\n" + faceMaskPromptNote) - } - } engine, upstreamModel := resolveAdobeVideoEngine(modelItem.ID) referenceMode := defaultString(strings.TrimSpace(modelItem.ReferenceMode), "frame") @@ -2279,11 +2282,11 @@ func upstreamQuality(resolution string) string { return "" } -// generateGrokVideo runs grok's imagine video pipeline across the grok pool. -// Mirrors the runway policy: no pre-deduct, skip accounts known out of credits -// (cached remaining <= 0), and treat an out-of-credits / auth failure as a dead -// account (the grok sso can't be renewed — 失效就失效). Text-to-video only for -// now (grok reference-image upload isn't wired yet). +// generateGrokVideo runs grok's imagine video pipeline across the grok pool, +// via Grok Console (console.x.ai) — the same sso account, but the clean JSON +// media API instead of the anti-bot gated grok.com website flow. +// 额度是本地写死的(每号 图 5 / 视频 2):视频计数归零的号不再调度,成功一次扣一个, +// 图/视频都归零直接判死;auth / 额度错误同样判死换号(grok sso 不续期,失效就失效)。 func (s *V1Service) generateGrokVideo(ctx context.Context, eventID string, modelItem *model.ModelConfig, in V1VideoRequest, aspectRatio, resolution string, durationSeconds int, downloadResult bool) ([]byte, string, error) { if s.grok == nil { return nil, "", errors.New("grok client not configured") @@ -2309,7 +2312,7 @@ func (s *V1Service) generateGrokVideo(ctx context.Context, eventID string, model if item.Status != "active" || item.Dead || strings.TrimSpace(item.Value) == "" { continue } - if rem, ok := jsonMapInt(item.Meta, "cached_quota_remaining"); ok && rem <= 0 { + if rem, ok := jsonMapInt(item.Meta, repo.GrokVideoQuotaKey); ok && rem <= 0 { continue } active = append(active, item) @@ -2338,13 +2341,15 @@ func (s *V1Service) generateGrokVideo(ctx context.Context, eventID string, model defer s.acctRelease(ctx, token.ID, eventID) _ = s.events.SetAccount(ctx, eventID, token.ID, token.AccountEmail) _ = s.tokens.TouchLastUsed(ctx, token.ID) - d, meta, genErr := s.grok.GenerateVideo(ctx, token.Value, in.Prompt, aspectRatio, res, durationSeconds, frames, downloadResult) + d, meta, genErr := s.grok.GenerateConsoleVideo(ctx, token.Value, in.Prompt, aspectRatio, res, durationSeconds, frames, downloadResult) if genErr == nil { _, _ = s.tokens.Update(ctx, "grok", token.ID, map[string]any{ "last_used_at": time.Now(), "success_total": gorm.Expr("success_total + 1"), "fails": 0, }) + // 本地额度各扣各的;图/视频都归零时账号直接判死。 + _ = s.tokens.ConsumeGrokQuota(ctx, token.ID, "video") data = d videoURL = strings.TrimSpace(stringValue(meta["video_url"])) return true, false @@ -2378,6 +2383,102 @@ func (s *V1Service) generateGrokVideo(ctx context.Context, eventID string, model return nil, "", lastErr } +// generateGrokImage runs Grok Console's image pipeline (grok-imagine-image) +// across the grok pool. 额度策略同视频路径,只是扣的是图片那份计数。带参考图时 +// (最多 3 张,内联在请求里)自动走 /images/edits 的 quality 上游 — 图生图。 +func (s *V1Service) generateGrokImage(ctx context.Context, eventID string, modelItem *model.ModelConfig, in V1ImageRequest, aspectRatio, resolution string, noStore bool) ([]byte, string, error) { + // API-key (noStore) requests skip the download and return the upstream URL. + urlOnly := noStore + if s.grok == nil { + return nil, "", errors.New("grok client not configured") + } + if s.settings != nil { + if proxy, err := s.settings.GetValue(ctx, "proxy.url"); err == nil { + s.grok.SetProxy(proxy) + } + } + + refs, err := decodeReferenceImages(in.ReferenceImages, max(1, modelItem.MaxReferenceImages)) + if err != nil { + return nil, "", err + } + + items, err := s.tokens.ListByPool(ctx, "grok") + if err != nil { + return nil, "", err + } + var active []model.TokenAccount + for _, item := range items { + if item.Status != "active" || item.Dead || strings.TrimSpace(item.Value) == "" { + continue + } + if rem, ok := jsonMapInt(item.Meta, repo.GrokImageQuotaKey); ok && rem <= 0 { + continue + } + active = append(active, item) + } + active = pinTestAccount(items, active, in.AccountID) + if len(active) == 0 { + return nil, "", ErrNoProviderAccount + } + s.rotateRoundRobin("grok", active) + + var lastErr error + busy := 0 + for _, token := range active { + // Per-account concurrency gate. + if !s.acctAcquire(ctx, token.ID, eventID, accountConcurrency(token)) { + busy++ + continue + } + var data []byte + var artURL string + done, failover := func() (bool, bool) { + defer s.acctRelease(ctx, token.ID, eventID) + _ = s.events.SetAccount(ctx, eventID, token.ID, token.AccountEmail) + _ = s.tokens.TouchLastUsed(ctx, token.ID) + d, meta, genErr := s.grok.GenerateConsoleImage(ctx, token.Value, in.Prompt, aspectRatio, resolution, refs, urlOnly) + if genErr == nil { + _, _ = s.tokens.Update(ctx, "grok", token.ID, map[string]any{ + "last_used_at": time.Now(), + "success_total": gorm.Expr("success_total + 1"), + "fails": 0, + }) + // 本地额度各扣各的;图/视频都归零时账号直接判死。 + _ = s.tokens.ConsumeGrokQuota(ctx, token.ID, "image") + data = d + artURL = strings.TrimSpace(stringValue(meta["image_url"])) + return true, false + } + lastErr = genErr + switch { + case errors.Is(genErr, grok.ErrAuth), errors.Is(genErr, grok.ErrQuotaExhausted): + // 失效 / 额度没了 → 当 401 判死(不续期),换号。 + s.markTokenFailure(ctx, "grok", token, "image", true, false) + return false, true + case errors.Is(genErr, grok.ErrTemporaryUpstream): + return false, true + default: + return false, false + } + }() + if done { + return data, artURL, nil + } + if failover { + continue + } + return nil, "", lastErr + } + if lastErr == nil { + if busy > 0 { + return nil, "", ErrConcurrencyFull + } + lastErr = ErrProviderExecution + } + return nil, "", lastErr +} + // generateRunwayImage runs the Runway gemini image pipeline (Nano Banana Pro or // Nano Banana 2, selected by the model id) across the runway pool. Unlike the // video path it does NOT pre-deduct credits: it simply round-robins the pool and diff --git a/frontend/src/views/AccountsView.vue b/frontend/src/views/AccountsView.vue index af5c0fb..d06ccb5 100644 --- a/frontend/src/views/AccountsView.vue +++ b/frontend/src/views/AccountsView.vue @@ -259,6 +259,8 @@ function applyQuota(row, result) { if (result.unknown && result.remaining === null) { row.remaining = null; row._unknown = true; return } row._unknown = false row.remaining = result.remaining + if (result.image_remaining !== undefined) row.image_remaining = result.image_remaining + if (result.video_remaining !== undefined) row.video_remaining = result.video_remaining row.reset_after = result.reset_after // 会员身份随额度一起回写:改过会员/掉了会员的号,查一次额度徽章就跟着更新。 if (result.plan !== undefined) row.plan = result.plan @@ -391,7 +393,7 @@ onMounted(() => { loadAccounts(); loadModelList() }) - +

@@ -480,7 +482,7 @@ onMounted(() => { loadAccounts(); loadModelList() }) 子号 母号 + :title="'会员号 (' + a.plan + ')'">会员号 普号 { loadAccounts(); loadModelList() }) - + + {{ a.image_remaining }} + / + {{ a.video_remaining }} + + {{ a.remaining }}{{ a.type === 'grok' ? '%' : '' }} + :class="a.remaining > 0 ? 'text-emerald-300' : 'text-rose-300'">{{ a.remaining }} diff --git a/frontend/src/views/PlaygroundView.vue b/frontend/src/views/PlaygroundView.vue index 19a11c6..a43067c 100644 --- a/frontend/src/views/PlaygroundView.vue +++ b/frontend/src/views/PlaygroundView.vue @@ -556,14 +556,23 @@ async function fireOne() { payload.reference_images = refs.filter(Boolean) } + // 同一个任务带固定的 Idempotency-Key:长请求期间连接被重置、浏览器/网关透明 + // 重发 POST 时,后端不会再生成一次、再扣一次积分。 + const opts = jsonBody('POST', payload) + opts.headers['Idempotency-Key'] = task.id + '-' + task.ts + try { - const r = await api('/generate', jsonBody('POST', payload)) + const r = await api('/generate', opts) if (r.ok && r.data?.url) { task.status = 'done' task.url = r.data.url task.elapsed_ms = r.data.elapsed_ms task.charged = r.data.charged ?? chargedPrice if (auth.user && r.data.credits != null) auth.user.credits = r.data.credits + } else if (r.status === 409 && String(r.data?.detail || '').includes('重复提交')) { + // 这次响应来自被透明重发的那个 POST —— 原任务还在生成,保持 running, + // loadHistory() 在结果落库后认领它。 + task.status = 'running' } else if (GATEWAY_TIMEOUT.has(r.status)) { // CDN/代理回源超时(如 EdgeOne 524)—— 后端仍在生成。保持 running, // loadHistory() 在结果落库后认领它。