Compare commits

...
Author SHA1 Message Date
bflatastic 351df69072 brush icon and active mode 2025-07-07 15:49:27 +07:00
bflatastic aef01dbde3 canvas annoying scroll and fit logic fixed 2025-07-07 15:32:13 +07:00
Kasisnu b749aa5d6a feat: super basic windows tauri action 2025-07-03 12:50:25 +05:30
Brandon Thomas ef8ccf149f Update documentation 2025-07-01 20:06:05 -04:00
Brandon Thomas 324bfc0964 move api clients crate to top-level of workspace for visibility 2025-07-01 18:50:51 -04:00
BFlat a4ee0eec15 resizable gallery modal and minimum size (#698)
- bug fix for expanded modal conflicting with resized size (not going full screen)
- gallery modal now resizable with set minimum size
- set a minimum size for lightbox resize
2025-07-01 10:19:48 +07:00
Brandon Thomas d8b8b4a037 remove unused imports (#697) 2025-06-30 00:03:52 -04:00
Brandon Thomas a842df3774 fix api docs 2025-06-29 22:22:25 -04:00
Brandon Thomas 4b3df535b5 configure provider priority and dispatch based on it (#696) 2025-06-27 21:15:31 -04:00
ArEnScandCrossPr0duct 3d06f89477 Feature/aspect ratio (#682)
Co-authored-by: CrossPr0duct <alicextensor@gmail.com>
2025-06-26 14:09:52 -04:00
CrossPr0duct d007cb81d5 Fix Drag and Drop Image, I had thought this change was already in. 2025-06-25 16:40:41 -04:00
CrossPr0duct 221d8bb95a the two magic undocumented values that will actually have this work without a bunch of code. 2025-06-25 15:52:33 -04:00
587 changed files with 2093 additions and 2453 deletions
@@ -0,0 +1,96 @@
name: "Artcraft Windows Publish"
on:
push:
branches:
- release
- artcraft-release
- artcraft-windows # Additional branch for Windows testing
# This workflow creates Windows builds.
# On each push to the release branches it will create or update a GitHub release, build your app, and upload the artifacts to the release.
jobs:
publish-artcraft-windows:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
# Windows builds
- platform: 'windows-latest'
args: ''
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- name: setup node
uses: actions/setup-node@v4
with:
node-version: lts/*
- name: install Rust stable
uses: dtolnay/rust-toolchain@stable
- name: install frontend dependencies
run: |
# Navigate to the frontend directory to install dependencies
cd ./frontend
yarn cache clean
echo "Installing all workspace dependencies..."
yarn install --production=false --frozen-lockfile
echo "=== Version Information ==="
echo "Node version:"
node --version
echo "NPM version:"
npm --version
echo "Yarn version:"
yarn --version
# Remove mismatched @nx packages and reinstall with correct versions
yarn add @nx/remix@20.7.2 @nx/js@20.7.2 @nx/react@20.7.2 @nx/vite@20.7.2 @nx/eslint@20.7.2 --dev -W
echo "=== Nx versions after adjustment ==="
yarn list --pattern "nx" --depth=0
- name: Pre-build frontend to avoid Tauri build issues
run: |
# Build the frontend app from the correct directory
cd ./frontend
# Increase Node.js memory limit for the build
$env:NODE_OPTIONS="--max-old-space-size=8192"
# Use npx to ensure we use the local nx version
echo "Building with npx nx..."
npx nx run editor3d:build
echo "Checking build output..."
dir apps/editor3d/dist/ | Select-Object -First 10
# Update Tauri config to skip the build (since we already built)
cd ${{ github.workspace }}/crates/desktop/artcraft
Copy-Item tauri.conf.json tauri.conf.json.bak
# Set beforeBuildCommand to empty using PowerShell
$config = Get-Content tauri.conf.json | ConvertFrom-Json
$config.build.beforeBuildCommand = ""
$config | ConvertTo-Json -Depth 10 | Set-Content tauri.conf.json
- name: build and publish
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
projectPath: ./crates/desktop/artcraft
tagName: artcraft-windows-v__VERSION__ # the action automatically replaces __VERSION__ with the app version.
releaseName: "Artcraft Windows v__VERSION__"
releaseBody: "Windows build - See the assets to download this version and install."
releaseDraft: true
prerelease: false
args: ${{ matrix.args }}
Generated
+1 -1
View File
@@ -2765,7 +2765,7 @@ dependencies = [
"log",
"mimetypes",
"mysql_queries",
"rand 0.8.5",
"rand 0.9.1",
"sqlx",
"storyteller_root",
"tokens",
+17 -13
View File
@@ -4,6 +4,18 @@ resolver = "2"
# This block defines the workspace members.
# When we add a library or binary crate, it needs an entry here.
members = [
# API clients for external services
# These might be custom implementations or wrappers over other client libraries.
"crates/api_clients/cloud_storage",
"crates/api_clients/fal_client",
"crates/api_clients/google_drive_common",
"crates/api_clients/google_sign_in",
"crates/api_clients/openai_sora_client",
"crates/api_clients/openart_client",
"crates/api_clients/runwayml_client",
"crates/api_clients/storyteller_client",
"crates/api_clients/thumbnail_generator",
# CLI tools for operations, etc.
"crates/cli/devenv/dev-database-seed",
"crates/cli/devenv/dev-upload-media-file",
@@ -22,15 +34,6 @@ members = [
# Shared libraries
"crates/lib/actix_cors_configs",
"crates/lib/actix_helpers",
"crates/lib/api_clients/cloud_storage",
"crates/lib/api_clients/fal_client",
"crates/lib/api_clients/google_drive_common",
"crates/lib/api_clients/google_sign_in",
"crates/lib/api_clients/openai_sora_client",
"crates/lib/api_clients/openart_client",
"crates/lib/api_clients/runwayml_client",
"crates/lib/api_clients/storyteller_client",
"crates/lib/api_clients/thumbnail_generator",
"crates/lib/bootstrap",
"crates/lib/bucket_paths",
"crates/lib/build_metadata",
@@ -210,11 +213,12 @@ url = { version = "2.5.4", features = ["serde"] }
# Internal libs
artcraft_api_defs = { path = "crates/schema/public/api/artcraft_api_defs" }
build_metadata = { path = "crates/lib/build_metadata" }
cloud_storage = { path = "crates/api_clients/cloud_storage" }
crockford = { path = "crates/lib/data/crockford" }
enums = { path = "crates/schema/public/enums" }
enums_public = { path = "crates/schema/public/enums_public" }
errors = { path = "crates/lib/errors" }
fal_client = { path = "crates/lib/api_clients/fal_client" }
fal_client = { path = "crates/api_clients/fal_client" }
file_to_base64_url = { path = "crates/lib/files/file_to_base64_url" }
filesys = { path = "crates/lib/files/filesys" }
idempotency = { path = "crates/lib/idempotency" }
@@ -223,10 +227,10 @@ jwt_light = { path = "crates/lib/jwt_light" }
memory_caching = { path = "crates/lib/caching/memory_caching" }
memory_store = { path = "crates/lib/caching/memory_store" }
mimetypes = { path = "crates/lib/files/mimetypes" }
openai_sora_client = { path = "crates/lib/api_clients/openai_sora_client" }
openai_sora_client = { path = "crates/api_clients/openai_sora_client" }
primitives = { path = "crates/lib/data/primitives" }
shared_service_components = { path = "crates/lib/shared_service_components" }
storyteller_client = { path = "crates/lib/api_clients/storyteller_client" }
storyteller_client = { path = "crates/api_clients/storyteller_client" }
subprocess_common = { path = "crates/lib/subprocess_common" }
tokens = { path = "crates/schema/public/tokens" }
web_base64= { path = "crates/lib/data/web_base64" }
web_base64 = { path = "crates/lib/data/web_base64" }
+4 -3
View File
@@ -1,7 +1,7 @@
storyteller-rust
================
Our Rust monorepo, which serves both our API surface area and our downloadable client applications.
Our Artcraft monorepo, which serves our desktop application, backend infrastructure, and more.
```
."-,.__
@@ -45,5 +45,6 @@ Our Rust monorepo, which serves both our API surface area and our downloadable c
/ ,"'"\,' `/ `-.|"
```
- [documentation](./_develop/docs)
- [tools, misc](./_develop)
- [developer documentation](./_docs)
- [server API reference](https://storyteller-docs.netlify.app/)
- [tools, scripts, misc](./script)
+26
View File
@@ -0,0 +1,26 @@
Code Conventions
================
We use three languages at Artcraft: Rust, TypeScript, and Python.
## Rust style guide
We deviate from the official Rust style guide in a few places:
- We use two spaces for indentation instead of four.
- We typically keep one function or type definition per file, though this isn't a steadfast rule.
- We use a Cargo workspace to share code within our monorepo.
### Rust Preferred Libraries
We use the following Rust libraries, though we are open to migrating to alternatives:
- `actix-web` for our HTTP web server
- `reqwest` for HTTP client requests
- `sqlx` for SQL database operations
- `tokio` for asynchronous programming
## TypeScript style guide
- We use two spaces for indentation instead of four.
- We use `nx` for monorepo management
@@ -1,5 +1,5 @@
FakeYou Development Setup (bare metal)
======================================
Local Development Setup Guide (for bare metal)
==============================================
This document describes how to run the FakeYou infrastructure on your development
machine's bare metal (no containers).
@@ -0,0 +1,42 @@
[package]
name = "cloud_storage"
edition = "2018"
version = "0.0.1"
authors = [
"Brandon Thomas <bt@brand.io>",
"Brandon Thomas <echelon@gmail.com>",
]
publish = false
[lib]
name = "cloud_storage"
path = "src/lib.rs"
[package.metadata.cargo-udeps.ignore]
normal = ["workspace-build-acceleration"]
[dependencies]
# Workspace hack (faster compile times)
workspace-build-acceleration.workspace = true
# Internal
bucket_paths = { path = "../../lib/bucket_paths" }
crockford.workspace = true
easyenv = { path = "../../lib/easyenv" }
errors.workspace = true
filesys.workspace = true
hashing = { path = "../../lib/files/hashing" }
mimetypes.workspace = true
storyteller_root = { path = "../../lib/storyteller_root" }
# External
anyhow.workspace = true
log.workspace = true
env_logger = "0.11.3"
async-trait = "0.1.75"
# The "never-encode-slash" feature seems to have been removed:
# https://github.com/durch/rust-s3/pull/254
rust-s3 = { version = "0.36.0-beta.2" }
# Runtime
tokio.workspace = true
@@ -8,27 +8,33 @@ authors = [
]
publish = false
[package.metadata.cargo-udeps.ignore]
normal = ["workspace-build-acceleration"]
[lib]
name = "fakeyou_client"
path = "src/lib.rs"
[dependencies]
# Workspace hack (faster compile times)
workspace-build-acceleration.workspace = true
# Internal
enums = { path = "../../../schema/public/enums" }
errors = { path = "../../errors" }
tokens = { path = "../../../schema/public/tokens" }
enums.workspace = true
errors.workspace = true
tokens.workspace = true
# External
bytes = "1.3"
chrono = { version = "0.4.22", features = ["serde"] }
log = "0.4.14"
once_cell = "1.9.0"
bytes.workspace = true
chrono.workspace = true
log.workspace = true
once_cell.workspace = true
# Serialization
serde = "1.0.125"
serde_derive = "1.0.125"
serde_json = "1.0.64"
toml = "0.5.8"
serde.workspace = true
serde_derive.workspace = true
serde_json.workspace = true
toml.workspace = true
# HTTP
backoff = { version = "0.4.0", features = ["futures"] } # Exponential backoff retry
@@ -12,27 +12,26 @@ name = "fal_client"
path = "src/lib.rs"
[dependencies]
# Workspace hack (faster compile times)
workspace-build-acceleration = { workspace = true }
workspace-build-acceleration.workspace = true
# Internal
file_to_base64_url = { workspace = true }
errors = { workspace = true }
file_to_base64_url.workspace = true
errors.workspace = true
# External
anyhow = { workspace = true }
futures = { workspace = true }
log = { workspace = true }
reqwest = { workspace = true }
serde = { workspace = true }
tokio = { workspace = true }
url = { workspace = true }
anyhow.workspace = true
futures.workspace = true
log.workspace = true
reqwest.workspace = true
serde.workspace = true
tokio.workspace = true
url.workspace = true
# For now, we'll vendor in fal.
# We need to implement webhooks and the upstream doesn't support them yet.
#fal = { version = "0.3.6", features = ["endpoints"] }
fal = { path = "../../../vendor/fal-rs", features = ["endpoints"] }
fal = { path = "../../vendor/fal-rs", features = ["endpoints"] }
[dev-dependencies]
testing = { path = "../../testing" }
testing = { path = "../../lib/testing" }
@@ -8,25 +8,24 @@ authors = [
]
publish = false
[package.metadata.cargo-udeps.ignore]
normal = ["workspace-build-acceleration"]
[lib]
name = "google_drive_common"
path = "src/lib.rs"
[package.metadata.cargo-udeps.ignore]
normal = ["workspace-build-acceleration"]
[dependencies]
# Workspace hack (faster compile times)
workspace-build-acceleration.workspace = true
# Internal
crockford = { path = "../../data/crockford" }
errors = { path = "../../errors" }
subprocess_common = { path = "../../subprocess_common" }
# Workspace hack (faster compile times)
workspace-build-acceleration = { version = "0.1", path = "../../../workspace-build-acceleration" }
crockford.workspace = true
errors.workspace = true
subprocess_common = { path = "../../lib/subprocess_common" }
# External
anyhow = "1.0.86"
log = "0.4.14"
tempdir = "0.3.7"
anyhow.workspace = true
log.workspace = true
tempdir.workspace = true
@@ -8,20 +8,20 @@ authors = [
]
publish = false
[package.metadata.cargo-udeps.ignore]
normal = ["workspace-build-acceleration"]
[lib]
# NB: Public "google_sign_in" crate does not exist, so we're fine to use this internally.
name = "google_sign_in"
path = "src/lib.rs"
[package.metadata.cargo-udeps.ignore]
normal = ["workspace-build-acceleration"]
[dependencies]
# Workspace hack (faster compile times)
workspace-build-acceleration = { version = "0.1", path = "../../../workspace-build-acceleration" }
workspace-build-acceleration.workspace = true
# Internal
errors = { path = "../../errors" }
errors.workspace = true
# External
@@ -29,13 +29,13 @@ errors = { path = "../../errors" }
jwt-simple = { version = "0.12.10" , default-features=false, features=["pure-rust"] }
base64 = "0.13"
reqwest = "0.12.7"
reqwest.workspace = true
# Serialization
serde = "1.0.125"
serde_derive = "1.0.125"
serde_json = "1.0.108"
serde.workspace = true
serde_derive.workspace = true
serde_json.workspace = true
[dev-dependencies]
testing = { path = "../../testing" }
testing = { path = "../../lib/testing" }
coarsetime = "0.1.34" # To set the clock for testing

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