{{ asset.tags.join(' · ') }}
{{ cnMaterialState(asset) }}
{{ asset.error.message }}
{{ ssoPortal ? $t('Video tools use your JojoKey account. After you sign in, you will return here automatically.') : $t('Sign in with email to start creating') }}
{{ $t('Describe your idea and let AI generate a video') }}
{{ $t('Your generation task history. Select a video to play it.') }}
{{ $t('No tasks yet. Create one to get started.') }}
{{ $t('Assets uploaded with the current API key are visible only to you.') }}
{{ $t('Generate an image asset from text. When complete, it appears in My assets and can be used as a video reference image.') }}
image {{ $t('field.') }}
optimize_prompt_options.mode {{ $t('to') }} standard{{ $t(', which usually improves interpretation but may add a few seconds.') }}
{{ $t('If you already have an HTTPS image URL, pre-register it to get asset://. This is useful for reusable portraits, references, and batch tasks; it is neither official identity verification nor a review bypass.') }}
{{ $t('No assets yet. Upload a reference image, video, or audio file first.') }}
{{ $t('Manage your domestic materials and reuse them in video creation.') }}
{{ $t('JojoKey Video CN uses independent APIs, CNY balance, and task ledger. Only test accounts enabled by an administrator can use it.') }}
{{ asset.tags.join(' · ') }}
{{ cnMaterialState(asset) }}
{{ asset.error.message }}
{{ $t('Registration fee') }} ¥{{ cnAssetConfig?.registration_price.customer_cny }}
{{ $t('Images are saved automatically. Register separately to use them in video creation.') }}
{{ cnImageState(task) }}
{{ task.request.model }} · ¥{{ task.held_cny }}
{{ $t('JojoKey Video CN Beta is for test customers who need domestic Seedance / Jimeng video capabilities. It uses independent CNY balance, CN task ledger, and CN asset registration. It does not mix with the overseas USD ledger or write CN tasks into the overseas Seedance workspace.') }}
{{ $t('The administrator enables JojoKey Video CN Beta for the account and tops up the CNY balance. The user side then shows ¥ balance, CN tasks, and CN asset registration.') }}
{{ $t('Use stable, publicly reachable image and video asset URLs to reduce fetch timeouts.') }}
{{ $t('In Create CN video, fill in the prompt, mode, resolution, ratio, and duration. The system pre-authorizes CNY first.') }}
{{ $t('After submission, the task appears in My tasks. Click a task to view details, play the result, and copy the video or last-frame link. Failed tasks show a customer-safe error message.') }}
{{ $t('CN tasks settle against the CNY ledger. Contact an administrator to top up when balance is insufficient. Overseas USD balance cannot offset CN tasks.') }}
| {{ $t('Asset type') }} | {{ $t('Current recommendation') }} | {{ $t('Notes') }} |
|---|---|---|
| {{ $t('Image asset') }} | {{ $t('For people, products, and scene references. JPG / PNG / WebP are recommended.') }} | {{ $t('Prefer domestic HTTPS URLs. Register faces and complex assets before using them for generation.') }} |
| {{ $t('Video asset') }} | {{ $t('For motion, camera, pose, or style references. The frontend supports MP4 / MOV.') }} | {{ $t('Use short clips from stable, publicly reachable URLs to reduce fetch timeouts.') }} |
| {{ $t('Audio asset') }} | {{ $t('Register MP3 or WAV from a public HTTPS URL for reference_audio.') }} | {{ $t('Audio duration must be between 1.8 and 30.2 seconds. Local audio upload is not supported.') }} |
{{ $t('Review the estimated pre-authorization before submission. The final charge uses returned tokens and the customer price snapshot locked when the task was submitted; later price changes do not rewrite the task. Failed tasks release the held amount.') }}
{{ $t('Start with a small CNY balance for test users and verify the asset registration -> create video -> my tasks -> reconciliation loop. Increase concurrency and duration only after asset sources are stable.') }}
{{ $t('Download the Chinese CN API documentation or copy its public Markdown URL for coding agents.') }}
{{ $t('This page only describes the domestic JojoKey Video CN Beta APIs. Overseas Seedance still uses overseas APIs such as /v1/videos and /v1/uploads. The two systems do not share balances, assets, or tasks.') }}
{{ cnApiHost() }}. {{ $t('All requests use the Authorization header.') }}
| {{ $t('Endpoint') }} | {{ $t('Purpose') }} |
|---|---|
| GET /v1/video-cn/me | {{ $t('View enablement status, CNY balance, and held amount.') }} |
| GET /v1/video-cn/models | {{ $t('View the domestic model catalog, capabilities, resolutions, and current pre-authorization prices.') }} |
| POST /v1/video-cn/price-estimate | {{ $t('Estimate the current CNY pre-authorization for a model and input type.') }} |
| POST /v1/video-cn/videos | {{ $t('Submit a CN video task.') }} |
| GET /v1/video-cn/videos | {{ $t('View the current account CN task list.') }} |
| GET /v1/video-cn/videos/{id} | {{ $t('Query one task status and trigger refresh.') }} |
| POST /v1/video-cn/asset-groups | {{ $t('Optionally create an explicit CN asset group.') }} |
| GET /v1/video-cn/asset-groups | {{ $t('View the current account CN asset groups.') }} |
| POST /v1/video-cn/assets | {{ $t('Save to private domestic storage, then optionally register by URL. Requires Idempotency-Key.') }} |
| POST /v1/video-cn/assets/from-url | {{ $t('Register a public URL in the domestic native asset library.') }} |
| GET /v1/video-cn/assets | {{ $t('View the current account CN asset list.') }} |
| GET /v1/video-cn/assets/{asset_id} | {{ $t('Query the latest status of one CN asset.') }} |
{{ $t('Use the CN Relay API Key shown on the account page. The request header format is:') }}
{{ $t('For the same business request, reuse the same Idempotency-Key after a timeout. Use a new key only for a new video task. Without this header, the task remains compatible but a timeout retry may create and charge for a duplicate task.') }}
{{ $t('For Seedance 2.5, send model: video-cn-2.5. Never put video-cn-2.5 in mode. mode is only the legacy Seedance 2.0 shorthand fast, pro, or mini. If a gateway, SDK, or channel adapter rewrites model into mode, fix that mapping before submitting.') }}
| {{ $t('Model') }} | {{ $t('How to select') }} | {{ $t('Resolution') }} |
|---|---|---|
| video-cn-2.0-pro / {{ $t('Seedance 2.0 Pro') }} | model: "video-cn-2.0-pro" {{ $t('Legacy mode: pro') }} | 480p / 720p / 1080p / 4K |
| video-cn-2.0-fast / {{ $t('Seedance 2.0 Fast') }} | model: "video-cn-2.0-fast" {{ $t('Legacy mode: fast') }} | 480p / 720p |
| video-cn-2.0-mini / {{ $t('Seedance 2.0 Mini') }} | model: "video-cn-2.0-mini" {{ $t('Legacy mode: mini') }} | 480p / 720p |
| video-cn-2.5 / {{ $t('Seedance 2.5') }} | model: "video-cn-2.5" {{ $t('Do not use mode') }} | 480p / 720p / 1080p |
{{ $t('CN assets use a dedicated domestic asset group and never share the overseas asset library. The current live upstream accepts HTTPS URL registration only; direct local Data upload is unavailable. Each successful registration costs ¥0.10. Use the returned asset:// URI only after sync_status reaches 2.') }}
{{ $t('Creating an asset group explicitly is optional. Existing clients can keep omitting group_id: the service automatically creates a group when none exists or reuses the latest active group. The public group_id is a JojoKey ID, not an upstream GroupId.') }}
{{ $t('First/last-frame animation uses first_frame and last_frame, suitable for specifying the starting and ending frames.') }}
{{ $t('Reference video uses reference_video and is suitable for referencing motion rhythm, camera movement, or pose changes. Image references still use reference_image.') }}
| {{ $t('Parameter') }} | {{ $t('Description') }} |
|---|---|
| prompt | {{ $t('Prompt shorthand. If content[] is provided, prompt can be omitted.') }} |
| content[] | {{ $t('Full content array, supporting references such as text, image_url, and video_url.') }} |
| images / videos | {{ $t('Shorthand arrays for lightweight integration. Use content[] when exact roles are required.') }} |
| audios | {{ $t('Reserved field. Audio references are not available during Beta.') }} |
| model | {{ $t('Public model ID. Seedance 2.5 must use model: video-cn-2.5.') }} |
| mode | {{ $t('Legacy Seedance 2.0 shorthand only: fast, pro, or mini. Do not put video-cn-2.5 in mode.') }} |
| resolution | {{ $t('480p, 720p, 1080p, or 4k. Higher resolution usually increases the estimate.') }} fast / mini: 480p / 720p; pro: 480p / 720p / 1080p / 4K. |
| ratio | {{ $t('Common values are 9:16, 16:9, 1:1, and 3:4.') }} |
| duration | {{ $t('Usually 4-15 seconds.') }} |
| generate_audio | {{ $t('Whether to attempt audio generation. false cannot guarantee forced silence. If no music is required, state that in the prompt.') }} |
| return_last_frame | {{ $t('Requests a last-frame image URL. Task details show last_frame_url when available.') }} |
| seed | {{ $t('Seedance 2.0 supports seed. Seedance 2.5 does not support seed and returns unsupported_seed when it is provided.') }} |
| {{ $t('Field') }} | {{ $t('Description') }} |
|---|---|
| asset_type=1 | {{ $t('Image asset. Supports JPG / PNG / WebP and is used for first_frame, last_frame, and reference_image.') }} |
| asset_type=2 | {{ $t('Video asset. Supports MP4 / MOV and is used for reference_video. Short clips and domestic URLs are recommended.') }} |
| asset_type=3 | {{ $t('Audio asset. Register a public HTTPS URL and use the returned asset:// URI as reference_audio.') }} |
| group_id | {{ $t('Optional local asset group ID. Omit it to preserve automatic group creation or reuse.') }} |
| asset_url | {{ $t('Returned asset:// URI. Put it into content[] for video generation; do not write it into the prompt body.') }} |
| sync_status=2 | {{ $t('Treat as synced and usable. If it is not 2, query asset details first or retry later.') }} |
| source_url | {{ $t('The original HTTPS public URL used for domestic upstream registration. Direct local upload is currently unavailable and never falls back to the overseas library.') }} |
{{ $t('The tokens and amounts in this example come from a verified Seedance 2.0 Mini 480p 4-second task without reference media. Query models and price-estimate before submission; after submission, the task billing snapshot is authoritative and later price changes do not rewrite it.') }}
| id | {{ $t('JojoKey domestic task ID. Use it to query task details.') }} |
| upstream_task_id | {{ $t('Upstream task ID. Create, list, and detail responses include it only when a real upstream ID is available; it may be absent while submission recovery is pending.') }} |
{{ $t('Task statuses include queued, running, succeeded, and failed. Poll GET /v1/video-cn/videos/{id} every 5-8 seconds; do not send high-frequency requests every second.') }}
| {{ $t('Field') }} | {{ $t('Description') }} |
|---|---|
| held_cny | {{ $t('CNY amount held at submission to ensure sufficient balance. It is not necessarily the final charge.') }} |
| estimated_cost_cny | {{ $t('Customer-side price estimated from current parameters, for reference before and after submission.') }} |
| actual_cost_cny | {{ $t('Customer-side actual settlement after task completion. Failed tasks are usually 0.') }} |
| usage | {{ $t('usage identifies the exact token field and billable token count used for settlement.') }} |
| billing | {{ $t('billing contains the customer-side reservation, final charge, released amount, effective price, and price version. It does not expose supplier procurement costs.') }} |
| billing.status | {{ $t('billing.status is reserved before final settlement, settled after a successful charge, and refunded after a failed or cancelled task.') }} |
| output | {{ $t('output describes delivered video metadata. metadata_source=provider means the values come from stored provider evidence; request_fallback means request parameters were used.') }} |
| {{ $t('Error code') }} | {{ $t('Meaning and handling') }} |
|---|---|
| video_cn_beta_not_enabled | {{ $t('The current account is not enabled for CN Beta. Contact an administrator to enable it.') }} |
| insufficient_video_cn_balance | {{ $t('CNY balance is insufficient. Top up and retry.') }} |
| video_cn_professional_super_resolution_disabled | {{ $t('professional super-resolution is not open yet.') }} |
| invalid_video_cn_audio_asset_url | {{ $t('Audio assets require a public HTTPS URL.') }} |
| video_cn_audio_upload_requires_url | {{ $t('Local audio upload is not supported. Register a public HTTPS URL instead.') }} |
| invalid_video_cn_audio_duration | {{ $t('Reference audio duration must be between 1.8 and 30.2 seconds.') }} |
| video_cn_asset_rate_limited | {{ $t('The domestic asset service is rate limited. Retry later.') }} |
| invalid_video_cn_request | {{ $t('The request body is invalid, usually due to content[] structure, role, or parameter range.') }} |
| invalid_video_cn_asset_url | {{ $t('The asset URL is not an http/https public URL.') }} |
| invalid_video_cn_upload_type | {{ $t('The local upload file type is not supported. Only image and video assets are open currently.') }} |
| video_cn_asset_type_mismatch | {{ $t('The uploaded file type does not match asset_type.') }} |
| task_failed | {{ $t('The task failed. Check the input assets and prompt, then retry or contact support.') }} |
{{ $t('Under the same account, the CN line uses independent CNY balance and CN task ledger. The frontend currently shows the CN entry and CN Relay API Key. If fully separate keys are needed later, they can be issued separately in the admin backend.') }}
{{ $t('Assets are managed by the platform. Video generation supports hosted relay and native_direct access.') }}
{{ $t('The shortest path: set your Relay API key, submit a task, poll its status, then open the official link within 23 hours after success. Image-to-video can use a direct first-frame upload or an asset:// returned from image pre-registration.') }}
{{ $t('Put the sk- key provided by the platform in the Authorization header. The web app does not ask you for an Ark API key.') }}
{{ $t('For text-to-video, send a prompt. For image-to-video, upload a first frame directly or pre-register an image and put its asset:// in content[].') }}
{{ $t('The task flow is submit → poll → download. Download within 23 hours after success; expired results show “This content has expired”.') }}
{{ $t('Use the Fast or Mini product for everyday testing. Use the Pro product when quality, portrait consistency, or multimodal references matter.') }}
| {{ $t('Model') }} | {{ $t('Best for') }} | {{ $t('Capabilities') }} |
|---|---|---|
| Seedance 2.0 Pro | {{ $t('Quality first, portrait and product consistency, and multi-reference assets') }} | {{ $t('Text-to-video, image-to-video, video/audio references, and generated synchronized audio') }} |
| Seedance 2.0 Fast | {{ $t('Batch testing, speed first, and cost-sensitive work') }} | {{ $t('Text-to-video, image-to-video, multi-reference, and generated synchronized audio') }} |
| Seedance 2.0 Mini | {{ $t('binbin-sd-mini, lightweight, fast, and low-cost 480p/720p testing') }} | {{ $t('Text-to-video, image-to-video, multi-reference, and generated synchronized audio; 1080p is not supported') }} |
| Seedance 1.5 Pro | {{ $t('Seedance 1.5 audiovisual model') }} | {{ $t('Text-to-video, image-to-video, and generated synchronized audio') }} |
| Seedance 1.0 / Lite | {{ $t('Lightweight tasks or a specified legacy model') }} | {{ $t('Text-to-video or image-to-video depending on the model; no generated synchronized audio') }} |
{{ $t('After the sexy reasoning API is enabled, you can keep using the standard /v1/videos request shape. Set enterprise_interface=sexy_reasoning in metadata to explicitly submit one to eight reference images through the dedicated generation chain. Accounts with auto-routing enabled may still route single-image tasks automatically. The task is returned as a normal video task, and status, result links, and settlement are queried through the standard flow.') }}
{{ $t('Supports HTTPS image URLs or registered asset:// assets. The recommended image role is reference_image.') }}
{{ $t('The platform combines the reference image and prompt to improve visual quality, identity consistency, and motion expression, making the final video better suited for demanding commercial or entertainment scenarios.') }}
{{ $t('After creation, keep querying the same vid_ task. On success you receive the official result link; on failure, check the error reason in task details.') }}
{{ $t('Use the lower-body reasoning API when the video direction clearly needs lower-body visual expression. Keep enterprise_interface=lower_body_reasoning in metadata. The standard submission accepts exactly one face image and lets you bind it to Person 1 or Person 2. The dedicated studio accepts one or two identity groups and does not support reference videos.') }}
{{ $t('Use the celebrity reasoning API when the uploaded image clearly contains a public figure or celebrity. This API requires exactly one face image reference. It first generates a black-and-white sketch reference and a realistic text-to-image result, then registers them as assets and submits the video. The task is still returned as a standard video task. Customer systems can also add enterprise_interface=celebrity_reasoning in metadata for call marking.') }}
{{ $t('Submit, poll, and download: after submission you receive vid_xxx; check about every 5 to 8 seconds. On success, open the official video_url; downloads remain available for 23 hours.') }}
{{ $t('With hosted access, submit through the JojoKey API and query the standard task endpoint for status and results. Preview and download use the video_url returned in task details.') }}
{{ $t('Use /v1/uploads for local files and /v1/uploads/from-url for public images or videos. A first frame without a clear face can be uploaded directly; for a clear face or portrait, use image pre-registration. Returned assets belong only to the account for the current API key.') }}
{{ guideUploadCurl }}
{{ $t('For a reusable portrait or reference image, call /v1/image-audits first and reuse the returned asset://. This is image pre-registration only: it is not official real-person KYC, does not bypass review, and does not guarantee upstream approval.') }}
{{ guideImageAuditCurl }}
{{ $t('For a one-off first-frame task, send prompt, images, and metadata.audit_image=true to /v1/videos. This is a service-side switch and is not forwarded to overseas BytePlus ARK. The image is registered as asset:// before it is sent upstream. One top-level image becomes first_frame; multiple images become reference_image entries. For complex multi-reference work, use the full content[] array with one image_url.url per image.') }}
{{ guideAuditImageVideoCurl }}
{{ $t('Generation uses fields such as model, content, resolution, ratio, and duration. The web app maps assets to roles: first-and-last-frame animation uses first_frame / last_frame, while multi-reference creation uses reference_image. Each image_url.url accepts only one image URL; do not join multiple references with commas.') }}
{{ guideNativeCurl }}
{{ $t('A native_direct account generates video with an overseas BytePlus ARK API key and endpoint. A hybrid account can also call this service through /v1/videos with a Relay API Key. Asset upload and image pre-registration still use this service.') }}
{{ guideDirectTaskCurl }}
{{ $t('All examples below use the native /v1/videos request-body shape. Customers can copy the JSON directly into a command line, SDK, or their own backend.') }}
{{ $t(item.note) }}
{{ item.code }}
{{ $t('Creators only use the Relay API Key. Hosted generation uses the platform fallback key or the Ark key bound in the admin backend; asset registration only uses AK/SK stored on the server.') }}
{{ $t('The asset list is queried by the current API key. asset:// IDs uploaded or generated by another account cannot be used by the current account; the server returns asset_not_owned.') }}
{{ $t('Complete endpoint reference, parameters, error codes, and Python / JavaScript / Shell examples') }}
{{ $t('Export contents follow your current account permissions. Authorized enterprise interface documentation is included automatically.') }}
{{ $t('Authorized accounts can create video tasks through a dedicated quality flow after uploading a reference image.') }}
{{ $t('Upload a local image, paste an HTTPS image URL, or choose an image from My assets. This page is for internal integration testing; customer production systems should use the standard /v1/videos API.') }}
{{ $t('Only redacted request and response bodies are shown here. Authorization headers and full keys are not displayed. You can copy this area for engineering diagnosis.') }}
{{ referenceWorkflowRequestLogText }}
{{ referenceWorkflowResponseLogText }}
{{ $t('Internal authorized test: enter a visual description, generate one realistic portrait image, and save it to the current account asset library.') }}
{{ lowerBodyImageLabRequestText }}
{{ $t('Internal authorized test: upload a person reference image and generate a short video that preserves identity recognition and camera expressiveness.') }}
{{ $t('Upload a reference image or choose one from the asset library. The platform completes dedicated processing and submits the video task automatically. Authorized accounts only.') }}
{{ $t('Enter a visual description and choose an aspect ratio to test realistic portrait image generation. This entry is shown only to authorized test accounts.') }}
{{ $t('Upload one person reference image and enter a creative description to test celebrity video generation with identity preservation.') }}
{{ $t('For video tasks that explicitly need lower-body visual expression. The API shape follows standard video tasks, and authorized accounts can choose dedicated submission on the Create video page.') }}
{{ $t('For authorized video tasks containing a public figure or celebrity reference image. Exactly one clear face reference image is required; the platform automatically prepares the task, and results are viewed under My videos.') }}
{{ $t('Used to sign in to this platform, upload assets, and make hosted relay calls.') }}
{{ $t('Under the same account, the domestic line uses an independent CNY balance and domestic task ledger. The domestic host and domestic Relay API Key are only used for /v1/video-cn/*.') }}