AI-retouched Shotloom thumbnail showing three characters in the 3D editor with camera and motion tracks
Thumbnail · AI-retouched from an editor screenshot

Shotloom

A web 3D editor connecting AI video production workflows

Cinamon · 2026.04 - 2026.08 · React / TypeScript · Rust / Bevy

Project overview

Shotloom is a web editor connecting core scene, character, motion, and camera workflows with Cinev’s motion and asset services. I designed and implemented the retargeter for external characters and in-house motion, integrated generative services into the frontend, and developed the camera and timeline editing UX.

AreaDetails
My roleRetargeter · Generative service integration in the frontend · Editing UX/UI
Intended usersDirectors unfamiliar with 3D tools
Stage reachedCore flow implemented · Dev deployment

Why Shotloom was needed

Cinev expanded its web creation features, including storyboard and character-sheet generation. Shotloom was developed to bring responsive 3D editing into this workflow.

Three design priorities

GoalDesign direction
Core 3D workflowsEnsure core 3D workflows, from scene composition through character, motion, and camera editing.
Company service integrationBring CINEV’s 3D motion and asset services into the editor so their generated outputs can be used in editing workflows.
Accessible editingBuild on the editing foundation and integrated services to let directors unfamiliar with 3D work through presets and motion strips.

Company Service Integration

Shotloom connects CINEV’s services to core 3D editing workflows. I integrated background, character, motion, and video generation services into the React/TypeScript frontend, bringing their outputs into scene composition and editing. Proxy Character, Proxy Scene, and SceneGen are examples of these integrations.

Proxy Character

Image input → Review and select character candidates → Place in the scene

Shotloom Proxy Character service showing an input image and character candidates on the right, a character preview, and the selected character placed in the 3D scene
Development screenshot showing character candidates for an input image and the selected character placed in the editor · Click to enlarge

Proxy Scene

Image input → Generate a proxy scene → Add to the scene and edit

Shotloom Proxy Scene service showing the source image on the right and its character and prop layout represented as an editable 3D scene on the left
Development screenshot showing the 3D scene on the left, composed from the input image on the right, within the editor · Click to enlarge

Use case: SceneGen

SceneGen is one of several use cases for Shotloom. Between CINEV’s image input and final video generation, Shotloom is used in steps 2–4 to compose and edit scenes, motion, and cameras. In this example, it takes an image and outputs a scene video reflecting those edits, which is passed to CINEV’s video generation stage.

SceneGen, one Shotloom use case: CINEV image input, Shotloom 3D editing in steps 2–4, and scene video output to CINEV for video generation
SceneGen use case · 02–04: Shotloom · 01 & 05: CINEV · Concept illustration made with ImageGen
StepProduction flowTool
01Image inputCINEV
023D scene & characterShotloom
03Generate & apply motionShotloom
04Edit camera & timing, output scene videoShotloom
05Generate videoCINEV

I also connected Text to Pose and Text to Motion outputs to editing. SceneGen’s final video generation stage uses LLMs and services such as Seedance and MiniMax; generative models and backend services were handled by other team members.


Retargeter

Characters and motions arrived with different skeletons, coordinate systems, and rest poses. Requiring users to choose and configure source and target rigs would add complexity. I chose ARP and an A-pose as the common basis because they were widely used in the company’s motion assets.

InputAdapterConversion
Character sourcesCharacter adapterSkeleton & rest-pose conversion
Motion sourcesMotion adapterSkeleton & rest-pose conversion

Common basis → Retarget → Apply to character

I began by connecting external characters with internal motion, then progressively normalized the data and separated character and motion adapters. Each side can add sources independently: a Mixamo character would require a character adapter, while Mixamo motion would require a motion adapter.

Fix: twisted legs, wrists, and feet

Applying Unreal MetaHuman-based motion converted through Blender to VRM Humanoid characters produced twisting. I changed the alignment to preserve the target’s rest rotation while aligning the required bone directions, using direction alignment, rest preservation, and finger curl handling for different bone groups.

For the tested character-motion combinations, the inward-wrapping leg deformation and wrist and foot twisting were resolved. Regression checks covered three VRM characters, including VRM 0.x and 1.0.

ARP Transition & Character Compatibility

Switching the reference rig from Cinev’s MetaHuman-based Blender export to ARP initially caused severe character deformation. I iterated on the retargeter to apply poses to VRM Humanoid characters and check compatibility across character sources.

Initial ARP Transition

Early ARP reference-rig transition showing a deformed VRM character with bone debug lines
2026.06.30 · Character deformation during the reference-rig transition

Pose Application to VRM Humanoid

VRM Humanoid character holding a pose in Shotloom, with the pose library visible beside it
2026.08.19 · Pose applied to a VRM character after retargeter improvements

Application Across Character Sources

Three posed characters in Shotloom: an external ARP character on the left, a Cinev character using ARP in the center, and a VRM Humanoid character on the right
2026.08.19 · Left to right: external ARP character, existing Cinev character using ARP, and Humanoid-based VRM character

Original screenshots from successive development stages · Click to enlarge

Editor UX & Editing Workflow

Frontend Implementation

Shotloom editor showing a 3D character in the camera viewport, pose presets in the right sidebar, and camera and motion clips in the timeline
Development screenshot connecting the pose library, 3D camera view, and clip timeline · Click to enlarge

I treated camera and timing as the first decisions a director needs to make. The editor foregrounded company presets and target-based camera presets for composing a scene. I tried video editors, 3D tools, and generative tools myself and discussed references and workflows with editor and designer acquaintances.

AspectInitial approachImplemented direction
Motion editingEdit individual keyframesPlace generated and imported motion as strips
User controlsExpose many keyframesPlacement, duration, source range, and speed

I began with keyframe-based editing, then found through use that imported animations were often edited as whole segments. I shifted toward strips, drawing on clip manipulation in After Effects and iMovie, while referencing Figma for keyframe selection and editing.

UX Writing

The early approach considered exposing development terminology and explaining it in a manual. Drawing on my experience with editing tools, I refined terminology to make editing targets and actions easier to understand. The table shows two examples from the timeline.

Original labelRevised label
multicamcamera clips
performance clipmotion

Development Prioritization Criteria

I prioritized the basic controls needed to place motion and adjust timing, implementing start/end placement, duration, source-range selection, and speed changes in the final week. A three-frame constraint in motion bridging received a temporary snapping interaction. Multi-strip and multi-keyframe editing and camera multi-selection remained areas for further work.

LLM Collaboration & Harness Engineering

In a four-person team using Claude and OpenAI, I configured a development harness around the existing shared guardrails and documentation. I managed and shared records of my work’s scope, ownership boundaries, reviews, and validation so colleagues could understand the changes and continue development.

Managed areaRecords managed and shared through the harness
Scope & ownershipRecord purpose, implementation scope, inputs and outputs, and ownership boundaries in specs and PRs
Review & validationDocument review, fix, and revalidation procedures and results; check Git work state and CI results applicable to the changes
ContinuitySave decisions, open items, and next actions in checkpoints to support resuming work and subsequent development

I applied Knitten, the harness I developed, to my own work with a Shotloom-specific workflow. It references existing project instructions at each stage and connects specs, implementation, reviews, and validation records to the changes on GitHub. I shared those records and code with the team.

Collaboration example: the IK control layer

For the IK control layer, I implemented the core and a colleague continued with the user-facing manipulation UI. I documented purpose, inputs and outputs, ownership boundaries, and validation so that subsequent development could build on the work.

Knitten on GitHub