Docs  Creative apps and games

Tools

Creative apps and games

After Effects, Premiere, Photoshop and Blender driven through their own scripting, plus game assets, mods, packs and test servers checked with the game's own rules.


What this family is for

These tools work inside the real creative apps and game toolchains on your computer, with their own renderers, exporters and rules. Mori does not click around their windows: she drives them the way their own scripts do. The app has to be installed; when it is not, she says so and nothing runs. Ask in plain words, or start from More tools in Creation. More on each app is on Creative apps and Games and mods.

Adobe: script, render, check

An Adobe job starts with adobe_status: which apps are here, which are open, and whether a dialog is in the way. adobe_script runs ExtendScript in After Effects, Premiere or Photoshop, opens the app when it is closed, waits out a dialog and reads the result back. In After Effects each change is one undo step.

Renders use each app's own engine: ae_render through After Effects' headless renderer, premiere_export through Premiere's encoder, which keeps a vertical sequence vertical. Premiere has no outside scripting door, so it is reached through Mori's small panel inside it; the first Premiere job sets it up while asking is off, and adobe_setup installs, repairs or removes it.

Blender: small steps with a report each time

blender_run runs Blender's Python with no window and returns a scene report every time: each object's triangles, size, UVs, materials and modifiers, the camera framing and warnings such as no light or unapplied scale. She builds in small steps and reads the report before the next. Your own .blend is never overwritten: the work goes to a copy named after it with -mori, and later steps continue on that copy.

  • blender_api checks a name against the Blender you have before she writes it.
  • blender_render renders and checks the picture for blank, black, blown out, cut off or flat lit results, and that animation frames change.
  • blender_export exports for the web, Roblox, Unity, Unreal and other apps, then imports the file into a clean Blender and compares, so the export is proven.
  • blender_live works in the Blender you have open so you watch it happen, through a small extension that is local only and answers only Mori.

Blender 4.2 or newer is needed.

Assets with their licences

Before modelling anything, Mori looks for an asset that already exists: Poly Haven, ambientCG and Kenney (all CC0) and Sketchfab with your token. get_asset reads the licence from the source itself, refuses one that is non commercial, editorial or unreadable for a project that may be sold, and records every asset in the project's asset credits file. When no asset fits, image_to_3d turns a picture into a model on your own Meshy or fal key, and prepare_asset fits a model to the game: its height, its triangle budget and the format the engine reads, then imports it again and counts.

Mods, packs and servers

  • mod_package checks a mod against its game's rules and packages it the way the game loads it, for Minecraft, Roblox, FiveM, Garry's Mod, Thunderstore games and World of Warcraft. It also unpacks a Roblox place into files and packs changes back into a copy.
  • modpack reads, checks, compares and builds Minecraft modpacks, with file hashes always from Modrinth.
  • mc_server runs a Minecraft test server on your machine only, offline, and starts only after you accept Mojang's EULA in your own words. Checking a data pack needs no server and no EULA.
  • engine_api checks code against the Godot, Unity or Unreal version you really use, and pack_sprites packs frames into a sprite sheet the common engines read.

Every output is checked

A render or export is not called done on the app's word. Video files are checked frame by frame with the video tools, renders are looked at, and exports are imported again. When a check fails, she fixes it and runs it again before she reports.

Permissions

Driving Adobe's apps follows the App Launching switch in Settings > Permissions. Running Blender, the After Effects renderer, asset fitting and the Minecraft server are programs, so they follow Terminal Commands. Asset search and lookups follow Browser Control, and fetching an asset into your project follows File Writing.

32  The toolsfrom the app itself

Each description below is the exact text her model reads when it decides which tool to call.

adobe_status

Which Adobe apps this computer has (After Effects, Premiere Pro, Photoshop, Media Encoder), which are open, and what holds each one (a dialog open in front of it, the Premiere panel, ffmpeg for checks). Read it first in an Adobe task.

adobe_script

Run ExtendScript inside After Effects, Premiere Pro or Photoshop, through the app's own scripting (no clicking): comps, title cards, layers, shape and text layers, keyframes and easing, expressions, effects, saving a project; Premiere projects, bins, sequences, clips, cuts and markers; Photoshop documents, layers, text, adjustments and exports. Write the code as a function body that ends with `return <value>` (plain objects come back as JSON); log(...) lines come back too. After Effects edits are one undo step ("Studio Mori"). It opens the app when it is closed, waits out a dialog and reads the value back, so use it instead of osascript, AppleScript or a .jsx run from the terminal. For a render use ae_render; for a Premiere export use premiere_export. Check every output file with video_check.

adobe_setup

Install or remove Mori's small panel inside Premiere Pro (for your user only): the fastest way to script Premiere. The first Premiere job sets it up by itself while asking is off; this is for asking on, a repair, or removing it. Installing also turns on Adobe's per-user setting that lets unsigned panels load; removing puts it back. Premiere loads the panel the next time it starts.

ae_render

