diff --git a/easel/desktop/scripts/linux-download.html b/easel/desktop/scripts/linux-download.html index 825b7f13ab..f79c3d6f82 100644 --- a/easel/desktop/scripts/linux-download.html +++ b/easel/desktop/scripts/linux-download.html @@ -3,17 +3,17 @@

aesel downloads

Make pieces, pictures, sounds, papers and Game Boy games with Aesthetic Computer.

-

Download for Ubuntu / Debian

+

Download for Ubuntu / Debian

Version 0.7.0 · Intel / AMD 64-bit · Early release

cd ~/Downloads
-sudo apt install ./aesel-0.7.0-linux-amd64.deb
+sudo apt install ./Easel-0.7.0-linux-amd64.deb

Open aesel from your applications menu, or run easel. Sign in with your Aesthetic Computer account.

-

Other distributions: AppImage · Portable archive

-
chmod +x aesel-0.7.0-linux-x86_64.AppImage
-./aesel-0.7.0-linux-x86_64.AppImage
+

Other distributions: AppImage · Portable archive

+
chmod +x Easel-0.7.0-linux-x86_64.AppImage
+./Easel-0.7.0-linux-x86_64.AppImage

macOS

-

Download for Apple silicon

-

ZIP archive · signed and notarized · macOS 12+

+

Download for Apple silicon

+

ZIP archive · signed and notarized · macOS 12+

If FUSE is unavailable, try --appimage-extract-and-run. On Ubuntu, use the .deb above to install the required sandbox. Do not disable the sandbox.

aesel requires sharing conversations and artifact revision references with authorized Aesthetic Computer staff for product improvement, including when using your own provider. Read and accept the disclosure before use. Hosted generation requires account access; bringing your own Claude or Codex requires its CLI and account.

Tested on Ubuntu 24.04 x86-64. ARM builds are not included. SHA-256 checksums · Aesthetic Computer

diff --git a/easel/desktop/scripts/publish-mac.cjs b/easel/desktop/scripts/publish-mac.cjs index 7b23e4ca40..6c7a884f50 100644 --- a/easel/desktop/scripts/publish-mac.cjs +++ b/easel/desktop/scripts/publish-mac.cjs @@ -24,9 +24,10 @@ async function main() { const lines = (await existing.text()).trim().split('\n').filter(line => !line.endsWith(' ' + zip) && !line.endsWith(' ' + dmg)); lines.push(...[zip, dmg].map(name => `${digest(name, 'sha256', 'hex')} ${name}`)); fs.writeFileSync(path.join(dir, 'SHA256SUMS'), lines.join('\n') + '\n'); + fs.copyFileSync(path.join(__dirname, 'linux-download.html'), path.join(dir, 'index.html')); const client = new S3Client({ endpoint: process.env.SPACES_ENDPOINT || 'https://sfo3.digitaloceanspaces.com', region: 'us-east-1', credentials: { accessKeyId: process.env.SPACES_KEY, secretAccessKey: process.env.SPACES_SECRET }, requestChecksumCalculation: 'WHEN_REQUIRED', responseChecksumValidation: 'WHEN_REQUIRED' }); - for (const name of [zip, zip + '.blockmap', dmg, 'SHA256SUMS', 'latest-mac.yml']) { - await client.send(new PutObjectCommand({ Bucket: 'releases-aesthetic-computer', Key: 'easel/desktop/' + name, Body: fs.readFileSync(path.join(dir, name)), ACL: 'public-read', ContentType: name.endsWith('.yml') ? 'text/yaml' : 'application/octet-stream', CacheControl: name.startsWith('aesel-') ? 'public, max-age=31536000, immutable' : 'no-cache' })); + for (const name of [zip, zip + '.blockmap', dmg, 'SHA256SUMS', 'latest-mac.yml', 'index.html']) { + await client.send(new PutObjectCommand({ Bucket: 'releases-aesthetic-computer', Key: 'easel/desktop/' + name, Body: fs.readFileSync(path.join(dir, name)), ACL: 'public-read', ContentType: name.endsWith('.html') ? 'text/html; charset=utf-8' : name.endsWith('.yml') ? 'text/yaml' : 'application/octet-stream', CacheControl: name.startsWith('aesel-') ? 'public, max-age=31536000, immutable' : 'no-cache' })); console.log('Published ' + name); } } diff --git a/system/public/aesel.sh b/system/public/aesel.sh index 9b2b83d3fd..b8587a6cf0 100755 --- a/system/public/aesel.sh +++ b/system/public/aesel.sh @@ -27,7 +27,7 @@ PREFIX="${EASEL_PREFIX:-$HOME/.local/share/easel}" BIN="${EASEL_BIN:-$HOME/.local/bin}" # Node 18 is where fetch, and therefore both engine bridges, stopped needing a # flag. Below it nothing works and the failure is obscure, so check up front. -MIN_NODE=18 +MIN_NODE=22 say() { printf '%s\n' "$*"; } die() { printf '\n %s\n\n' "$*" >&2; exit 1; } diff --git a/system/public/aesel/index.html b/system/public/aesel/index.html index 00c4a38532..1dbb410591 100644 --- a/system/public/aesel/index.html +++ b/system/public/aesel/index.html @@ -14,7 +14,7 @@

Make art and software with AI.

- Download for Mac + Download for Mac
Apple silicon · macOS 12+ · Linux & more
@@ -24,7 +24,7 @@
-

Downloads

Sign in with Aesthetic Computer.
Use AC, Claude, or Codex.

Mac Apple silicon · DMG↓Linux Ubuntu / Debian · x86-64↓AppImage Other Linux desktops · x86-64↓
Terminalcurl -fsSL https://aesthetic.computer/aesel.sh | sh

Requires Node.js 18+. Run ac after installing.

Mac 0.7.1 · Linux 0.7.0 (Easel)

+

Downloads

Sign in with Aesthetic Computer.
Use AC, Claude, or Codex.

Mac Apple silicon · DMG↓Linux Ubuntu / Debian · x86-64↓AppImage Other Linux desktops · x86-64↓
Terminalcurl -fsSL https://aesthetic.computer/aesel.sh | sh

Requires Node.js 22+. Run ac after installing.

Mac 0.7.2 · Linux 0.7.0 (Easel)

diff --git a/system/public/easel.sh b/system/public/easel.sh index 9b2b83d3fd..b8587a6cf0 100644 --- a/system/public/easel.sh +++ b/system/public/easel.sh @@ -27,7 +27,7 @@ PREFIX="${EASEL_PREFIX:-$HOME/.local/share/easel}" BIN="${EASEL_BIN:-$HOME/.local/bin}" # Node 18 is where fetch, and therefore both engine bridges, stopped needing a # flag. Below it nothing works and the failure is obscure, so check up front. -MIN_NODE=18 +MIN_NODE=22 say() { printf '%s\n' "$*"; } die() { printf '\n %s\n\n' "$*" >&2; exit 1; }