# Return from authorization while the catalog rebuilds This is a manual Resolve/Fusion construction for an editable Remotion study. Two fictional content variants demonstrate one treatment. No native Resolve execution, importable .drp, moving-source review or source-quality approval is claimed. Illustrative account text does not assert real provider behavior. ## Native interval Use1920×1080 at24000/1001 fps and exactly236 frames. Local0 is retained source2466; local235 is2701. The half-open source extent is[2466,2702). `source-timing.json` binds every actual native PTS at time base1/24000, 1001ticks per frame. The source film is research-only, not an active input. There is no asserted equivalence to an absent historical source rendition. Set the rate before editing and keep the output silent. Do not append a confirmation hold: only the last three positions expose the final catalog. The app leaves filtered connector results for a separate account browser. After account choice, confirmation and permissions, eight blank callback frames precede the returned app dialog. Continue remains for two frames. Finishing clears the query; the catalog populates behind the dialog before the dialog leaves. Background data must not depend on dialog visibility. ## Original content and type Choose `inputs/default.json` or `inputs/adaptation.json`. Exact keys are `theme`, `connector`, `provider`, `description`, `accountNames`, `accountEmails`, `permissions`, and `otherTools`. Theme is meadow or harbor. Names, emails and permission lines each contain exactly two strings; otherTools contains six. The two accounts must be distinct. Connector and other tool names must be unique. Preserve the first account and the same connector identity throughout all stages; do not introduce another tool at the ending. Only trimmed printable ASCII without markup is accepted. The bundled licensed Geist font is loaded before measuring actual widths. `TEXT` and `limits` in `src/model.ts` give the string caps and pixel budgets. Connector is34px/weight400 with425px budget; provider17px/500 with550px; description14px/400 with265px; account names18px/500 and emails15px/400 with 335px each; permission lines16px/400 with425px; other tool names17px/500 with250px. Composite confirmation and connection headings are also measured. The browser rejects overflow without wrapping or shrinking. Calibrate Text+ against raster samples; normalized Resolve font size is not CSS pixel size. Four original SVGs have a byte-reproducible generator at `scripts/build-art.py`: two desktop fields and two illustrated insets. Their primitive trees are in `docs/asset-construction.json`. UI, icons, pointer, text and browser/dialog construction remain live in `src/Scene.tsx`. The connector mark is the same green geometric mark at every stage. Other marks are fictional colored shapes, not source service identities. No source portrait, branding, screenshots or production footage is an adaptation asset. ## Coordinate and layer construction All positions below are1920×1080 top-left pixels. For a rectangle(x,y,w,h), normalized Center=((x+w/2)/1920,1-(y+h/2)/1080); normalized width=w/1920 and height=h/1080. Keep full-raster transparent group canvases for stable pivots. Build separate Desktop, App, Browser, app Scrim, ConnectionDialog, Inset and Pointer groups. Inset and Pointer are screen-space and never inherit app zoom. | Group | Geometry and content | | --- | --- | | Desktop |Original full-raster gradient/path SVG.| | App window |(60,34),1800×1008,20px corners;242px sidebar inside.| | App title/search |Plugins at(735,151); helper at(735,198); search(735,239),820×40.| | Filtered catalog |Public at(735,310); row origin(735,369);376×70 cards;415px column and91px row spacing.| | Populated catalog |Installed at(735,304); seven38px marks begin(735,343),98px spacing. Public at429; rows begin477.| | Browser window |(60,34),1800×1008;51px topbar,45px left strip; pale original browser colors.| | Browser card |Window-relative(445,299),980×392; permissions height535.| | Browser header |52px tall; geometric connector mark plus provider text.| | Browser left block |Card-relative(35,85)mark; title(35,137),425px wide,34px/42px leading.| | Account chooser |Two rows at card+(506,99+73*index),430×65, avatar/name/email; separate Use another account.| | Confirmation |Same account in a held pill at card+(36,246),386×36; right explanatory copy at(510,106).| | Permissions |Account pill at(36,282); two example scopes at(510,106); original disclaimer, Cancel/Allow at card bottom.| | Working wash |White over the card, opacity0.63;4px progress line begins at card+(18,0).| | Callback |No card; spinner at browser-relative(916,512),26×26.| | Scrim |App window rectangle(60,34),1800×1008,18% dark overlay. Only200–232.| | Connection dialog |(720,285),456×530; two original marks, held explanatory text, action at+(24,483),408×31.| | Inset |(1512,104),286×366; original illustration and independent opacity.| | Pointer |pointerX,pointerY;25×32 original arrow path.| In the initial app-only interval0–56, transform App around its top-left raster pivot: scale1.5, then translate(−720,−60). On return, App uses scale1 and translation(0,0). This is a cut, not a continuous camera animation. A point maps to(appX+appScale*x,appY+appScale*y). Browser, Inset, Pointer, Scrim and ConnectionDialog do not inherit this transform. Within App, catalogMode0 is the filtered list, mode1 the sparse header, mode2 the full list. The search text uses `searchVisible`; the Installed strip uses `installedVisible`. Keep these controls separate from `dialogVisible`. The first connector loses its Install action once the full catalog appears; the other sample tools retain their own buttons. These are drawn states, not functional authorization or permission logic. ## Exact frame schedule Regenerate `docs/controls.csv` with `node --experimental-strip-types scripts/controls.mjs`. It contains a value for every native frame and every named control. If manually keying Fusion, key consecutive numeric values at each frame with linear interpolation; hold all categorical, boolean and string switches. This is not a tested CSV-import workflow or an automatic Fusion macro. | Local interval/gate | Visible state | | --- | --- | |0–42|Filtered result with Install; no app connection dialog.| |43–56|Same result with Loading and small rotating spinner.| |57–116|Cut to separate account browser and two-account chooser.| |72 onward|Authored highlighted first account row.| |87–116|Washed chooser and progress line; chosen within sampled source support.| |117–146|Signing-back-in confirmation; Cancel/Continue. Wash from143.| |147–191|Permissions and explicit Cancel/Allow. Wash from186.| |188–198|Independent inset fade; gone by198.| |192–199|Exactly eight blank callback-spinner frames. No card or app dialog.| |200–201|App returns with dimmed filtered catalog and dialog showing Continue.| |202–204|Action becomes Finishing connection; background search clears to sparse header.| |205–232|Installed strip and wider catalog populate while the same dialog remains.| |233–235|Dialog and scrim gone; installed connector exposed for three frames.| The spinner rotates by frame*22degrees. Progress width and pointer paths are authored fits; read the per-frame CSV rather than estimating easing. Fine source camera movement, exact typography/materials and provider-specific layout are not recovered. The native gate order and callback duration are observed; user action/down times inside sparse brackets are not asserted. ## Verify and export Inspect42/43,56/57,116/117,146/147,191/192,199/200,201/202,204/205 and232/233. Continue must survive200 and201. At205 the Installed marks must already be present behind the scrim while the foreground still says Finishing connection. At233 the same background remains after the overlay leaves. Do not show a pre-authorization app dialog, wait for dismissal before populating, add a success receipt, or include the next film's second-connector search. Check both content variants for exact stage ownership, readable fitted copy and original identity continuity. Export silent H.264 MP4,1920×1080, 24000/1001,236 frames. Confirm frame count and encoded native PTS afterward. Source-quality, moving comparison and native Resolve approval remain open.