Render an After Effects composition with aerender, After Effects' own headless renderer (no window needed), then check the file frame by frame against what was asked and show frames from across it. The project must be saved first (adobe_script: app.project.save(new File(path)), or ae_build saves its own). The file name After Effects writes can differ from the one asked (the output module picks .mp4 or .mov): the answer names the real one. Optional: frames (stills), draft, mfr, rqindex.

premiere_export

Export a Premiere Pro sequence through Premiere's own encoder (an H.264 preset; "Match Source, High bitrate" unless one is named, which keeps a vertical 9:16 sequence vertical), then check the file frame by frame against what was asked. Premiere is reached through Mori's panel, which sets itself up on the first Premiere job (it loads when Premiere next starts), or meanwhile through Photoshop or After Effects in the background.

blender_status

Blender on this computer: version, path, whether the live bridge to the open Blender is set up, and sessions left today. With job: the result of a background render (frames, render check, the picture).

blender_api

Look up the Python API of the Blender installed here, exactly as this version has it: operators with their parameters, types with their properties and functions. Use it before writing a name you are not sure exists in this version.

blender_run

Run bpy Python in Blender headless (no window) for 3D models, scenes, materials, rigs and animation, then save the .blend. Returns a scene report every time: each object with triangles, size, UV maps, materials and modifiers, the camera framing, and warnings (no camera, no light, unapplied scale, no UVs). Build in small steps, one call each, reading the report before the next. The person's own .blend is never overwritten: the result goes to "<name>-mori.blend" and later steps continue on that copy. Check names with blender_api when unsure; a wrong name comes back with the real ones. Use it instead of blender --background in the terminal.

blender_live

Run bpy Python in the Blender the person has open, so they watch it happen (needs blender_bridge install once). Set values in the dict mori_result to get them back. Returns the scene report. Not saved unless your code saves.

blender_bridge

The live session with the open Blender: "install" adds Mori's small Blender extension (this computer only, answers only Mori), "status" says if it is connected, "look" returns a picture of the viewport now, "report" reads the open scene, "remove" takes the extension out.

blender_render

Render a saved .blend headless and check the picture: blank, black, blown out, subject out of frame or cut off, too small, a dim or flat-lit subject (fix the light), transparency, and for animations that the frames change. The first frame comes back to your eyes. A turntable (turntable_frames) spins the model; video "mp4" or "webm" encodes the frames with Blender's own FFmpeg and reads the file back. Fix what fails and render again before saying it is done.

blender_import

Import asset files (glb, gltf, fbx, obj, usd, stl, ply, or objects from another .blend) into a scene and save it, with a scene report. Use it for the best existing asset first (a downloaded model, a rig, a kit) before modelling from scratch.

blender_export

Export from a .blend for a game, a site or another app, then import the file back into a clean Blender and compare triangles and materials, so the export is proven. glb for the web (three.js, model-viewer), fbx for Roblox (preset roblox), Unity and Unreal (preset unity), obj, usd, stl.

prepare_asset

Fit a model to the game in headless Blender: scale to a height, origin at the base, decimate to a triangle budget, export what the engine reads (FBX for Roblox/Unity/Unreal, GLB for web/Godot), then re-import it and count. Returns the measured result and a small render.

image_to_3d

A picture (plain background, whole object in view) into a 3D model on the person's own Meshy or fal.ai key (fal: Hunyuan3D v3, which also reads <name>-back, -left and -right pictures beside it; TRELLIS 2; TRELLIS). Saves a GLB into the project and records it. Without a key, build_model makes it in Blender. Follow with clean_model.

find_assets

Search free asset libraries BEFORE modelling anything: Poly Haven (CC0 models, textures, skies), ambientCG (CC0 materials), Kenney (CC0 kits, sprites), Poly Pizza (low-poly), Smithsonian 3D (CC0 scans), NASA 3D Resources, Sketchfab (per-model licences). Each row gives its source, id, licence and whether it can go in a commercial project. Then get_asset.

get_asset

Fetch one find_assets row into the project folder and record its licence in assets/ASSET_CREDITS.md. The licence is read from the source itself; a non-commercial, editorial or unreadable licence is refused for a project that may be sold.

engine_api

Check a class, method or property against the engine version really in use before writing it. godot: the installed Godot's own class reference (read once per version with --doctool, so it follows updates). unity and unreal: the reference page for the project's own version. blender: use blender_api.

mod_package

Mods for any game, checked against that game's own rules and packaged the way it loads them. action "check" a mod folder (path; format detected or given: fabric-mod, neoforge-mod, forge-mod, paper-plugin, minecraft-datapack, thunderstore, gmod-addon, fivem-resource, rojo-project, wow-addon); "build" it (a Thunderstore zip, a Garry's Mod .gma, a data pack zip); "targets" for a game (game: minecraft, roblox, fivem, gta, cs2, gmod, thunderstore, wow, custom) gives its toolchain, registries, proof route and sources; "unpack-place" turns a Roblox .rbxl into .luau files (path, out folder) and "pack-place" puts them back into a copy of the original (path, dir, out).

