OpenAI Film Fieldnotes

Download complete editable project · Read review limits

Collapse a picture window into a character rebound and mark

Manual Resolve/Fusion construction, not an executed or supplied Resolve project. Native application validation and source-quality approval remain unverified. The two original content variants count as one example. Source footage, its performer, pixel-art character and branded knot are research references only.

Canvas and native time

Use 1920×1080, 24000/1001 fps, 96 frames: local 0..95 inclusive. The source interval is [2491,2587), with sourceFrame = localFrame + 2491. Preserve the 1001/24000-second frame duration; a 24 fps composition is not equivalent. Use a matching timeline and silent export. Do not add voice, music or a tail.

docs/controls.csv lists every native frame. src/geometry.json holds the aperture, body and mark bounds used by the implementation. These are approximate raster measurements guiding original artwork, not recovered production controls.

Layer construction

  1. Start with opaque white over the full canvas.
  2. Build the selected original room SVG as editable paths and its gradient. Add the vase or mobile SVG at pixel (680,190), size 560×720. Transform the object independently, around its own center, then merge it over the room.
  3. Mask that picture branch with the animated aperture. Mask after merging the room and object. Do not scale the picture branch by the aperture's width.
  4. Add a separate black circle at the aperture's upper-right corner. It overlaps the picture edge and white field; do not clip it inside the aperture mask.
  5. Add falling streaks, droplets, original figure body, face and later limbs as separate branches. The figure overlaps the final picture frames.
  6. At local 61, remove every figure branch and switch to the selected original mark. This is a hard replacement, not a character-to-mark morph or crossfade.

All SVGs contain original editable geometry. For the figure, rebuild the normalized paths in src/shapes.ts with Polygon/B-Spline shapes and the matching control points, then transform them using the body rectangle. Preserve the separate face and limbs from src/Scene.tsx. Rasterized Loaders may help compare frames but do not satisfy editable-shape construction. SVG gradients, curve conversion and native rasterization require calibration in the application.

Coordinate conversion

The code uses top-left pixel coordinates. Map a pixel point (x,y) to Fusion Center (x/1920,1-y/1080); divide widths by 1920 and heights by 1080. The aperture center is the midpoint of its bounds. Use straight edges and no corner rounding. Keep each branch's alpha premultiplied and use normal Over compositing.

Aperture, marker and independent picture

The aperture is full-frame through local 3. Every local frame 3..18 has an explicit measured-bound key in src/geometry.json. The last window at 18 is (840,472) to (1080,608), width 240 and height 136. At 19 the picture is absent. Do not interpolate the visible picture through an extra zero-size frame.

The marker is absent at 0. Its authored radius is 4px at 1, 11px at 2, 20px at 3 and 22px at 4..18. Its center is (windowRight,windowTop), with no inset. The canvas clips it while the corner is near the screen edge. Remove it at 19. The small onset radii approximate raster observations; they are not source opacity or vector-radius measurements.

The picture object uses linear scale 1→0.65 and vertical translation −20→35px over local 0..18, around its own center (960,550). Its room remains full-frame inside the aperture. This is an authored independent reframe, not a recovered photographic camera move. The original vase/mobile replaces the source face.

Figure timing and geometry

Use the figure's left, top, width and height from the native controls. Its normalized body domain is 200×220. The path changes by pose; the changing bounds provide squash and stretch. These original silhouettes differ from the source.

Local frames Body pose Relationship
0..15 Absent Only picture and marker.
16..19 Falling Picture remains through 18; body continues at 19.
20..21 Squash Streaks are gone.
22..33 Puddle Body spreads; four authored droplets move separately.
34..35 Neck Body stretches upward from the pooled base.
36..44 Airborne oval Droplets leave at 42, before limbs return.
45..49 Restored shape and limbs Descend, then landing squash at 48/49.
50..60 Standing Small arm settling, then hold.
61..95 Absent Original mark replaces the character.

At 16 only the source character's bottom fragment is visible at top 0..36. The implementation authors a full body rectangle (872,−164) to (1044,36); this is not a full-body source measurement. Subsequent falling bounds are approximately 17: (872,46)..(1044,244), 18: (872,256)..(1044,454), and 19: (872,468)..(1044,664). The figure remains above the shrinking picture at 18.

The measured body rectangles exclude dark outlines and can exclude detached limbs or droplets. Treat them as approximate body guides, not whole-character silhouette guarantees. The normalized paths are original, not traced film art.

Face, streaks, droplets and limbs

The body palette is studio fill #cd775b, highlight #eab89b, ink #633a30; garden fill #83a683, highlight #c4d6ad, ink #355b45. Face details remain separate from the squash transform: two 6px eyes, a short stroked mouth, and a pose-dependent vertical position. Refer to src/Scene.tsx for the exact editable coordinates.

Four authored streaks appear at 16..19 above the body, then disappear at 20. Four droplets appear at 22..41 and disappear at 42. Puddle droplets bob near the sides; after 34 they follow separate outward/upward/falling paths. Their count and trajectories are authored approximations, not recovered source paths. At 22..33 use lateral offsets ±(182 + index × 26 + sin(phase × 7 + index) × 8)px, where index is 0 or 1 and phase=(frame−22)/12. At 34 and 35 use ±190 and ±216px so the pooled base cannot cover them. At 36..41 use ±(112 + phase × 45 + index × 26)px with phase=(frame−34)/8. The 26px pair spacing keeps each droplet separate.

Arms and feet appear at 45 and remain through 60. Arms settle from −14 to +5px vertical extension over 45..53; feet remain independent rounded shapes. The source's early folded hands and exact pixel-art limb poses are not reproduced.

Hard handoff and mark

At 60 the standing figure is visible and the mark is absent. At 61 the figure, face, limbs and effects are absent and the mark is visible at full opacity. There is no shared silhouette, shape interpolation or composited overlap.

The mark stays centered at (960,540). Its container follows the sampled source ink widths/heights: about 142×142 at 61, expanding toward 210×210 at 95. Original mark paths and their bounds differ from the source knot. Rotate the whole mark linearly from −42° at 61 to 0° at 75. This rotation and the interpolation of the unmeasured 76..94 size interval are authored. No exact first perfectly static source frame is claimed. Keep the actual final frame 95; do not add an outro hold.

Verification limits

Inspect the independent aperture/object transforms, overlap at 16..18, impact, rebound, earlier droplet exit and hard handoff. Confirm that no picture or black corner marker survives at 19 and no figure survives at 61. The renderer and manifest checks establish native timing, silence and implementation binding. They do not establish perceived motion fidelity, an independent critique or native Resolve behavior. Both variants remain source-grounded draft studies.