कहानी: एक कैंसलेशन फ़ीस ज़्यादा
इन हफ़्तों में फ़ोरम और सोशल मीडिया पर जो कहानी घूम रही है, वह यह है कि ArtCraft गुस्से से पैदा हुआ: इसके लेखक के साथ «धोखा हुआ»। प्रोजेक्ट के पीछे ब्रैंडन थॉमस (Brandon Thomas) हैं, अटलांटा (अमेरिका) के सॉफ़्टवेयर इंजीनियर, पंद्रह साल के अनुभव वाले, जो Reddit पर u/ai_art_is_art नाम से लिखते थे। «धोखा» शब्द लोगों का है; वे ख़ुद बताते हैं कि Adobe ने उनसे सब्सक्रिप्शन की कैंसलेशन फ़ीस वसूली।
उन्होंने Reddit पर लिखा: «उन्होंने कई बार मुझसे ‘कैंसलेशन फ़ीस’ ली और तब से मैं उनसे नफ़रत करता हूँ।» Hacker News पर उन्होंने कहा कि वे इस «डार्क पैटर्न» में बहुत बार फँसे: महीने-दर-महीने भुगतान वाले सालाना प्लान को समय से पहले छोड़ने पर लगने वाला जुर्माना। यह अकेली शिकायत नहीं है: जून 2024 में अमेरिकी न्याय विभाग ने Adobe पर ये फ़ीस छिपाने और रद्द करना मुश्किल बनाने का मुक़दमा किया। Adobe का कहना है कि उसकी शर्तें पारदर्शी हैं।
उनका जवाब था प्रोग्राम दोबारा बनाना और मुफ़्त बाँट देना। Anthropic की कृत्रिम बुद्धि Claude और Rust भाषा की मदद से, सितंबर के अंत और अक्टूबर 2026 की शुरुआत के बीच उन्होंने GitHub पर पहले सात ऐप प्रकाशित किए — Photoshop, Illustrator, Premiere, Lightroom, After Effects, InDesign और Acrobat के समकक्ष — और कुछ ही हफ़्तों में Word, PowerPoint, Excel, AutoCAD, Pro Tools और Figma भी जोड़ दिए। उनका कहना है कि ये «क्लीन-रूम» पुनर्निर्माण हैं, फ़ाइल फ़ॉर्मैट के सार्वजनिक विनिर्देशों से बने, किसी का कोड लिए बिना।
सब कुछ समेटने वाला उनका वाक्य, «सॉफ़्टवेयर ख़त्म हो गया», दुनिया भर में फैल गया: अगर एक व्यक्ति AI के साथ हफ़्तों में वह बना सकता है जिसमें दशक लगे, तो पेड सॉफ़्टवेयर मुश्किल में है। शंकाएँ भी हैं: ससेक्स विश्वविद्यालय के प्रोफ़ेसर आंद्रेस गुआदामुस याद दिलाते हैं कि अभी यह पता नहीं कि यह «क्लीन-रूम» प्रक्रिया जाँच में टिकेगी या नहीं, और कितना कोड उन्होंने लिखा और कितना AI ने। थॉमस ज़ोर देते हैं कि यह «बुझ जाने वाली एक बार की चमक» नहीं है, और अभी तक लगभग रोज़ आने वाले नए संस्करण उन्हें सही साबित कर रहे हैं।
ArtCraft टीम storytold का एक ओपन सोर्स प्रोजेक्ट (MIT या Apache-2.0 लाइसेंस) है, जो रोज़ रचनात्मक काम में आने वाले टूल Rust में शुरू से दोबारा लिख रहा है। ये नेटिव, हल्के प्रोग्राम हैं, बिना सब्सक्रिप्शन के, जो मशहूर व्यावसायिक प्रोग्रामों के काम करने के तरीक़े की नक़ल करते हैं पर उनका कोड कॉपी नहीं करते। ये Windows, macOS, Linux और FreeBSD पर चलते हैं, कई ब्राउज़र में भी, और लगभग हर हफ़्ते नए संस्करण आते हैं। व्यावसायिक नाम सिर्फ़ संदर्भ के लिए हैं: इन प्रोग्रामों का उन ब्रांडों से कोई संबंध नहीं है।
टूल, एक-एक करके
ArtCraft Launcher v0.8.1
यहीं से शुरू करें। यह बाक़ी सबका इंस्टॉलर है: पूरा कैटलॉग दिखाता है, आपके कंप्यूटर के लिए सही संस्करण चुनकर हर ऐप एक क्लिक में इंस्टॉल करता है, जाँचता है कि फ़ाइल ख़राब तो नहीं, और अपडेट आने पर बताता है। सब कुछ एक साथ वाला एक पैकेज नहीं है, पर यह लॉन्चर उसके सबसे क़रीब है।
PhotoCraft v0.16.0
Photoshop की तर्ज़ पर इमेज एडिटर: लेयर, सिलेक्शन, ब्रश, एडजस्टमेंट और रीटचिंग। यह GitHub पर प्रोजेक्ट का सबसे लोकप्रिय टूल है।
LightCraft v0.14.0
Lightroom की शैली में फ़ोटो लाइब्रेरी और नॉन-डिस्ट्रक्टिव RAW डेवलपमेंट: फ़ोटो व्यवस्थित करें और एक्सपोज़र, रंग और क्रॉप बदलें, मूल फ़ाइल को छुए बिना।
VectorCraft v0.17.0
Illustrator जैसा वेक्टर इलस्ट्रेशन: कर्व, आकृतियाँ, रेखाएँ और टेक्स्ट जो गुणवत्ता खोए बिना बड़े होते हैं। लोगो, आइकन और पोस्टर के लिए।
FilmCraft v0.13.0
Premiere Pro जैसा नॉन-लीनियर वीडियो एडिटर: कई ट्रैक वाली टाइमलाइन, कट, कलर करेक्शन और साउंड।
EffectCraft v0.17.0
After Effects की राह पर मोशन ग्राफ़िक्स, कंपोज़िटिंग और विज़ुअल इफ़ेक्ट: टाइटल, कीफ़्रेम एनिमेशन और आपस में मिलने वाली लेयर।
SoundCraft v0.13.1
Pro Tools से प्रेरित ऑडियो वर्कस्टेशन, रिकॉर्ड, एडिट और मिक्स करने के लिए: कई ट्रैक, कट, इफ़ेक्ट और फ़ाइनल मिक्स।
DesignCraft v0.13.0
InDesign की शैली में पेज लेआउट और प्रकाशन: पत्रिकाएँ, ब्रोशर और किताबें, पेज, कॉलम, टेक्स्ट स्टाइल और चित्रों के साथ।
FigCraft v0.11.2
Figma जैसा इंटरफ़ेस डिज़ाइन और प्रोटोटाइपिंग: ऐप और वेबसाइट की स्क्रीन, दोबारा इस्तेमाल होने वाले कंपोनेंट और मॉकअप जो बनने से पहले दिखाते हैं कि कोई चीज़ कैसे काम करेगी।
PdfCraft v0.14.0
Acrobat की राह पर PDF पढ़ने, व्यवस्थित करने और सुरक्षित करने के लिए: खोलना, टिप्पणी जोड़ना, पेज क्रम बदलना और सुरक्षित दस्तावेज़ सहेजना।
WordCraft v0.11.0
Word जैसा वर्ड प्रोसेसर, पत्र, रिपोर्ट और स्टाइल, टेबल व चित्रों वाले दस्तावेज़ों के लिए।
DeckCraft v0.11.1
PowerPoint की शैली में प्रेज़ेंटेशन और स्लाइड: टेक्स्ट, चित्र और आकृतियों वाली स्लाइड, फ़ुल स्क्रीन में दिखाने के लिए।
GridCraft v0.12.1
Excel जैसी स्प्रेडशीट: फ़ॉर्मूले, डेटा टेबल, चार्ट और जानकारी को छाँटना या फ़िल्टर करना।
CADCraft v0.13.0
AutoCAD की राह पर कंप्यूटर-सहायता प्राप्त डिज़ाइन और तकनीकी ड्रॉइंग: सटीक माप, लेयर और डाइमेंशन वाले नक़्शे।
ArtCraft v0.41.0
वह ऐप जिससे प्रोजेक्ट को नाम मिला, और अकेला जो बाक़ियों से अलग है: कृत्रिम बुद्धि से चित्र और वीडियो बनाने का स्टूडियो, कलाकारों, डिज़ाइनरों और फ़िल्मकारों के लिए। फ़िलहाल सिर्फ़ Windows और Mac पर।
सबको सहेजें: सोर्स कोड और एक्ज़ीक्यूटेबल
अगर आपको हर चीज़ की कॉपी रखना पसंद है (कभी कोई प्रोजेक्ट ग़ायब हो जाए, या बिना इंटरनेट इंस्टॉल करना हो), तो यह Linux स्क्रिप्ट हर टूल का सोर्स कोड और उसके नवीनतम संस्करण की सारी एक्ज़ीक्यूटेबल फ़ाइलें डाउनलोड करती है, टूल और सिस्टम (Windows, macOS, Linux, FreeBSD और वेब) के हिसाब से फ़ोल्डरों में। अनज़िप करके चलाएँ; आर्ग्युमेंट गंतव्य फ़ोल्डर है, और PLATFORMS व EXCLUDE से चुनें कि क्या डाउनलोड हो। (इसकी टिप्पणियाँ स्पेनिश में हैं।)
⬇ स्क्रिप्ट डाउनलोड करें (artcraft-mirror.zip)
chmod +x artcraft-mirror.sh
./artcraft-mirror.sh ~/artcraft
PLATFORMS="windows linux" EXCLUDE='riscv64|aarch64' ./artcraft-mirror.sh ~/artcraft
- बीच में रोकी जा सकती है: रुक जाए तो फिर चलाएँ, जहाँ छोड़ा था वहीं से आगे बढ़ेगी।
- सिर्फ़ नया डाउनलोड करती है: नया संस्करण आने पर उसका फ़ोल्डर बनाती है और पुराने को नहीं छूती।
- सब कुछ जाँचती है हर संस्करण के प्रकाशित SHA-256 योग से।
- बहुत जगह लेती है: सभी प्लेटफ़ॉर्म मिलाकर हर संस्करण क़रीब 24 GB; अगर कुछ ही चाहिए, तो फ़िल्टर करें।
पूरी स्क्रिप्ट दिखाएँ
#!/usr/bin/env bash
# artcraft-mirror.sh — espejo local de las Craft Apps de ArtCraft (github.com/storytold)
#
# Estructura que genera:
# <DEST>/<herramienta>/code/<rama>-<herramienta>-AAAAMMDD.zip (+ .sha con el commit)
# <DEST>/<herramienta>/release-<versión>/{windows,macos,linux,freebsd,web,otros}/...
# <DEST>/<herramienta>/release-<versión>/SHA256SUMS.txt
#
# - Reanudable: las descargas van a *.part y continúan con Range (curl -C -).
# Una release se da por terminada sólo cuando todo se verificó contra SHA256SUMS
# (queda el marcador .complete). Si se corta, se vuelve a ejecutar y sigue.
# - Incremental: sólo mira la última release de cada herramienta; las carpetas
# release-* anteriores y los zip de código de días anteriores no se tocan.
# - El código fuente se baja sólo si el commit de la rama principal cambió.
#
# Uso:
# ./artcraft-mirror.sh [DEST] (DEST por defecto: carpeta del script)
# Variables opcionales:
# GITHUB_TOKEN=ghp_... sube el límite de la API de 60 a 5000 llamadas/h
# PLATFORMS="windows linux macos" sólo estas plataformas (por defecto todas)
# EXCLUDE='riscv64|aarch64|flatpak' regex de nombres de archivo a omitir
# TOOLS="photocraft cadcraft" sólo estas herramientas
# EXTRA_TOOLS="anicraft" añadir repos de storytold no incluidos en el catálogo
# SKIP_CODE=1 / SKIP_RELEASES=1
set -uo pipefail
OWNER=storytold
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
DEST=${1:-$SCRIPT_DIR}
PLATFORMS=${PLATFORMS:-"windows macos linux freebsd web otros"}
EXCLUDE=${EXCLUDE:-}
TODAY=$(date +%Y%m%d)
# Catálogo de respaldo por si no se puede leer el del launcher
FALLBACK_TOOLS="photocraft vectorcraft filmcraft lightcraft pdfcraft effectcraft designcraft
figcraft wordcraft soundcraft deckcraft cadcraft gridcraft"
# Fuera del catálogo del launcher pero con releases propias
ALWAYS_TOOLS="craft-launcher artcraft"
for bin in curl jq git sha256sum flock; do
command -v "$bin" >/dev/null || { echo "Falta '$bin'" >&2; exit 1; }
done
mkdir -p "$DEST"
exec 9>"$DEST/.artcraft-mirror.lock"
flock -n 9 || { echo "Ya hay otra ejecución en curso en $DEST" >&2; exit 1; }
log() { printf '[%s] %s\n' "$(date +%H:%M:%S)" "$*"; }
warn() { printf '[%s] AVISO: %s\n' "$(date +%H:%M:%S)" "$*" >&2; }
api() {
local auth=()
[[ -n ${GITHUB_TOKEN:-} ]] && auth=(-H "Authorization: Bearer $GITHUB_TOKEN")
curl -fsSL --retry 3 -H "Accept: application/vnd.github+json" "${auth[@]}" \
"https://api.github.com/$1"
}
# Descarga: $1 url, $2 destino final, $3 tamaño esperado.
# Con tamaño conocido continúa el .part (Range); sin él (zip de código, generado
# al vuelo y sin Range) empieza de cero.
fetch() {
local url=$1 out=$2 size=${3:-} part="$2.part" have resume=()
mkdir -p "$(dirname "$out")"
if [[ -n $size && -f $part ]]; then
have=$(stat -c %s "$part")
if (( have == size )); then mv -f "$part" "$out"; return 0; fi
if (( have > size )); then rm -f "$part"; fi
resume=(-C -)
else
rm -f "$part"
fi
curl -fL --retry 5 --retry-delay 5 --retry-all-errors "${resume[@]}" \
--progress-bar -o "$part" "$url" || return 1
mv -f "$part" "$out"
}
platform_of() {
case $1 in
SHA256SUMS*) echo . ;;
*windows*|*.msi|*.exe) echo windows ;;
*macos*|*.dmg|*.app.tar.gz|*universal*) echo macos ;;
*freebsd*) echo freebsd ;;
*linux*|*.AppImage*|*.deb|*.rpm|*.flatpak) echo linux ;;
*-web-*) echo web ;;
*) echo otros ;;
esac
}
wanted() {
local name=$1 plat=$2
[[ $plat == . ]] && return 0
[[ " $PLATFORMS " == *" $plat "* ]] || return 1
[[ -n $EXCLUDE && $name =~ $EXCLUDE ]] && return 1
return 0
}
tool_list() {
if [[ -n ${TOOLS:-} ]]; then echo $TOOLS; return; fi
local cat
cat=$(curl -fsSL "https://raw.githubusercontent.com/$OWNER/craft-launcher/main/crates/core/src/catalog.rs" 2>/dev/null \
| grep -oE "\"$OWNER/[a-z0-9-]+\"" | tr -d '"' | cut -d/ -f2 | grep -v '^craft-launcher$' | sort -u)
[[ -z $cat ]] && { warn "no pude leer el catálogo del launcher; uso la lista interna"; cat=$FALLBACK_TOOLS; }
echo $cat $ALWAYS_TOOLS ${EXTRA_TOOLS:-} | tr ' ' '\n' | awk 'NF && !seen[$0]++'
}
mirror_code() {
local tool=$1 dir="$DEST/$1/code" head branch sha last
head=$(git ls-remote --symref "https://github.com/$OWNER/$tool" HEAD 2>/dev/null) \
|| { warn "$tool: no pude consultar el repositorio"; return 1; }
branch=$(awk '/^ref:/ {sub("refs/heads/","",$2); print $2}' <<<"$head")
sha=$(awk '$2=="HEAD" && $1!="ref:" {print $1}' <<<"$head")
mkdir -p "$dir"
last=$(ls -1 "$dir"/*.zip.sha 2>/dev/null | sort | tail -1)
if [[ -n $last && $(<"$last") == "$sha" ]]; then
log "$tool: código al día ($branch@${sha:0:8})"
return 0
fi
local zip="$dir/$branch-$tool-$TODAY.zip"
log "$tool: bajando código $branch@${sha:0:8} → $(basename "$zip")"
# El zip por commit garantiza que el archivo corresponde al sha anotado
fetch "https://github.com/$OWNER/$tool/archive/$sha.zip" "$zip" || { warn "$tool: falló el zip"; return 1; }
echo "$sha" > "$zip.sha"
}
verify() { # $1 archivo, $2 SHA256SUMS → 0 ok / 1 mal / 2 sin suma publicada
local file=$1 sums=$2 expected
[[ -f $sums ]] || return 2
expected=$(awk -v n="$(basename "$file")" '{f=$2; sub(/^\*/,"",f)} f==n {print $1}' "$sums")
[[ -z $expected ]] && return 2
[[ $(sha256sum "$file" | cut -d' ' -f1) == "$expected" ]]
}
mirror_release() {
local tool=$1 json tag ver rdir
json=$(api "repos/$OWNER/$tool/releases/latest") || { warn "$tool: sin releases o límite de API alcanzado"; return 1; }
tag=$(jq -r .tag_name <<<"$json")
ver=${tag#"$tool"-}; ver=${ver#v}
rdir="$DEST/$tool/release-$ver"
if [[ -f $rdir/.complete && $(<"$rdir/.complete") == "$PLATFORMS|$EXCLUDE" ]]; then
log "$tool: release $ver ya completa"
return 0
fi
log "$tool: release $ver"
mkdir -p "$rdir"
jq -c '{tag_name, name, published_at, html_url, body}' <<<"$json" > "$rdir/release.json"
local ok=1 name url size plat out sums="$rdir/SHA256SUMS.txt"
# SHA256SUMS primero para poder verificar el resto
while IFS=$'\t' read -r name url size; do
plat=$(platform_of "$name")
wanted "$name" "$plat" || continue
if [[ $plat == . ]]; then out="$rdir/$name"; else out="$rdir/$plat/$name"; fi
if [[ -f $out ]]; then
verify "$out" "$sums"; case $? in
0) continue ;;
2) [[ $(stat -c %s "$out") == "$size" ]] && continue ;;
esac
warn "$tool: $name no coincide, se vuelve a bajar"; rm -f "$out"
fi
log " ↓ ${out#"$rdir"/} ($((size / 1048576)) MiB)"
if ! fetch "$url" "$out" "$size"; then warn " falló $name"; ok=0; continue; fi
verify "$out" "$sums"; case $? in
1) warn " checksum INCORRECTO: $name (se borra)"; rm -f "$out"; ok=0 ;;
2) [[ $name != SHA256SUMS* ]] && [[ $(stat -c %s "$out") != "$size" ]] && { warn " tamaño incorrecto: $name"; rm -f "$out"; ok=0; } ;;
esac
done < <(jq -r '.assets | sort_by(.name | startswith("SHA256SUMS") | not)[]
| [.name, .browser_download_url, .size] | @tsv' <<<"$json")
if (( ok )); then echo "$PLATFORMS|$EXCLUDE" > "$rdir/.complete"; log "$tool: release $ver completa ✔"
else warn "$tool: release $ver incompleta; vuelve a ejecutar el script para continuar"; return 1; fi
}
fail=0
for tool in $(tool_list); do
echo "──────── $tool"
[[ -z ${SKIP_CODE:-} ]] && { mirror_code "$tool" || fail=1; }
[[ -z ${SKIP_RELEASES:-} ]] && { mirror_release "$tool" || fail=1; }
done
(( fail )) && { warn "Hubo errores; ejecuta de nuevo para reintentar lo pendiente."; exit 1; }
log "Todo al día en $DEST"
ये बहुत नए प्रोग्राम हैं, लगभग सभी अर्ली अल्फ़ा चिह्नित: बहुत उम्मीद जगाते हैं, पर गंभीर काम के लिए अभी पेशेवर टूल की जगह नहीं लेते। आज़माएँ, अपनी फ़ाइलों की कॉपी रखें और कोई गड़बड़ी मिले तो उनके GitHub पर बताएँ।
संदर्भ
- GitHub · storytold (todas las Crafting Apps)
- GitHub · ArtCraft Launcher
- GitHub · ArtCraft
- getartcraft.com
- Al Jazeera (14-10-2026) · How AI apps are offering free substitutes for Big Tech software
- Amateur Photographer (08-10-2026) · This home coder got so sick of Adobe he built free, open-source versions of Photoshop, Lightroom and Premiere
- PetaPixel (07-10-2026) · Someone Rebuilt Free, Open-Source Versions of Photoshop, Premiere, and Lightroom Using AI
- Creative Bloq · Someone just rebuilt Adobe Creative Cloud with AI – then gave it away for free
- CineD · ArtCraft Releases Free Open-Source Adobe Alternatives
- Korben · I tested the 12 free clones of Adobe and Microsoft