modpack

Minecraft modpacks from other modpacks. action "read" or "check" a pack (source "modrinth:<slug>", "modrinth:<slug>@<game version>", a .mrpack or .zip, or a packwiz or CurseForge folder): every file with its side (server or client only, from Modrinth), licence and version problems. "diff" two packs (source, other). "build" a new .mrpack (out) from a base pack (source) or from nothing (game_version, loader): remove and add take mod names or Modrinth slugs, hashes always come from Modrinth, and a new game_version ports the pack. "server-set" downloads the server-side files, hash-checked, into a server folder.

mc_server

A local Minecraft test server on this computer (offline, 127.0.0.1 only), to play a mod, pack or data pack headless. action "start" (version, loader vanilla/fabric/paper, optional pack and datapack, folder) needs the person to have accepted the Minecraft EULA in their own words; "send" types one console command (reload, function ns:name, test run <test>) and returns what it printed; "read" the new log lines; "stop"; "status". "reports" and "check-datapack" (path, version) check a data pack against the game's own command tree and registries with no server and no EULA.

pack_sprites

Pack a folder of frame PNGs (in name order) into one sprite sheet and a TexturePacker-style atlas JSON that Phaser, PixiJS and Godot read.

ae_build

Build an edit plan in After Effects with Mori's tested rigs: its own project, a precomp per shot (a layered PSD as a comp), beat markers, a master comp, the render queue, saved. Rigs: parallax_camera, shake, impact_frame, flash, speed_lines, slash, chromatic, halftone, on_twos, letterbox, colour_accent, grade, smoke, particles, deform, glow, light_rays, layer_move, mono, sky; a shot's source.crop frames part of a panel, and shots join by cut, flash, dissolve or whip. Each rig is read back against the plan before it counts as built. "shots" redoes only those. Render with ae_render.

ae_effects

Which effects and plug-ins this After Effects has (match names, Saber, Deep Glow and others) and which rig effects are missing.

ae_inspect

Read an After Effects build back (values, keyframes, expressions, beat markers) and check it against its plan again.

ae_probe

Check the rig library's remembered After Effects names and limits on this computer (probes P1 to P7, P6 in Photoshop if asked). Only when the person has said After Effects may be opened for it.

blender_sim

Physics in Blender, headless, baked and checked: rigid bodies (drop, stack, collide: collision shape, mass from the material's density times the mesh volume, friction, bounce), cloth (a flag, cape or curtain pinned by its top corners or edge, draped over obstacles), soft bodies (jelly, wobble) and cell fracture (the mesh cut into Voronoi cells glued by breakable constraints, then a rigid sim). Reads the bake back: things that fell through the floor, exploded, never moved or never broke are said. No .blend: a demo scene for the kind. Then blender_render to see it.

build_model

Build a 3D model in Blender from a reference picture, no key needed: look at the picture, write a blockout of parts (primitives, modifiers, geometry nodes arrays) in metres, Z up, and Blender builds it, renders a turntable and checks its outline against the picture. Fix the parts and build again until it passes.

clean_model

Make a mesh game ready in Blender (an image to 3D result, a scan, a library model): repair it watertight, remesh, new UVs, bake its colour (and normal) onto them, decimate to a budget, real size, origin at the base, a collider, GLB (Draco if asked). Checks the export, a turntable render and the outline against the picture.

plugin_get

Plugins and add-ons from official sources only: After Effects, Premiere, Photoshop (Saber, Deep Glow, ZXP, UXP), Blender extensions, Godot, Unity, Roblox, Minecraft mods (Modrinth), Google Fonts, LUTs. Hashes and signatures checked; a paid one only opens the vendor page after a yes on its price. Run detect before telling anyone to install something.

app_eyes

Learn an app that is OPEN, like a pro does: its own menus and the shortcuts this version uses, where its panels are (the Timeline, the properties, the viewer), read from its window, and its official docs; the map is kept per app and version and your screen steps in that app use it. Also runs hand routines for what scripting cannot do: ae.setKeyframe {layer, prop, value?, manual?}, ae.typeValue {layer, prop, value}, ae.puppetPins {layer, points [{x,y}] in layer pixels}, ae.rotoStroke {layer, path, subtract?}, pr.razorAt {track, time}, pr.keyframeClip {track, clip, component, prop, time, value}, ps.brushStroke {path, pressure?}, ps.selectSubject {}. A routine is a dry run unless real is true and the person has allowed it. Script first: use adobe_script for anything scripting can do.

panel_prep

Turn a manga page or one panel into a layered comp for After Effects or Mori's editor: split a page into its panels at the gutters, cut out the characters (and anything named in objects), fill the background behind them so it stays clean when a layer moves, put the layers in depth order, and write prep/<panel>.psd (named layers, nearest on top), each layer as a PNG, and a manifest. Runs on this computer; the first run downloads the cutout and fill models (about 450 MB, all Apache-2.0).