Compare commits

...
Author SHA1 Message Date
Brandon Thomas bc32d7c2ee cleanup 2026-04-02 00:31:49 -04:00
Brandon Thomas bf0703f0c1 refactor web errors with cause + notification details 2026-04-02 00:20:23 -04:00
Brandon Thomas c7943bce59 AdvancedCommonWebError with wrapped errors 2026-04-01 23:41:51 -04:00
Brandon Thomas c5f62daa2b categorize seedance credits error (#1285) 2026-04-01 22:51:25 -04:00
bflatastic 7122e4507f fixed issue where duration isn't passed through when clicking on recreate 2026-04-02 09:35:44 +07:00
Tanish Manku 238cb10499 Add copy prompt button and prompt preview to failed task notifications (#1284)
- Copy button on failed task cards copies the prompt to clipboard with a
3s check/green feedback
- Prompt preview row with marquee scroll on hover (only when text
overflows), tooltip showing full prompt up to 300 chars
- Fix dismiss and action button icon centering across all card types
(InProgress, Completed, Failed)
- Add marquee keyframe animation to tailwind.config.ts
2026-04-01 19:08:43 -07:00
Brandon Thomas 1ebb124f05 cleaned up pager (#1283) 2026-04-01 22:00:38 -04:00
Brandon Thomas e7bb263755 mysql backup tool 2026-04-01 13:15:27 -04:00
Tanish Manku bbfea2ae96 Code cleanup: Delete PageEdit dead code and migrate shared types to ui-pagedraw (#1281)
PageEdit was never rendered in the app. Removes all PageEdit files
(~4000 lines) and migrates the shared types (BaseSelectorImage,
ImageBundle) and HistoryStack component to @storyteller/ui-pagedraw
which already owns the canonical definitions.
2026-04-01 09:29:17 -07:00
BFlat 3bc55c761c footnote update pricing apge 2026-04-01 22:45:42 +07:00
BFlat 8348a91693 show seedance in pricing table 2026-04-01 21:55:11 +07:00
BFlat d1adc0b179 website footer reddit link 2026-04-01 21:51:53 +07:00
BFlat c0ac3cbc9c pricing plan description updated 2026-04-01 20:03:59 +07:00
Brandon Thomas 0a13d36070 no more "free user downgrade" since we're not giving away nano banana… (#1279)
… pro anymore
2026-04-01 03:00:00 -04:00
Brandon Thomas 8662e79824 use tested typesafe fal bindings in webhook (#1278)
wip - still needs tested extractors for image, video, etc.
2026-04-01 02:46:21 -04:00
Brandon Thomas dc30cf9669 fal webhooks - tested cases for error extraction (#1277) 2026-04-01 02:21:44 -04:00
Tanish Manku b09a0fd854 Drag-N-Drop assets into Artcraft to upload them (#1231) 2026-03-31 21:05:38 -04:00
Brandon Thomas 400bccc155 more claude config files (#1276) 2026-03-31 19:22:45 -04:00
Tanish Manku 11011dacaf 2D: Add blank canvas option with preset sizes (#1275) 2026-03-31 15:28:22 -07:00
Tanish Manku 2f73e861d1 2D: Make PageDraw a self-contained lib (#1244)
Moves PageDraw from artcraft app to a component lib, leaving an adapter
implementation and import behind instead
2026-03-31 14:43:21 -07:00
Brandon Thomas 0151a2e28d fix password null bytes paging (#1273) 2026-03-31 14:55:10 -04:00
Brandon Thomas 12d3f82fe2 fal handle webhook errors (#1272) 2026-03-31 10:50:52 -04:00
Brandon Thomas 4489c90125 fal webhook and seedance job alerting with additonal context (#1267) 2026-03-31 06:22:27 -04:00
Brandon Thomas fd54477f73 page on seedance jobs (#1266)
also fix threading on video-thumbnail-job
2026-03-31 05:01:12 -04:00
Brandon Thomas c093603b3d config crates for sharing between services (#1265) 2026-03-31 04:01:34 -04:00
Brandon Thomas a9fb97d720 video-thumbnail-job alerts (#1264) 2026-03-31 03:23:58 -04:00
Brandon Thomas 3d12be2469 don't write db if user already has flags 2026-03-31 02:29:23 -04:00
Brandon Thomas e9938f6c93 fix login paging with sentinel value passwords (#1263) 2026-03-31 02:18:56 -04:00
Brandon Thomas 7e2d7048b1 health check page and health check thread page, mod pages have message + priority (#1262) 2026-03-31 01:22:28 -04:00
Brandon Thomas 0c2b800494 increase username randomness to stop pages (#1261)
We were getting several username collisions a day under the old
algorithm
2026-03-31 00:31:22 -04:00
Brandon Thomas a2a9b3b7de more pager updates to fix spammy pager (#1260) 2026-03-30 22:36:22 -04:00
Brandon Thomas 67df86e54e pager: event deduplication, more data, and cleanup (#1259) 2026-03-30 21:30:57 -04:00
Brandon Thomas dbe42447af oncall: fix paging on users not being logged in (#1258) 2026-03-30 20:27:15 -04:00
Brandon Thomas 37667be20c postman configs 2026-03-30 18:22:57 -04:00
Brandon Thomas b4d68d73ff CLAUDE update 2026-03-30 18:09:30 -04:00
Brandon Thomas 65f3a0e2d0 move postman collections 2026-03-30 18:04:24 -04:00
Brandon Thomas e71c006a63 postman collections (#1257) 2026-03-30 18:03:17 -04:00
Brandon Thomas 5224da1968 characters: part 1 (schema, routes, API) (#1255)
- API first draft is done
- Schema is not quite done
- Queries obviously not ready
2026-03-30 14:33:09 -04:00
Brandon Thomas c3dfbb1698 character api (#1250) 2026-03-29 09:27:28 -04:00
BFlat 48d69449c7 omni stuff implementation (#1249) 2026-03-29 19:59:57 +07:00
BFlat 20d7e3bf31 generations gallery on the website (#1233) 2026-03-29 09:42:00 +07:00
Brandon Thomas 505766b237 omni gen APIs for image and video (part one) (#1246) 2026-03-28 20:29:01 -04:00
BFlat d462f65891 per model promptbox char limit and text area expand button (#1241) 2026-03-27 23:16:00 +07:00
Brandon Thomas 827bbc613f more common enums (#1239)
this will be useful with an omni-api
2026-03-27 07:46:46 -04:00
Brandon Thomas 2ba11c9b3d add more support debugging info (#1238) 2026-03-26 02:36:00 -04:00
Brandon Thomas 824d1f22ab add hostnames to pages (#1237) 2026-03-26 02:00:17 -04:00
Brandon Thomas a3c03e3d99 kinovi uses the old hostname for static assets (#1236) 2026-03-26 01:16:33 -04:00
Brandon Thomas 29ef6daeed alerting middleware (#1234) 2026-03-26 00:11:18 -04:00
BFlat 602d7d33a7 stretch all promptboxes for bigger field to accommodate more image re… (#1232)
…fs etc.
2026-03-26 07:35:49 +07:00
Brandon Thomas 7ceb002fd3 no-op pager (#1229) 2026-03-25 19:28:37 -04:00
Brandon Thomas ed1ce11dc0 add paging to enqueue failures (oncall support) (#1228)
It's SRE time!
2026-03-25 19:05:05 -04:00
Brandon Thomas 527917c45c pager subsystem (#1226) 2026-03-25 17:19:24 -04:00
Brandon Thomas 0274450a2b rootly client (#1225) 2026-03-25 14:09:58 -04:00
Tanish Manku 5e150db37e 3D: world/local transform space toggle for 3D editor gizmo (#1223)
Defaults translate and rotate to world space. X key and toolbar pill
toggle between world and local. Scale mode is locked to local space.
2026-03-25 09:05:15 -07:00
BFlat 68f8a339af temporary prompt info and image ref for task queue generations (#1220)
<img width="490" height="683"
alt="{68D2BE71-2E3F-4AB3-BD40-8A1BED5561F6}"
src="https://github.com/user-attachments/assets/edcc6090-3f78-4512-8314-474116f93898"
/>

makes it easier to differentiate which generation task is which by
prompt hover and image ref thumbnails
2026-03-25 20:29:54 +07:00
BFlat 338b0b6313 refresh credits count on refund from failed generation (#1219) 2026-03-25 18:44:08 +07:00
BFlat 4e752d7a9e button to copy text prompt directly from image gen history and added … (#1218)
…icons next to model name

<img width="229" height="78"
alt="{C9321025-FD31-4C46-A096-38E006009081}"
src="https://github.com/user-attachments/assets/62bce67f-9bec-4834-80af-7e7ea2bdbc9c"
/>
2026-03-25 18:32:43 +07:00
Tanish Manku 32e01a415b Move character ordering and AI Trump category in 3D presets (#1217)
Storyboy, Story Girl, Knight, and News Anchor are now pinned to the
front of the Characters row in that order. AI Trump is moved from
Characters into Memes. Both are resolved client-side after the featured
items fetch by matching on lowercased item names.
2026-03-25 00:42:48 -07:00
522 changed files with 17320 additions and 8501 deletions
+47
View File
@@ -0,0 +1,47 @@
# API Conventions
## HTTP Handlers (Actix-Web)
Handlers in `storyteller_web` follow this structure:
1. **Request/Response types** with `#[derive(Deserialize/Serialize, ToSchema)]`
2. **Error enum** implementing `ResponseError`, `Display`, `Serialize`, `ToSchema`
3. **Handler function** annotated with `#[utoipa::path(...)]` for OpenAPI docs
4. Handler returns `Result<Json<Response>, ErrorType>`. Only use `Result<HttpResponse, ErrorType>` when you need to set headers/cookies.
### Error Types
- Use `CommonWebError` for simple handlers that only need standard HTTP error codes
- Use a custom error enum when you need endpoint-specific error variants (e.g. `LoginErrorType::InvalidCredentials`)
- Custom error enums MUST implement `ResponseError` (actix), `Display`, and `Serialize`
- When adding `From<RequireUserSessionError>` or similar conversions, implement them on `CommonWebError` in its own module (orphan rule)
- Error response bodies include: `success: false`, `error_code`, `error_code_str`
### Session/Auth
- `require_user_session_using_connection()` reuses an open DB connection (preferred)
- `require_user_session()` acquires its own connection (deprecated)
- `require_moderator()` for admin-only endpoints
### API Type Definitions
- Shared request/response types go in `artcraft_api_defs` crate (under `crates/api_clients/artcraft/artcraft_api_defs/`)
- Types that need `ResponseError` impl must stay in `storyteller_web` (orphan rule)
- New types must be added to `api_doc.rs` schemas (in storyteller-web) for Swagger generation
## Enums (Database-backed)
- Located in `crates/schema/public/enums/src/by_table/{table_name}/`
- Require manual `to_str()` and `from_str()` implementations
- Use `impl_enum_display_and_debug_using_to_str!` and `impl_mysql_enum_coders!` macros
- Add comprehensive tests: serialization, round-trip, variant count
- YOU CAN ADD NEW VALUES but DO NOT CHANGE EXISTING VALUES without a migration strategy
- Note that adding new values can break older versions of the Tauri desktop app that read
responses over Rust - make sure it consumes variants with an "Unknown(String)" variant
catch-all to future proof the APIs.
## Tokens (Primary Keys)
- Located in `crates/schema/public/tokens/src/tokens/`
- Opaque `String` wrappers with Stripe-like prefixes (e.g. `user_`, `mf_`)
- Use `impl_string_token!`, `impl_mysql_token_from_row!`, `impl_crockford_generator!` macros
+59
View File
@@ -0,0 +1,59 @@
# Code Style
## Rust
- Two spaces for indentation (not four)
- No minimum supported Rust version; use latest stable features freely
- `#[macro_use] extern crate serde_derive;` is used in binary crates; library crates use `use serde_derive::{Serialize, Deserialize};`
- Prefer `log` crate macros (`info!`, `warn!`, `error!`) over `println!`
- Use `anyhow::Result` / `AnyhowResult` for fallible functions in application code
- Enum Display/Debug: use `impl_enum_display_and_debug_using_to_str!` macro, not `derive_more::Display` (CLion doesn't understand it)
- Fields that are optional use the `maybe_` prefix: `maybe_creator_user_token`, `maybe_prompt_token`
- When implementing `fmt::Display` for error types, use the pattern: `write!(f, "{:?}", self)`
## File Layout (Top-to-Bottom Reading Order)
Organize code so a human reading top-to-bottom encounters the most important things first and
can drill down into details only when curious. Think of it like a newspaper: headline first,
then the story, then the fine print.
### Ordering within a file
1. **Constants** at the top, right after imports.
2. **The primary public type** (the main struct/enum the file is about) comes next.
A reader opening this file should immediately see what it defines.
3. **Supporting/subordinate types** (sub-structs, helper enums, serialization DTOs) go
below the primary type, not above it. Ask: "Would a reader need to know this type
exists before seeing the main type?" — if no, push it down.
4. **Type ordering for API types**: Request, then Response (success), then Error.
5. **`impl` blocks** after their type definitions.
### Ordering within an `impl` block
1. **Constructors** (`new`, `from_*`, `builder`) at the top.
2. **Public methods** next — these are the main entry points a reader cares about.
3. **Private helper methods** below public methods.
- Among helpers: place "meaty" helpers (substantial logic, direct continuations of the
public entry point) above "leaf" helpers (small formatters, simple lookups).
- A method that calls another method in the same file should appear *above* the method
it calls. This lets readers follow the call chain downward.
## Naming
- Handler functions: `{verb}_{noun}_handler` (e.g. `get_health_check_handler`, `login_handler`)
- Error enums: `{Feature}Error` (e.g. `FalWebhookError`, `HealthCheckError`)
- Request/response structs: `{Action}Request`, `{Action}Response`, `{Action}SuccessResponse`
- Path params: `{Action}PathInfo`
- Builder structs: `{Thing}Builder` with `set_` prefixed setters and a `build()` method
## Imports
- Group imports: std, external crates, internal workspace crates, `crate::` imports
- Use fully qualified paths for one-off references; `use` for repeated references
- Prefer specific imports over wildcards, except in `api_doc.rs` and test modules
## TypeScript / Frontend
- TypeScript with React, Vite, Zustand, Three.js
- Nx monorepo under `crates/frontend/`
- Two spaces for indentation
+27
View File
@@ -0,0 +1,27 @@
# Testing
## Running Tests
- Most crates: `cargo test -p {crate_name}`
- Crates using SQLx offline mode: `SQLX_OFFLINE=true cargo test -p {crate_name}`
- The `storyteller-web` and `mysql_queries` crates require `SQLX_OFFLINE=true` for compilation
- Use `cargo check -p {crate_name}` for fast compilation checks without running tests
## Test Patterns
- Tests live in `#[cfg(test)] mod tests { ... }` at the bottom of each file
- Group related tests in sub-modules: `mod explicit_checks`, `mod mechanical_checks`
- Enum tests should cover: serialization, deserialization, `to_str`/`from_str` round-trip, variant count
- Password/crypto tests: be mindful of computation cost, don't add too many bcrypt test cases
## What to Test
- New error types and their mappings
- Enum variant serialization stability (these are stored in the database)
- Hash/deduplication functions with known inputs
- Edge cases in parsers (empty input, missing fields, malformed data)
## What Not to Test
- Don't add integration tests that require a running database unless explicitly asked
- Don't add tests for simple struct construction or trivial getters
@@ -1,6 +1,6 @@
{
"db_name": "MySQL",
"query": "\nSELECT\n j.status as `job_status: enums::common::job_status_plus::JobStatusPlus`,\n j.failure_reason as job_failure_reason,\n wle.credits_delta,\n wle.maybe_linked_refund_ledger_token as `maybe_linked_refund_ledger_token: tokens::tokens::wallet_ledger_entries::WalletLedgerEntryToken`,\n j.on_success_result_entity_token as `on_success_result_media_token: tokens::tokens::media_files::MediaFileToken`,\n j.token as `job_token: tokens::tokens::generic_inference_jobs::InferenceJobToken`,\n wle.token as `wallet_ledger_entry_token: tokens::tokens::wallet_ledger_entries::WalletLedgerEntryToken`,\n wle.entry_type as `wallet_ledger_entry_type: enums::by_table::wallet_ledger_entries::wallet_ledger_entry_type::WalletLedgerEntryType`\nFROM generic_inference_jobs as j\nLEFT OUTER JOIN users as u\n ON j.maybe_creator_user_token = u.token\nLEFT OUTER JOIN wallet_ledger_entries as wle\n ON wle.maybe_entity_ref = j.token\nWHERE u.token = ?\nORDER BY j.id DESC\n ",
"query": "\nSELECT\n j.status as `job_status: enums::common::job_status_plus::JobStatusPlus`,\n j.failure_reason as job_failure_reason,\n wle.credits_delta,\n wle.maybe_linked_refund_ledger_token as `maybe_linked_refund_ledger_token: tokens::tokens::wallet_ledger_entries::WalletLedgerEntryToken`,\n j.on_success_result_entity_token as `on_success_result_media_token: tokens::tokens::media_files::MediaFileToken`,\n j.token as `job_token: tokens::tokens::generic_inference_jobs::InferenceJobToken`,\n wle.token as `wallet_ledger_entry_token: tokens::tokens::wallet_ledger_entries::WalletLedgerEntryToken`,\n wle.entry_type as `wallet_ledger_entry_type: enums::by_table::wallet_ledger_entries::wallet_ledger_entry_type::WalletLedgerEntryType`,\n j.maybe_external_third_party as `maybe_external_third_party: enums::by_table::generic_inference_jobs::inference_job_external_third_party::InferenceJobExternalThirdParty`,\n j.maybe_external_third_party_id,\n j.created_at,\n j.updated_at\nFROM generic_inference_jobs as j\nLEFT OUTER JOIN users as u\n ON j.maybe_creator_user_token = u.token\nLEFT OUTER JOIN wallet_ledger_entries as wle\n ON wle.maybe_entity_ref = j.token\nWHERE u.token = ?\nORDER BY j.id DESC\n ",
"describe": {
"columns": [
{
@@ -82,6 +82,46 @@
"char_set": 224,
"max_size": 128
}
},
{
"ordinal": 8,
"name": "maybe_external_third_party: enums::by_table::generic_inference_jobs::inference_job_external_third_party::InferenceJobExternalThirdParty",
"type_info": {
"type": "VarString",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 224,
"max_size": 64
}
},
{
"ordinal": 9,
"name": "maybe_external_third_party_id",
"type_info": {
"type": "VarString",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 224,
"max_size": 256
}
},
{
"ordinal": 10,
"name": "created_at",
"type_info": {
"type": "Timestamp",
"flags": "NOT_NULL | MULTIPLE_KEY | BINARY | TIMESTAMP",
"char_set": 63,
"max_size": 19
}
},
{
"ordinal": 11,
"name": "updated_at",
"type_info": {
"type": "Timestamp",
"flags": "NOT_NULL | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"char_set": 63,
"max_size": 19
}
}
],
"parameters": {
@@ -95,8 +135,12 @@
true,
false,
true,
true
true,
true,
true,
false,
false
]
},
"hash": "0757d81ba153b2ad2df25df3dd92b655ef08b95f5f83251bf3573f9be3a9f8d1"
"hash": "cbdaa45597de14d1eb6dc0f6a95788d56334757bb3d03eda2eb64df3ba2a0144"
}
+13
View File
@@ -17,6 +17,8 @@ artcraft/
│ ├── artcraft_migrations/ # ArtCraft desktop app SQLite migrations
│ ├── migrations/ # Server MySQL migrations
│ └── migrations_squashed/ # Fully materialized MySQL schema definitions for most tables
├── _tools/ # Various 3rd party tool integrations and configurations
│ └── postman/ # Postman configs for test HTTP requests against development and production
├── build/ # Dockerfile build instructions for server components
├── crates/ # Rust workspace
│ ├── api_clients/ # HTTP clients for calling internal and 3rd party services
@@ -60,3 +62,14 @@ artcraft/
- A mix of wreq and reqwest for Rust HTTP clients
- TypeScript with Nx, React, Vite, Zustand, and Three.js
- Use two spaces for indentation
### File Layout
Organize for top-to-bottom reading. Important things first, details later.
- **Constants** at the top (after imports)
- **Structs/enums** next; outer structs above inner sub-structs
- **API types** in order: Request, Response, Error
- **In impl blocks**: constructors first, then public methods, then private helpers
- Private helpers go *below* the methods that call them
- Among helpers: meatier logic above leaf-level formatters
Generated
+76 -10
View File
@@ -557,9 +557,9 @@ dependencies = [
[[package]]
name = "anstream"
version = "0.6.14"
version = "0.6.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b"
checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a"
dependencies = [
"anstyle",
"anstyle-parse",
@@ -596,12 +596,13 @@ dependencies = [
[[package]]
name = "anstyle-wincon"
version = "3.0.2"
version = "3.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
dependencies = [
"anstyle",
"windows-sys 0.52.0",
"once_cell_polyfill",
"windows-sys 0.60.2",
]
[[package]]
@@ -3273,7 +3274,7 @@ dependencies = [
"libc",
"option-ext",
"redox_users",
"windows-sys 0.61.2",
"windows-sys 0.59.0",
]
[[package]]
@@ -5162,6 +5163,12 @@ dependencies = [
"pin-project-lite",
]
[[package]]
name = "http-range"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
[[package]]
name = "http-types"
version = "2.12.0"
@@ -6302,7 +6309,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
dependencies = [
"cfg-if",
"windows-targets 0.52.6",
"windows-targets 0.48.5",
]
[[package]]
@@ -7737,6 +7744,12 @@ version = "1.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
[[package]]
name = "once_cell_polyfill"
version = "1.70.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
[[package]]
name = "opaque-debug"
version = "0.3.0"
@@ -8023,6 +8036,19 @@ dependencies = [
"sha2 0.10.8",
]
[[package]]
name = "pager"
version = "0.0.1"
dependencies = [
"chrono",
"errors",
"log",
"rootly_client",
"sha2 0.11.0-rc.5",
"tokio",
"workspace-build-acceleration",
]
[[package]]
name = "pango"
version = "0.18.3"
@@ -9584,6 +9610,26 @@ dependencies = [
"syn 1.0.109",
]
[[package]]
name = "rootly_client"
version = "0.0.1"
dependencies = [
"env",
"env_logger 0.11.9",
"errors",
"log",
"reqwest 0.12.23",
"serde",
"serde_derive",
"serde_json",
"tokio",
"workspace-build-acceleration",
]
[[package]]
name = "rootly_config"
version = "0.0.1"
[[package]]
name = "rsa"
version = "0.9.6"
@@ -9777,7 +9823,7 @@ dependencies = [
"errno",
"libc",
"linux-raw-sys 0.12.1",
"windows-sys 0.61.2",
"windows-sys 0.59.0",
]
[[package]]
@@ -9894,7 +9940,7 @@ dependencies = [
"security-framework 3.7.0",
"security-framework-sys",
"webpki-root-certs",
"windows-sys 0.61.2",
"windows-sys 0.59.0",
]
[[package]]
@@ -10159,12 +10205,16 @@ dependencies = [
"jobs_common",
"log",
"mysql_queries",
"pager",
"reqwest 0.12.23",
"rootly_client",
"rootly_config",
"seedance2pro_client",
"serde",
"serde_derive",
"serde_json",
"server_environment",
"shared_env_var_config",
"sqlx",
"tokens",
"tokio",
@@ -10665,6 +10715,13 @@ dependencies = [
"keccak",
]
[[package]]
name = "shared_env_var_config"
version = "0.0.1"
dependencies = [
"easyenv",
]
[[package]]
name = "shlex"
version = "1.3.0"
@@ -11228,6 +11285,7 @@ dependencies = [
"mimetypes",
"mysql_queries",
"once_cell",
"pager",
"password",
"primitives",
"prompt_engineering",
@@ -11240,6 +11298,8 @@ dependencies = [
"regex",
"resend-rs",
"reusable_types",
"rootly_client",
"rootly_config",
"rust-s3",
"rustls 0.23.36",
"seedance2pro_client",
@@ -11247,6 +11307,7 @@ dependencies = [
"serde_derive",
"serde_json",
"server_environment",
"shared_env_var_config",
"speculoos",
"sqlx",
"strum",
@@ -11791,6 +11852,7 @@ dependencies = [
"gtk",
"heck 0.5.0",
"http 1.3.1",
"http-range",
"jni 0.21.1",
"libc",
"log",
@@ -12152,7 +12214,7 @@ dependencies = [
"getrandom 0.4.1",
"once_cell",
"rustix 1.1.4",
"windows-sys 0.61.2",
"windows-sys 0.59.0",
]
[[package]]
@@ -13322,10 +13384,14 @@ dependencies = [
"jobs_common",
"log",
"mysql_queries",
"pager",
"rootly_client",
"rootly_config",
"serde",
"serde_derive",
"serde_json",
"server_environment",
"shared_env_var_config",
"sqlx",
"tempdir",
"tokio",
+11 -1
View File
@@ -18,6 +18,7 @@ members = [
"crates/api_clients/muapi_client",
"crates/api_clients/openai_sora_client",
"crates/api_clients/openart_client",
"crates/api_clients/rootly_client",
"crates/api_clients/runwayml_client",
"crates/api_clients/seedance2pro_client",
"crates/api_clients/thumbnail_generator",
@@ -74,6 +75,7 @@ members = [
"crates/lib/jwt_signer",
"crates/lib/logging",
"crates/lib/markdown",
"crates/lib/pager",
"crates/lib/password",
"crates/lib/server_environment",
"crates/lib/sqlx_mysql_helpers",
@@ -99,6 +101,10 @@ members = [
# Schema (buckets): S3/R2 topology
"crates/schema/buckets/bucket_paths",
# Schema (config): configuration constants for external services
"crates/schema/config/rootly_config",
"crates/schema/config/shared_env_var_config",
# Schema (database): queries, database layouts, Redis keys, etc.
"crates/schema/database/elasticsearch_schema",
"crates/schema/database/migration",
@@ -239,6 +245,9 @@ ffmpeg_utils = { path = "crates/lib/ffmpeg_utils" }
file_to_base64_url = { path = "crates/lib/files/file_to_base64_url" }
filesys = { path = "crates/lib/files/filesys" }
grok_client = { path = "crates/api_clients/grok_client" }
rootly_client = { path = "crates/api_clients/rootly_client" }
rootly_config = { path = "crates/schema/config/rootly_config" }
shared_env_var_config = { path = "crates/schema/config/shared_env_var_config" }
http_headers = { path = "crates/lib/http_headers" }
images = { path = "crates/lib/files/images" }
jobs_common = { path = "crates/lib/jobs_common" }
@@ -250,6 +259,7 @@ midjourney_client = { path = "crates/api_clients/midjourney_client" }
mimetypes = { path = "crates/lib/files/mimetypes" }
muapi_client = { path = "crates/api_clients/muapi_client" }
mysql_queries = { path = "crates/schema/database/mysql_queries" }
pager = { path = "crates/lib/pager" }
openai_sora_client = { path = "crates/api_clients/openai_sora_client" }
primitives = { path = "crates/lib/data/primitives" }
seedance2pro_client = { path = "crates/api_clients/seedance2pro_client" }
@@ -317,7 +327,7 @@ sha2 = "0.11.0-rc.5"
sha3 = "0.10.8"
speculoos = "0.11.0"
strum = { version = "0.28.0", features = ["derive"] }
tauri = { version = "2.8.3", features = ["unstable", "devtools"] } # NB: "devtools" prevents App Store distribution; "ubstable" is needed for window access
tauri = { version = "2.8.3", features = ["unstable", "devtools", "protocol-asset"] } # NB: "devtools" prevents App Store distribution; "ubstable" is needed for window access
tauri-plugin-dialog = "2.3.3"
tauri-plugin-fs = "2.4.2"
tauri-plugin-log = "2.6.0"
@@ -0,0 +1,29 @@
-- NB: This is a manually squashed view of all the CREATE and ALTER statements,
-- with comments attached to the fields for centralized documentation.
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
-- Stores the media files (images) used as input when creating a character.
CREATE TABLE character_creation_assets (
-- Not used for anything except replication.
id BIGINT(20) NOT NULL AUTO_INCREMENT,
-- Foreign key to the characters table.
character_token VARCHAR(32) NOT NULL,
-- The media file used as a creation input (e.g. reference image).
asset_media_file_token VARCHAR(32) NOT NULL,
-- ========== TIMESTAMPS ==========
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- ========== INDICES ==========
PRIMARY KEY (id),
KEY index_character_token (character_token),
KEY index_asset_media_file_token (asset_media_file_token)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
@@ -0,0 +1,28 @@
-- NB: This is a manually squashed view of all the CREATE and ALTER statements,
-- with comments attached to the fields for centralized documentation.
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
-- Stores prompts/descriptions used when creating a character.
CREATE TABLE character_creation_prompts (
-- Not used for anything except replication.
id BIGINT(20) NOT NULL AUTO_INCREMENT,
-- Foreign key to the characters table.
character_token VARCHAR(32) NOT NULL,
-- The prompt or description used during character creation.
prompt TEXT DEFAULT NULL,
-- ========== TIMESTAMPS ==========
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- ========== INDICES ==========
PRIMARY KEY (id),
KEY index_character_token (character_token)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
@@ -0,0 +1,71 @@
-- NB: This is a manually squashed view of all the CREATE and ALTER statements,
-- with comments attached to the fields for centralized documentation.
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
-- Maps our characters to their representations in third-party systems.
-- A single character may have entries in multiple third-party systems
-- (e.g. Kinovi for Seedance, Runway for Gen-3, etc.).
-- If a third-party character needs to be recreated, a new row is inserted.
CREATE TABLE character_third_party_entities (
-- Not used for anything except replication.
id BIGINT(20) NOT NULL AUTO_INCREMENT,
-- Effective "primary key" (PUBLIC)
-- We may need to recreate the character in a third party, so this gets its own token.
token VARCHAR(32) NOT NULL,
-- Foreign key to the characters table.
character_token VARCHAR(32) NOT NULL,
-- Whether this third-party entity is active and usable.
is_active BOOLEAN NOT NULL DEFAULT false,
-- ========== THIRD PARTY DETAILS ==========
-- Which third-party system the character lives in (enum crate type).
-- e.g. "kinovi", "runway", etc.
third_party VARCHAR(32) NOT NULL,
-- Which types of models can use this character (enum crate type).
-- e.g. "seedance_2_pro", "seedance_2_fast", etc.
third_party_scopes VARCHAR(32) NOT NULL,
-- The identifier in the third-party system.
-- e.g. Kinovi's "char_1774752056469_2wlxoq"
third_party_id VARCHAR(64) NOT NULL,
-- The name used by the third party.
-- Important for Kinovi since characters are referenced by name in prompts.
third_party_name VARCHAR(255) NOT NULL,
-- An upstream third party of the third party (if any).
-- e.g. Kinovi's assetId "asset-20260329104101-kk5kl"
maybe_fourth_party_id VARCHAR(64) DEFAULT NULL,
-- ========== JOB TRACKING ==========
-- Our job system token (if the character was created via a job).
maybe_origin_job_token VARCHAR(32) DEFAULT NULL,
-- Third party's job system token (if any).
maybe_origin_third_party_job_id VARCHAR(64) DEFAULT NULL,
-- ========== TIMESTAMPS ==========
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP DEFAULT NULL,
-- ========== INDICES ==========
PRIMARY KEY (id),
UNIQUE KEY (token),
KEY index_character_token (character_token),
KEY index_third_party (third_party),
KEY index_third_party_id (third_party_id),
KEY index_is_active (is_active)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
@@ -0,0 +1,60 @@
-- NB: This is a manually squashed view of all the CREATE and ALTER statements,
-- with comments attached to the fields for centralized documentation.
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
-- Characters are reusable entities that can be referenced in video/image generations.
-- A character is created from one or more reference images and registered with third-party
-- systems (e.g. Kinovi/Seedance) that support character-based generation.
CREATE TABLE characters (
-- Not used for anything except replication.
id BIGINT(20) NOT NULL AUTO_INCREMENT,
-- Effective "primary key" (PUBLIC)
token VARCHAR(32) NOT NULL,
-- Whether the character has been fully created and is available for use.
-- A character may exist in the database before its creation job completes.
is_active BOOLEAN NOT NULL DEFAULT false,
-- ========== CHARACTER DETAILS ==========
-- Display name for the character.
name VARCHAR(255) NOT NULL,
-- Optional description of the character.
maybe_description VARCHAR(512) DEFAULT NULL,
-- ========== MEDIA ==========
-- Avatar image (small/thumbnail).
maybe_avatar_media_token VARCHAR(32) DEFAULT NULL,
-- Full-size reference image.
maybe_full_image_media_token VARCHAR(32) DEFAULT NULL,
-- ========== CREATOR ==========
-- The user who created this character.
maybe_creator_user_token VARCHAR(32) DEFAULT NULL,
-- For abuse tracking.
creator_ip_address VARCHAR(40) NOT NULL,
-- ========== TIMESTAMPS ==========
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP DEFAULT NULL,
-- ========== INDICES ==========
PRIMARY KEY (id),
UNIQUE KEY (token),
KEY index_maybe_creator_user_token (maybe_creator_user_token),
KEY index_is_active (is_active),
KEY index_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
@@ -46,6 +46,7 @@ CREATE TABLE generic_inference_jobs (
-- * background_removal
inference_category VARCHAR(32) NOT NULL,
-- Enum: InferenceJobExternalThirdParty
-- If the job is externally enqueued, this is the third-party service
-- responsible for the job. Typically, we won't run an inference job for
-- jobs being run on a third party.
@@ -0,0 +1,5 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
DROP TABLE IF EXISTS characters;
@@ -0,0 +1,55 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
CREATE TABLE characters (
-- Not used for anything except replication (private, not even used in queries)
id BIGINT(20) NOT NULL AUTO_INCREMENT,
-- Public-facing "primary key" (PUBLIC)
token VARCHAR(32) NOT NULL,
-- Whether the character has been fully created and is available for use.
-- A character may exist in the database before its creation job completes.
is_active BOOLEAN NOT NULL DEFAULT false,
-- ========== CHARACTER DETAILS ==========
-- User's display name for the character.
name VARCHAR(255) NOT NULL,
-- Optional user description of the character.
maybe_description VARCHAR(512) DEFAULT NULL,
-- ========== MEDIA ==========
-- Avatar image (cropped to face, ideally).
maybe_avatar_media_token VARCHAR(32) DEFAULT NULL,
-- Full-size reference image.
maybe_full_image_media_token VARCHAR(32) DEFAULT NULL,
-- ========== CREATOR ==========
-- The user who created this character.
maybe_creator_user_token VARCHAR(32) DEFAULT NULL,
-- For abuse tracking.
creator_ip_address VARCHAR(40) NOT NULL,
-- ========== TIMESTAMPS ==========
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP DEFAULT NULL,
-- ========== INDICES ==========
PRIMARY KEY (id),
UNIQUE KEY (token),
KEY index_maybe_creator_user_token (maybe_creator_user_token),
KEY index_is_active (is_active),
KEY index_created_at (created_at),
KEY index_deleted_at (deleted_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
@@ -0,0 +1,5 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
DROP TABLE IF EXISTS character_third_party_entities;
@@ -0,0 +1,60 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
CREATE TABLE character_third_party_entities (
-- Not used for anything except replication.
id BIGINT(20) NOT NULL AUTO_INCREMENT,
-- Foreign key to the characters table.
character_token VARCHAR(32) NOT NULL,
-- Whether this third-party entity is active and usable.
is_active BOOLEAN NOT NULL DEFAULT false,
-- ========== THIRD PARTY DETAILS ==========
-- Which third-party system the character lives in (enum crate type).
-- e.g. "kinovi", "runway", etc.
third_party VARCHAR(32) NOT NULL,
-- The identifier in the third-party system.
-- e.g. Kinovi's "char_1774752056469_2wlxoq"
third_party_id VARCHAR(64) NOT NULL,
-- Which types of models can use this character (enum crate type).
-- e.g. "kinovi_seedance_2_pro", "kinovi_seedance_2_fast", etc.
third_party_scopes VARCHAR(32) NOT NULL,
-- The name used by the third party.
-- Important for Kinovi since characters are referenced by name in prompts.
third_party_name VARCHAR(255) NOT NULL,
-- An upstream third party of the third party (if any).
-- e.g. Kinovi's assetId "asset-20260329104101-kk5kl"
maybe_fourth_party_id VARCHAR(64) DEFAULT NULL,
-- ========== JOB TRACKING ==========
-- Our job system token (if the character was created via a job).
maybe_origin_job_token VARCHAR(32) DEFAULT NULL,
-- Third party's job system token (if any).
maybe_origin_third_party_job_id VARCHAR(64) DEFAULT NULL,
-- ========== TIMESTAMPS ==========
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP DEFAULT NULL,
-- ========== INDICES ==========
PRIMARY KEY (id),
UNIQUE KEY unique_third_party_id (third_party, third_party_id),
KEY index_character_token (character_token),
KEY index_third_party (third_party),
KEY index_third_party_id (third_party_id),
KEY index_is_active (is_active)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
@@ -0,0 +1,5 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
DROP TABLE IF EXISTS character_creation_assets;
@@ -0,0 +1,26 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
-- Stores the media files (images) used as input when creating a character.
CREATE TABLE character_creation_assets (
-- Not used for anything except replication.
id BIGINT(20) NOT NULL AUTO_INCREMENT,
-- Foreign key to the characters table.
character_token VARCHAR(32) NOT NULL,
-- The media file used as a creation input (e.g. reference image).
asset_media_file_token VARCHAR(32) NOT NULL,
-- ========== TIMESTAMPS ==========
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- ========== INDICES ==========
PRIMARY KEY (id),
KEY index_character_token (character_token),
KEY index_asset_media_file_token (asset_media_file_token)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
@@ -0,0 +1,5 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
DROP TABLE IF EXISTS character_creation_prompts;
@@ -0,0 +1,25 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
-- Stores prompts/descriptions used when creating a character.
CREATE TABLE character_creation_prompts (
-- Not used for anything except replication.
id BIGINT(20) NOT NULL AUTO_INCREMENT,
-- Foreign key to the characters table.
character_token VARCHAR(32) NOT NULL,
-- The prompt or description used during character creation.
prompt TEXT DEFAULT NULL,
-- ========== TIMESTAMPS ==========
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- ========== INDICES ==========
PRIMARY KEY (id),
KEY index_character_token (character_token)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+16
View File
@@ -0,0 +1,16 @@
# Use this workspace to collaborate
workspace:
id: ""
# Each entry here maps a local resource to one or more corresponding objects in Postman Cloud
cloudResources:
collections:
../postman/collections/ArtCraft API: 32845438-9defd864-8fb5-4b32-abbb-b87f16af5451
environments:
../postman/environments/Local Development.environment.yaml: 32845438-8b5c042a-aed6-491a-99a6-fcb2f72cbc44
../postman/environments/Production.environment.yaml: 32845438-a5b2562e-057d-42c2-b054-67285a50e2b7
localResources:
environments:
- ../environments/Local Development.environment.yaml
- ../environments/Production.environment.yaml
@@ -0,0 +1,6 @@
$kind: collection
variables:
- key: api_host
value: https://api.fakeyou.com
disabled: true
secret: false
@@ -0,0 +1,2 @@
$kind: collection
order: 11000
@@ -0,0 +1,2 @@
$kind: collection
order: 1000
@@ -0,0 +1,10 @@
$kind: http-request
name: Set Bearer
url: "{{api_host}}/v1/control_plane/sora_secret"
method: POST
body:
type: urlencoded
content:
key: bearer
value: ""
order: 1000
@@ -0,0 +1,10 @@
$kind: http-request
name: Set Cookie
url: "{{api_host}}/v1/control_plane/sora_secret"
method: POST
body:
type: urlencoded
content:
key: cookie
value: ""
order: 2000
@@ -0,0 +1,10 @@
$kind: http-request
name: Set Sentinel
url: "{{api_host}}/v1/control_plane/sora_secret"
method: POST
body:
type: urlencoded
content:
key: sentinel
value: ""
order: 3000
@@ -0,0 +1,2 @@
$kind: collection
order: 3000
@@ -0,0 +1,2 @@
$kind: collection
order: 5000
@@ -0,0 +1,25 @@
$kind: http-request
name: Estimate Image Cost
url: "{{api_host}}/v1/generate/cost_estimate/image"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: |
{
"model": "seedream_5_lite",
"provider": "artcraft",
"generation_mode": {"type": "text_to_image" },
"aspect_ratio": "wide_sixteen_by_nine",
"resolution": "two_k",
"image_batch_count": 1
}
order: 2000
@@ -0,0 +1,26 @@
$kind: http-request
name: Estimate Video Cost
url: "{{api_host}}/v1/generate/cost_estimate/video"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: |
{
"model": "seedance_2p0",
"provider": "artcraft",
"generation_mode": {"type": "text_to_video" },
"aspect_ratio": "wide_sixteen_by_nine",
"resolution": "four_k",
"duration_seconds": 8,
"video_batch_count": 4
}
order: 1000
@@ -0,0 +1,2 @@
$kind: collection
order: 1000
@@ -0,0 +1,18 @@
$kind: http-request
name: Background Removal
url: "{{api_host}}/v1/generate/image/remove_background"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
body:
type: json
content: |-
{
"uuid_idempotency_token": "{{$randomUUID}}",
"media_file_token": "m_v0n7g8k6saeg3t117kxf227xprtdcc"
}
order: 5000
@@ -0,0 +1,22 @@
$kind: http-request
name: Flux 1 Dev (text to image)
url: "{{api_host}}/v1/generate/image/multi_function/gpt_image_1p5"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
"prompt": "A large dinosaur looks inside a house from outside. It's looking for food. Big t-rex. Scary. Photorealistic. Face in the window.",
"number_images": 2
}
order: 6000
@@ -0,0 +1,2 @@
$kind: collection
order: 1000
@@ -0,0 +1,23 @@
$kind: http-request
name: Qwen Angle Edit
url: "{{api_host}}/v1/generate/image/angle/qwen_edit_2511"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
body:
type: json
content: |
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
"image_media_token": "m_z8v3nrjssha8rj5ayk51g85wef2cz9",
"vertical_angle": 33.0,
"horizontal_angle": 33.0
}
order: 1000
@@ -0,0 +1,2 @@
$kind: collection
order: 2000
@@ -0,0 +1,46 @@
$kind: http-request
name: Edit Gpt-Image-1
url: "{{api_host}}/v1/generate/image/edit/gpt_image_1"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
body:
type: json
content: >-
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
// m_9y8hy50582mwxpm8hxmh4n4wjeh5cr (dev - stars)
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev - cube)
// m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1 (dev - studio alley screenshot)
"image_media_tokens": ["m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb", "m_4n0p3ve9qew899774pg6w03vgzb6af", "m_9y8hy50582mwxpm8hxmh4n4wjeh5cr"],
"prompt": "Put the cube from the image on the beach. Use the night sky."
}
/*pub struct GptImage1EditImageRequest {
/// Idempotency token to prevent duplicate requests.
pub uuid_idempotency_token: String,
/// Text prompt to generate the image from.
pub prompt: Option<String>,
// TODO: OneOf for image_urls or image_media_tokens
/// Image media tokens to include in the editing context.
pub image_media_tokens: Option<Vec<MediaFileToken>>,
/// Size of the image to generate. Default is Square.
pub image_size: Option<GptImage1EditImageImageSize>,
/// Number of images to generate. Default is one.
pub num_images: Option<GptImage1EditImageNumImages>,
/// Quality of the image to generate. Default is High.
pub image_quality: Option<GptImage1EditImageImageQuality>,
}*/
order: 1000
@@ -0,0 +1,25 @@
$kind: http-request
name: Flux Pro Kontext Max
url: "{{api_host}}/v1/generate/image/edit/flux_pro_kontext_max"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
// m_9y8hy50582mwxpm8hxmh4n4wjeh5cr (dev - stars)
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev - cube)
// m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1 (dev - studio alley screenshot)
"image_media_token": "m_z8v3nrjssha8rj5ayk51g85wef2cz9",
"prompt": "Make this scene photorealistic. Change it to an overcast sky. Make the bricks look more aged and worn."
}
order: 2000
@@ -0,0 +1,2 @@
$kind: collection
order: 3000
@@ -0,0 +1,28 @@
$kind: http-request
name: Flux Pro Inpaint
url: "{{api_host}}/v1/generate/image/inpaint/flux_pro_1"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
body:
type: json
content: |
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
// m_9y8hy50582mwxpm8hxmh4n4wjeh5cr (dev - stars)
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev - cube)
// m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1 (dev - studio alley screenshot)
// m_cznbn2a1p9mcqeghbjedp12p5d60tn (dev - mochi glasses)
// m_v6ppx1jq7rbhyxpj8mg1hkryqbc9h6 (dev - mochi glasses MASK)
"image_media_token": "m_cznbn2a1p9mcqeghbjedp12p5d60tn",
"mask_media_token": "m_v6ppx1jq7rbhyxpj8mg1hkryqbc9h6",
"prompt": "Remove the glasses"
}
order: 1000
@@ -0,0 +1,2 @@
$kind: collection
order: 4000
@@ -0,0 +1,32 @@
$kind: http-request
name: Bytedance Seedream 4.5 (edit image)
url: "{{api_host}}/v1/generate/image/multi_function/bytedance_seedream_4p5"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
// m_9y8hy50582mwxpm8hxmh4n4wjeh5cr (dev - stars)
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev - cube)
// m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1 (dev - studio alley screenshot)
// m_gn0yvdvd8mw71m5n8whxsa6ywgsdb2 (dev halide - link)
// m_7jjskg45d8b00tsp5nxee0xjsr2fqw (dev halide - link again)
// m_5hhwgx47tzc68ms2ydkkwrdjakwtxk (dev halide - asian girl in rain)
// m_zm0xjkxrjh7vqxm3nd70qva49bnngn (dev halide - skeletal pose)
// m_p4chw32084te7dv8t4jc3bjfmafmjh (dev halide - water shader)
"image_media_tokens": ["m_4n0p3ve9qew899774pg6w03vgzb6af", "m_9y8hy50582mwxpm8hxmh4n4wjeh5cr", "m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb"],
"prompt": "Put the stars above the beach scene at night, add the cube on the beach."
}
order: 4000
@@ -0,0 +1,22 @@
$kind: http-request
name: Bytedance Seedream 4.5 (text to image)
url: "{{api_host}}/v1/generate/image/multi_function/bytedance_seedream_4p5"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
"prompt": "A large dinosaur looks inside a house from outside. It's looking for food. Big t-rex. Scary. Photorealistic. Face in the window.",
"number_images": 2
}
order: 6000
@@ -0,0 +1,22 @@
$kind: http-request
name: Bytedance Seedream 5 Lite
url: "{{api_host}}/v1/generate/image/multi_function/bytedance_seedream_5_lite"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
"prompt": "A large dinosaur looks inside a house from outside. It's looking for food. Big t-rex. Scary. Photorealistic. Face in the window.",
"number_images": 2
}
order: 7000
@@ -0,0 +1,32 @@
$kind: http-request
name: GPT Image 1.5 (edit image)
url: "{{api_host}}/v1/generate/image/multi_function/gpt_image_1p5"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
// m_9y8hy50582mwxpm8hxmh4n4wjeh5cr (dev - stars)
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev - cube)
// m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1 (dev - studio alley screenshot)
// m_gn0yvdvd8mw71m5n8whxsa6ywgsdb2 (dev halide - link)
// m_7jjskg45d8b00tsp5nxee0xjsr2fqw (dev halide - link again)
// m_5hhwgx47tzc68ms2ydkkwrdjakwtxk (dev halide - asian girl in rain)
// m_zm0xjkxrjh7vqxm3nd70qva49bnngn (dev halide - skeletal pose)
// m_p4chw32084te7dv8t4jc3bjfmafmjh (dev halide - water shader)
"image_media_tokens": ["m_4n0p3ve9qew899774pg6w03vgzb6af", "m_9y8hy50582mwxpm8hxmh4n4wjeh5cr", "m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb"],
"prompt": "Put the stars above the beach scene at night, add the cube on the beach."
}
order: 3000
@@ -0,0 +1,22 @@
$kind: http-request
name: GPT Image 1.5 (text to image)
url: "{{api_host}}/v1/generate/image/flux_1_dev_text_to_image"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
"prompt": "A large dinosaur looks inside a house from outside. It's looking for food. Big t-rex. Scary. Photorealistic. Face in the window.",
"number_images": 2
}
order: 5000
@@ -0,0 +1,20 @@
$kind: http-request
name: Nano Banana 2
url: "{{api_host}}/v1/generate/image/multi_function/nano_banana_2"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
body:
type: json
content: |
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p4chw32084te7dv8t4jc3bjfmafmjh (these tokens are invalid)
//"image_media_tokens": [],
"prompt": "A t-rex jumping rope, photorealistic. The t-rex is nervous."
}
order: 2000
@@ -0,0 +1,30 @@
$kind: http-request
name: Nano Banana Pro (reference image)
url: "{{api_host}}/v1/generate/image/multi_function/nano_banana_pro"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
// m_9y8hy50582mwxpm8hxmh4n4wjeh5cr (dev - stars)
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev - cube)
// m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1 (dev - studio alley screenshot)
// m_gn0yvdvd8mw71m5n8whxsa6ywgsdb2 (dev halide - link)
// m_7jjskg45d8b00tsp5nxee0xjsr2fqw (dev halide - link again)
// m_5hhwgx47tzc68ms2ydkkwrdjakwtxk (dev halide - asian girl in rain)
// m_zm0xjkxrjh7vqxm3nd70qva49bnngn (dev halide - skeletal pose)
// m_p4chw32084te7dv8t4jc3bjfmafmjh (dev halide - water shader)
"image_media_tokens": ["m_gn0yvdvd8mw71m5n8whxsa6ywgsdb2", "m_5hhwgx47tzc68ms2ydkkwrdjakwtxk", "m_p4chw32084te7dv8t4jc3bjfmafmjh"],
"prompt": "Add the man and the girl to the water scene. Make them hold hands."
}
order: 1000
@@ -0,0 +1,2 @@
$kind: collection
order: 3000
@@ -0,0 +1,23 @@
$kind: http-request
name: Generate Hunyuan 2 Image to 3d
url: "{{api_host}}/v1/generate/object/hunyuan_2_image_to_3d"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: ""
value: ""
disabled: true
body:
type: json
content: |-
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod)
"media_file_token": "m_z8v3nrjssha8rj5ayk51g85wef2cz9"
}
order: 2000
@@ -0,0 +1,2 @@
$kind: collection
order: 1000
@@ -0,0 +1,31 @@
$kind: http-request
name: Generate Hunyuan 3D v3 Image to Object
url: "{{api_host}}/v1/generate/object/multi_function/hunyuan3d_v3"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: ""
value: ""
disabled: true
body:
type: json
content: |-
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
// m_9y8hy50582mwxpm8hxmh4n4wjeh5cr (dev - stars)
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev - cube)
// m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1 (dev - studio alley screenshot)
// m_gn0yvdvd8mw71m5n8whxsa6ywgsdb2 (dev halide - link)
// m_7jjskg45d8b00tsp5nxee0xjsr2fqw (dev halide - link again)
// m_5hhwgx47tzc68ms2ydkkwrdjakwtxk (dev halide - asian girl in rain)
// m_zm0xjkxrjh7vqxm3nd70qva49bnngn (dev halide - skeletal pose)
// m_p4chw32084te7dv8t4jc3bjfmafmjh (dev halide - water shader)
"image_media_token": "m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1"
}
order: 1000
@@ -0,0 +1,21 @@
$kind: http-request
name: Generate Hunyuan 3D v3 Text to Object
url: "{{api_host}}/v1/generate/object/multi_function/hunyuan3d_v3"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: ""
value: ""
disabled: true
body:
type: json
content: |-
{
"uuid_idempotency_token": "{{$randomUUID}}",
"prompt": "a large blue dragon with a smile"
}
order: 2000
@@ -0,0 +1,2 @@
$kind: collection
order: 4000
@@ -0,0 +1,21 @@
$kind: http-request
name: Marble 0.1 Mini
url: "{{api_host}}/v1/generate/splat/worldlabs_marble_0p1_mini"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: |
{
"uuid_idempotency_token": "{{$randomUUID}}",
"prompt": "A hidden forest grotto, fireflies, lush green"
}
order: 1000
@@ -0,0 +1,2 @@
$kind: collection
order: 2000
@@ -0,0 +1,24 @@
$kind: http-request
name: Generate Kling 1.6 Video
url: "{{api_host}}/v1/generate/video/kling_1.6_pro_image_to_video"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
body:
type: json
content: >-
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_mxr5s0qpbj0w321pqcw7s2pj93c962 (dev - container ship)
// m_f249t2nb8nggqd7ynpsjps5qmym5h3 (dev - oil tanker)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod)
"media_file_token": "m_mxr5s0qpbj0w321pqcw7s2pj93c962",
"end_frame_image_media_token": "m_f249t2nb8nggqd7ynpsjps5qmym5h3",
"prompt": "A large ship in a lake, the camera pulls back and shows the oil tanker from overhead"
}
order: 2000
@@ -0,0 +1,24 @@
$kind: http-request
name: Generate Kling 2.1 Pro Video
url: "{{api_host}}/v1/generate/video/kling_2.1_pro_image_to_video"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
body:
type: json
content: >-
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev) - cube
// m_mxr5s0qpbj0w321pqcw7s2pj93c962 (dev - container ship)
// m_f249t2nb8nggqd7ynpsjps5qmym5h3 (dev - oil tanker)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod)
"media_file_token": "m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb",
"end_frame_image_media_token": "m_f249t2nb8nggqd7ynpsjps5qmym5h3",
"prompt": "A large ship in a lake, the camera pulls back and shows the oil tanker from overhead"
}
order: 3000
@@ -0,0 +1,2 @@
$kind: collection
order: 1000
@@ -0,0 +1,33 @@
$kind: http-request
name: Kling 2.5 Turbo Pro (image to video)
url: "{{api_host}}/v1/generate/video/multi_function/kling_2p5_turbo_pro"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: |
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
// m_9y8hy50582mwxpm8hxmh4n4wjeh5cr (dev - stars)
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev - cube)
// m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1 (dev - studio alley screenshot)
// m_gn0yvdvd8mw71m5n8whxsa6ywgsdb2 (dev halide - link)
// m_7jjskg45d8b00tsp5nxee0xjsr2fqw (dev halide - link again)
// m_5hhwgx47tzc68ms2ydkkwrdjakwtxk (dev halide - asian girl in rain)
// m_zm0xjkxrjh7vqxm3nd70qva49bnngn (dev halide - skeletal pose)
// m_p4chw32084te7dv8t4jc3bjfmafmjh (dev halide - water shader)
"start_frame_image_media_token": "m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1",
"prompt": "The camera is zooming by. It shows the full city"
}
order: 5000
@@ -0,0 +1,33 @@
$kind: http-request
name: Kling 2.6 Pro (image to video)
url: "{{api_host}}/v1/generate/video/multi_function/kling_2p6_pro"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: |
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
// m_9y8hy50582mwxpm8hxmh4n4wjeh5cr (dev - stars)
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev - cube)
// m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1 (dev - studio alley screenshot)
// m_gn0yvdvd8mw71m5n8whxsa6ywgsdb2 (dev halide - link)
// m_7jjskg45d8b00tsp5nxee0xjsr2fqw (dev halide - link again)
// m_5hhwgx47tzc68ms2ydkkwrdjakwtxk (dev halide - asian girl in rain)
// m_zm0xjkxrjh7vqxm3nd70qva49bnngn (dev halide - skeletal pose)
// m_p4chw32084te7dv8t4jc3bjfmafmjh (dev halide - water shader)
"start_frame_image_media_token": "m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1",
"prompt": "The camera is zooming by. It shows the full city"
}
order: 6000
@@ -0,0 +1,28 @@
$kind: http-request
name: Kling 3.0 Pro (image to video)
url: "{{api_host}}/v1/generate/video/multi_function/kling_3p0_pro"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
// m_9y8hy50582mwxpm8hxmh4n4wjeh5cr (dev - stars)
// m_p4chw32084te7dv8t4jc3bjfmafmjh (dev halide - water shader)
"start_frame_image_media_token": "m_8q0hx7g06dfrf28xxhjkgjhwcnqtbz",
"end_frame_image_media_token": "m_8q0hx7g06dfrf28xxhjkgjhwcnqtbz",
"prompt": "The corgi dances in a loop and then returns back to where it started"
}
order: 7000
@@ -0,0 +1,31 @@
$kind: http-request
name: Seedance 1.5 Pro (frame to video)
url: "{{api_host}}/v1/generate/video/multi_function/seedance_1p5_pro"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_gn0yvdvd8mw71m5n8whxsa6ywgsdb2 (dev halide - link)
// m_7jjskg45d8b00tsp5nxee0xjsr2fqw (dev halide - link again)
// m_5hhwgx47tzc68ms2ydkkwrdjakwtxk (dev halide - asian girl in rain)
// m_zm0xjkxrjh7vqxm3nd70qva49bnngn (dev halide - skeletal pose)
// m_p4chw32084te7dv8t4jc3bjfmafmjh (dev halide - water shader)
// m_wfyggg046gp7tqvexd9xar4t6zr5yj (artcraft mac - trains)
// m_qty2g150r6ppkbapnryc4fx4ayf8rh (artcraft mac - trains wide)
"prompt": "A subway and a passenger train are moving along outside the window. The camera pans out to show a wider view of the city and trains.",
"start_frame_media_token": "m_wfyggg046gp7tqvexd9xar4t6zr5yj",
"end_frame_media_token": "m_qty2g150r6ppkbapnryc4fx4ayf8rh"
}
order: 2000
@@ -0,0 +1,22 @@
$kind: http-request
name: Seedance 1.5 Pro (text to video)
url: "{{api_host}}/v1/generate/video/multi_function/seedance_1p5_pro"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: |
{
"uuid_idempotency_token": "{{$randomUUID}}",
"prompt": "A giant is walking around in a forest",
"duration_seconds": 4
}
order: 1000
@@ -0,0 +1,31 @@
$kind: http-request
name: Seedance 2.0 (frame to video)
url: "{{api_host}}/v1/generate/video/multi_function/seedance_2p0"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_gn0yvdvd8mw71m5n8whxsa6ywgsdb2 (dev halide - link)
// m_7jjskg45d8b00tsp5nxee0xjsr2fqw (dev halide - link again)
// m_5hhwgx47tzc68ms2ydkkwrdjakwtxk (dev halide - asian girl in rain)
// m_zm0xjkxrjh7vqxm3nd70qva49bnngn (dev halide - skeletal pose)
// m_p4chw32084te7dv8t4jc3bjfmafmjh (dev halide - water shader)
// m_wfyggg046gp7tqvexd9xar4t6zr5yj (artcraft mac - trains)
// m_qty2g150r6ppkbapnryc4fx4ayf8rh (artcraft mac - trains wide)
"prompt": "A subway and a passenger train are moving along outside the window. The camera pans out to show a wider view of the city and trains.",
"start_frame_media_token": "m_wfyggg046gp7tqvexd9xar4t6zr5yj",
"end_frame_media_token": "m_qty2g150r6ppkbapnryc4fx4ayf8rh"
}
order: 4000
@@ -0,0 +1,22 @@
$kind: http-request
name: Seedance 2.0 (text to video)
url: "{{api_host}}/v1/generate/video/multi_function/seedance_2p0"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: |
{
"uuid_idempotency_token": "{{$randomUUID}}",
"prompt": "A red panda is is walking around in a forest",
"duration_seconds": 4
}
order: 3000
@@ -0,0 +1,33 @@
$kind: http-request
name: Sora 2 (image to video)
url: "{{api_host}}/v1/generate/video/multi_function/sora_2"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
// m_9y8hy50582mwxpm8hxmh4n4wjeh5cr (dev - stars)
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev - cube)
// m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1 (dev - studio alley screenshot)
// m_gn0yvdvd8mw71m5n8whxsa6ywgsdb2 (dev halide - link)
// m_7jjskg45d8b00tsp5nxee0xjsr2fqw (dev halide - link again)
// m_5hhwgx47tzc68ms2ydkkwrdjakwtxk (dev halide - asian girl in rain)
// m_zm0xjkxrjh7vqxm3nd70qva49bnngn (dev halide - skeletal pose)
// m_p4chw32084te7dv8t4jc3bjfmafmjh (dev halide - water shader)
"image_media_token": "m_9y8hy50582mwxpm8hxmh4n4wjeh5cr",
"prompt": "The stars twinkle. There's a shooting star. The camera lowers to show the night sky above the forest"
}
order: 10000
@@ -0,0 +1,33 @@
$kind: http-request
name: Sora 2 Pro (image to video)
url: "{{api_host}}/v1/generate/video/multi_function/sora_2_pro"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
// m_9y8hy50582mwxpm8hxmh4n4wjeh5cr (dev - stars)
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev - cube)
// m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1 (dev - studio alley screenshot)
// m_gn0yvdvd8mw71m5n8whxsa6ywgsdb2 (dev halide - link)
// m_7jjskg45d8b00tsp5nxee0xjsr2fqw (dev halide - link again)
// m_5hhwgx47tzc68ms2ydkkwrdjakwtxk (dev halide - asian girl in rain)
// m_zm0xjkxrjh7vqxm3nd70qva49bnngn (dev halide - skeletal pose)
// m_p4chw32084te7dv8t4jc3bjfmafmjh (dev halide - water shader)
"image_media_token": "m_9y8hy50582mwxpm8hxmh4n4wjeh5cr",
"prompt": "The stars twinkle. There's a shooting star. The camera lowers to show the night sky above the forest"
}
order: 11000
@@ -0,0 +1,33 @@
$kind: http-request
name: Veo 3.1 (image to video) Copy
url: "{{api_host}}/v1/generate/video/multi_function/veo_3p1"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
// m_9y8hy50582mwxpm8hxmh4n4wjeh5cr (dev - stars)
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev - cube)
// m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1 (dev - studio alley screenshot)
// m_gn0yvdvd8mw71m5n8whxsa6ywgsdb2 (dev halide - link)
// m_7jjskg45d8b00tsp5nxee0xjsr2fqw (dev halide - link again)
// m_5hhwgx47tzc68ms2ydkkwrdjakwtxk (dev halide - asian girl in rain)
// m_zm0xjkxrjh7vqxm3nd70qva49bnngn (dev halide - skeletal pose)
// m_p4chw32084te7dv8t4jc3bjfmafmjh (dev halide - water shader)
"start_frame_image_media_token": "m_9y8hy50582mwxpm8hxmh4n4wjeh5cr",
"prompt": "The stars twinkle. There's a shooting star. The camera lowers to show the night sky above the forest"
}
order: 8000
@@ -0,0 +1,33 @@
$kind: http-request
name: Veo 3.1 Fast (image to video)
url: "{{api_host}}/v1/generate/video/multi_function/veo_3p1_fast"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: >
{
"uuid_idempotency_token": "{{$randomUUID}}",
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev)
// m_z8v3nrjssha8rj5ayk51g85wef2cz9 (prod - godzilla stacks)
// m_4n0p3ve9qew899774pg6w03vgzb6af (dev - beach)
// m_9y8hy50582mwxpm8hxmh4n4wjeh5cr (dev - stars)
// m_p2hvrt9zd0mmexy7x5r7n8bx9ma3zb (dev - cube)
// m_w7cpyqr45d11fw9ca1wbkxp1q3kxs1 (dev - studio alley screenshot)
// m_gn0yvdvd8mw71m5n8whxsa6ywgsdb2 (dev halide - link)
// m_7jjskg45d8b00tsp5nxee0xjsr2fqw (dev halide - link again)
// m_5hhwgx47tzc68ms2ydkkwrdjakwtxk (dev halide - asian girl in rain)
// m_zm0xjkxrjh7vqxm3nd70qva49bnngn (dev halide - skeletal pose)
// m_p4chw32084te7dv8t4jc3bjfmafmjh (dev halide - water shader)
"start_frame_image_media_token": "m_9y8hy50582mwxpm8hxmh4n4wjeh5cr",
"prompt": "The stars twinkle. There's a shooting star. The camera lowers to show the night sky above the forest"
}
order: 9000
@@ -0,0 +1,2 @@
$kind: collection
order: 9000
@@ -0,0 +1,28 @@
$kind: http-request
name: Prompt Image
url: "{{api_host}}/v1/image_studio/prompt"
method: POST
headers:
- key: Session
value: ""
disabled: true
- key: Accept
value: application/json
- key: sora-bearer
value: ""
disabled: true
- key: sora-cookie
value: ""
disabled: true
- key: sora-sentinel
value: ""
disabled: true
body:
type: json
content: >-
{
"uuid_idempotency_token": "{{$randomUUID}}",
"snapshot_media_token": "m_kaghwk8vsn5yw1qp6q7yzbx9szfgwe",
"prompt": "Match the provided image's composition and pose exactly as a reference. The characters should have the exact body poses, and the layouts of buildings and props should be close to exact. A girl standing in the middle of a clock town. N64 aesthetic."
}
order: 2000
@@ -0,0 +1,22 @@
$kind: http-request
name: Upload Scene Snapshot
url: "{{api_host}}/v1/image_studio/scene_snapshot"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
body:
type: formdata
content:
- type: text
key: uuid_idempotency_token
value: "{{$randomUUID}}"
disabled: false
- type: file
key: snapshot
src: []
disabled: false
order: 1000
@@ -0,0 +1,2 @@
$kind: collection
order: 5000
@@ -0,0 +1,2 @@
$kind: collection
order: 1000
@@ -0,0 +1,25 @@
$kind: http-request
name: Enqueue Studio Gen2 (Dev)
url: "{{api_host}}/v1/studio_gen2/enqueue"
method: POST
headers:
- key: Accept
value: application/json
- key: Cookie
value: ""
disabled: true
body:
type: json
content: |-
{
"uuid_idempotency_token": "{{$randomUUID}}",
"image_file": "m_btkn9vng12j2bw9tm7dcbg8vp5bd3a",
"video_file": "m_12h6ymaj4szk7ffhdj01n7c8x0d7ds",
"debug_sleep_millis": 600000,
"debug_kill_old_jobs": true,
"skip_image_resize": true,
"tensor_image_width": 512,
"tensor_image_height": 768
}
order: 2000
@@ -0,0 +1,22 @@
$kind: http-request
name: Enqueue Studio Gen2 (Prod)
url: "{{api_host}}/v1/studio_gen2/enqueue"
method: POST
headers:
- key: Accept
value: application/json
- key: Cookie
value: ""
disabled: true
body:
type: json
content: |-
{
"uuid_idempotency_token": "{{$randomUUID}}",
"image_file": "m_5kdgmdrfm6psvyq4df7h50jwhc6be4",
"video_file": "m_hehnjnzkcf98gcmdx5g6ws85w7c2m3",
"output_width": 1024,
"output_height": 576,
"debug_sleep_millis": 600000
}
order: 3000
@@ -0,0 +1,24 @@
$kind: http-request
name: Enqueue Studio Gen2
url: "{{api_host}}/v1/studio_gen2/enqueue"
method: POST
headers:
- key: Accept
value: application/json
- key: Cookie
value: ""
disabled: true
body:
type: json
content: |-
{
"uuid_idempotency_token": "{{$randomUUID}}",
"image_file": "m_9b4bk5bqah5k1ek2p9tmr1726c85yb",
"video_file": "m_mzensqsx1fx82n7wqz3xknfw3qahfp",
"output_width": 512,
"output_height": 768,
"debug_sleep_millis": 60000,
"debug_kill_old_jobs": true,
"fps": 8
}
order: 1000
@@ -0,0 +1,6 @@
$kind: http-request
url: http://localhost:12345/v1/jobs/job/jinf_avdrxxv3dv04dfxh3jej57vbby2
method: DELETE
headers:
Accept: application/json
order: 6000
@@ -0,0 +1,6 @@
$kind: http-request
url: "{{api_host}}/v1/jobs/job/jinf_fr522a4fv7jwz59pta1cjh630cm"
method: DELETE
headers:
Accept: application/json
order: 5000
@@ -0,0 +1,6 @@
$kind: http-request
url: "{{api_host}}/v1/jobs/job/jinf_avdrxxv3dv04dfxh3jej57vbby2"
method: GET
headers:
Accept: application/json
order: 4000
@@ -0,0 +1,11 @@
$kind: http-request
name: List Session Jobs (localhost)
url: http://localhost:12345/v1/jobs/session
method: GET
headers:
- key: Accept
value: application/json
- key: Cookie
value: ""
disabled: true
order: 3000
@@ -0,0 +1,6 @@
$kind: http-request
url: "{{api_host}}/v1/jobs/session"
method: GET
headers:
Accept: application/json
order: 2000
@@ -0,0 +1,2 @@
$kind: collection
order: 7000
@@ -0,0 +1,14 @@
$kind: http-request
url: "{{api_host}}/v1/media_files/file/m_6hjpa9q8269h7n7rg5vk8zr82cxhx9"
method: DELETE
headers:
Accept: application/json
Content-Type: application/json
body:
type: json
content: |-
{
"as_mod": true,
"set_delete": true
}
order: 1000
@@ -0,0 +1,33 @@
$kind: http-request
name: Upload Engine Asset
url: "{{api_host}}/v1/media_files/upload/engine_asset"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Cookie
value: ""
disabled: true
body:
type: formdata
content:
- type: text
key: maybe_title
value: Walls and Floors
disabled: false
- type: text
key: uuid_idempotency_token
value: "{{$randomUUID}}"
disabled: false
- type: file
key: file
src: []
disabled: false
- type: text
key: source
value: file
disabled: false
order: 9000
@@ -0,0 +1,26 @@
$kind: http-request
name: Upload Image
url: "{{api_host}}/v1/media_files/upload/image"
method: POST
headers:
- key: Accept
value: application/json
- key: Cookie
value: ""
disabled: true
body:
type: formdata
content:
- type: text
key: maybe_title
value: Foo Bar Baz
disabled: false
- type: text
key: uuid_idempotency_token
value: "{{$randomUUID}}"
disabled: false
- type: file
key: file
src: []
disabled: false
order: 4000
@@ -0,0 +1,24 @@
$kind: http-request
name: Upload Media File (Generic - don't use unless necessary)
url: "{{api_host}}/v1/media_files/upload"
method: POST
headers:
- key: Accept
value: application/json
- key: Cookie
value: ""
disabled: true
body:
type: formdata
content:
- type: text
key: maybe_title
value: Foo Bar Baz
disabled: true
- type: text
key: uuid_idempotency_token
value: "{{$randomUUID}}"
- type: file
key: file
src: []
order: 5000
@@ -0,0 +1,42 @@
$kind: http-request
name: Upload New Engine Asset
url: "{{api_host}}/v1/media_files/upload/new_engine_asset"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Cookie
value: ""
disabled: true
body:
type: formdata
content:
- type: file
key: file
src: []
disabled: false
- type: text
key: maybe_title
value: |
Courtyard
disabled: false
- type: text
key: uuid_idempotency_token
value: "{{$randomUUID}}"
disabled: false
- type: text
key: source
value: file
disabled: false
- type: text
key: file
value: asdf
disabled: true
- type: text
key: engine_category
value: object
disabled: false
order: 11000
@@ -0,0 +1,26 @@
$kind: http-request
name: Upload New Engine Asset
url: "{{api_host}}/v1/media_files/upload/new_engine_asset"
method: POST
headers:
- key: Accept
value: application/json
- key: session
value: ""
disabled: true
body:
type: formdata
content:
- type: text
key: maybe_title
value: Foo Bar Baz
- type: text
key: uuid_idempotency_token
value: "{{$randomUUID}}"
- type: file
key: file
src: /Users/bt/dev/storyteller/assets/engineer_test_files/pikachu.glb
- type: text
key: engine_category
value: expression
order: 2000
@@ -0,0 +1,38 @@
$kind: http-request
name: Upload New Video
url: "{{api_host}}/v1/media_files/upload/new_video"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
body:
type: formdata
content:
- type: text
key: maybe_title
value: Foo Bar Baz
disabled: false
- type: text
key: uuid_idempotency_token
value: "{{$randomUUID}}"
disabled: false
- type: file
key: file
src: []
disabled: false
- type: text
key: maybe_resample_fps
value: "8"
disabled: true
- type: text
key: maybe_trim_start_millis
value: "3000"
disabled: false
- type: text
key: maybe_trim_end_millis
value: "2000"
disabled: true
order: 7000
@@ -0,0 +1,30 @@
$kind: http-request
name: Upload Pmx
url: "{{api_host}}/v1/media_files/upload/pmx"
method: POST
headers:
- key: Accept
value: application/json
- key: Cookie
value: ""
disabled: true
body:
type: formdata
content:
- type: text
key: maybe_title
value: Foo Bar Baz
disabled: false
- type: text
key: uuid_idempotency_token
value: "{{$randomUUID}}"
disabled: false
- type: file
key: file
src: []
disabled: false
- type: text
key: engine_category
value: character
disabled: false
order: 3000
@@ -0,0 +1,29 @@
$kind: http-request
name: Upload Spz
url: "{{api_host}}/v1/media_files/upload/spz"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Cookie
value: ""
disabled: true
body:
type: formdata
content:
- type: text
key: maybe_title
value: Splat File
disabled: false
- type: text
key: uuid_idempotency_token
value: "{{$randomUUID}}"
disabled: false
- type: file
key: file
src: []
disabled: false
order: 10000
@@ -0,0 +1,23 @@
$kind: http-request
name: Upload Studio Shot (upload hostname)
url: https://upload.storyteller.ai/v1/media_files/upload/studio_shot
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
body:
type: formdata
content:
- type: text
key: maybe_title
value: Foo Bar Baz
- type: text
key: uuid_idempotency_token
value: "{{$randomUUID}}"
- type: file
key: file
src: /Users/bt/dev/storyteller/temp/frames.zip
order: 8000
@@ -0,0 +1,26 @@
$kind: http-request
name: Upload Studio Shot
url: https://upload.storyteller.ai/v1/media_files/upload/studio_shot
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
body:
type: formdata
content:
- type: text
key: maybe_title
value: Foo Bar Baz
disabled: false
- type: text
key: uuid_idempotency_token
value: "{{$randomUUID}}"
disabled: false
- type: file
key: file
src: []
disabled: false
order: 6000
@@ -0,0 +1,2 @@
$kind: collection
order: 1000
@@ -0,0 +1,21 @@
$kind: http-request
name: Send Alert
url: "{{api_host}}/v1/moderation/alerts/send"
method: POST
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: json
content: |
{
"title": "test alert from thread 2",
"description": "testing testing test"
}
order: 1000
@@ -0,0 +1,2 @@
$kind: collection
order: 4000
@@ -0,0 +1,20 @@
$kind: http-request
name: List Image Models
url: "{{api_host}}/v1/omni_gen/models/image"
method: GET
headers:
- key: Accept
value: application/json
- key: Session
value: ""
disabled: true
- key: Session
value: ""
disabled: true
body:
type: text
content: |
{
"title": "test alert"
}
order: 1000

Some files were not shown because too many files have changed in this diff Show More