
Workflow dei plugin
BetaGrade a timeline in DaVinci Resolve
Grade the timeline open in DaVinci Resolve with a NOLGIA film stock: stocks suggested for your footage, applied on a node of their own, with before and after stills from the same frame.
Runs in DaVinci Resolve Studio on your computer
- Ideale per
- Giving a cut the look of a real film stock in minutes, without touching the grade you already have.
- Funziona in
- DaVinci Resolve Studio 21.1 or later
- Tempo
- 5 to 15 min
- Costo
- With your own agent, like Claude or Cursor, the work in DaVinci Resolve Studio is free. With NOLGIA Agent, turns cost from 10 credits each. Anything it generates with NOLGIA is priced as usual.
Crea un account gratuito e NOLGIA Agent si apre con questo workflow. Lavora in DaVinci Resolve Studio tramite il plugin NOLGIA.
Avvialo dal tuo agente
Incollalo in Claude Code, Claude Desktop, Cursor o qualsiasi agente con NOLGIA collegato, con DaVinci Resolve Studio aperto. L'agente segue questo workflow passo dopo passo, e chiede prima di fare grandi modifiche.
Use NOLGIA to grade the timeline open in DaVinci Resolve with a NOLGIA film stock: suggest stocks that suit my footage, show me before and after stills from the same frame, keep my own grade untouched, and let me try another stock.
In Claude Code è anche un comando: /mcp__nolgia__resolve-color-grading. Apri in Claude richiede che NOLGIA sia aggiunto a Claude come connettore.
Cosa fa
The NOLGIA assistant reads the timeline open in your DaVinci Resolve Studio, takes a still of a frame with your subject in it, and suggests two or three NOLGIA film stocks that suit the footage, by name: Kodak Portra 400 for daylight and skin, Vision3 500T for tungsten interiors, CineStill 800T for neon at night, and others. Pick one and it installs the stock's LUT in your Resolve and applies it where nothing of yours lives: the timeline's own node graph for the whole cut, or an empty node at the end of each clip's grade. Shot in log (Sony S-Log3, ARRI LogC3, Panasonic V-Log or Blackmagic Film)? It installs the stock's log version, which turns the flat gray log picture into a finished Rec.709 grade in the same step.
Then it takes an after still from the same frame and shows you both. Keep it, try another stock on the same node, or dial it back: the assistant tells you where Key Output Gain is, and the node switches off with one click. Your own nodes, LUTs and color versions are never changed, and a copy of the project is exported before anything happens.
You need DaVinci Resolve Studio 21.1 or later and NOLGIA for DaVinci Resolve. Everything in Resolve is free, installing the film stock included.
Casi d'uso
- A film look for a short film or a music video cut
- Trying three film stocks on the same scene before you grade
- One consistent stock across every clip of a social cut
Il workflow
I passaggi scritti che il tuo agente segue in DaVinci Resolve Studio, uguali per ogni agente: le regole di ogni workflow per DaVinci Resolve Studio (prima una copia di sicurezza, tutto resta modificabile, un'anteprima dopo ogni modifica), poi i passaggi propri di questo preset.
Leggi il workflow
Rules for every DaVinci Resolve Studio workflow
These instructions are served to the agent with every DaVinci Resolve preset in the Film assistant category. The agent works through the NOLGIA Bridge tools (nolgia_app_*) on DaVinci Resolve Studio running on the person's own computer, through NOLGIA for DaVinci Resolve (a script plugin that runs in Resolve's own Python). Code for nolgia_app_run is Python.
The plugin needs DaVinci Resolve Studio 21.1 or later: since 21.1 Resolve runs Python scripts only in the Studio edition. When the plugin is started from outside Resolve (a render machine, a script), Resolve must also have Preferences > System > General > External scripting set to Local.
Code in nolgia_app_run sees resolve (the Resolve object), project_manager, project (the open project), media_pool, timeline (the current timeline, or None when none is open) and fusion. It hands data back by setting result; Resolve objects in result come back as their names. A failure returns the traceback.
Before anything changes
- Call
nolgia_app_status. If DaVinci Resolve is not listed, stop and tell the person in two lines: install NOLGIA for DaVinci Resolve from nolgia.ai/plugins/davinci-resolve (DaVinci Resolve Studio 21.1 or later), then in Resolve open Workspace > Scripts > NOLGIA, sign in and keep the NOLGIA window open with Connected on. Do not guess or continue without it. - Call
nolgia_app_info. Read what is really open: Resolve's version and edition, the current page, the project, the current timeline (name, frame rate, frame size, start timecode, length, tracks with their clip counts, selected clips, the clip under the playhead), the other timelines, the media pool's bins with clip counts and the render presets. If no project is open (Resolve's Project Manager), ask the person to open one and wait. Describe what you see in one sentence so the person can correct you. - Make a safety copy first. Resolve projects live in Resolve's database, not in a file, and Resolve cannot tell a script whether the project has unsaved changes. Ask the person to save (or save with
nolgia_app_saveonce they agree), then export a copy of the project with anolgia_app_runthat callsproject_manager.ExportProject(project.GetName(), path)with a path in Documents/NOLGIA exports ending in<project name>_before_nolgia.drp, never over a file that exists (check withos.path.existsand number the name). Check that it returned True and that the file is there, and keep the path for the end. - Ask only the questions the workflow lists. Offer a sensible default for each so the person can just say "go".
While working
- Work in small steps: one
nolgia_app_runper logical step, each returning a short summary inresult(bin, timeline, clip and node names, counts, frame numbers, what each call returned). Resolve objects cannot be kept between runs: find things again by name in each run. - Never delete, rename, re-time or re-grade the person's existing clips, timelines, bins, nodes, color versions or render jobs unless they asked, and never delete media. In particular never call
DeleteTimelines,DeleteClips,DeleteFolders,ResetAllGradesorDeleteAllRenderJobson anything you did not make. Put what you add in new things namedNOLGIA <workflow>(a bin, a timeline, a color version, a LUT folder), so each step is easy to take back. - Keep everything editable: LUTs on nodes the person can switch off, clips on their own tracks, settings they can read in the Edit page. No flattening, no compound clips, no rendering into the media pool unless the workflow says so.
- After each visible change, call
nolgia_app_previewand look at the image before moving on.framecounts from 0 at the start of the timeline;cameranames another timeline than the current one. Do not describe a result you have not seen. - Renders run on the person's computer:
nolgia_app_exportmp4renders the current timeline (H.264 with its audio, at its size) andpngone frame, both into a temporary folder, never over the person's files, and puts the Deliver page's settings back. They can take minutes: if a tool hands back acommand_id, follow it withnolgia_app_commandinstead of starting it again. - If Python fails, read the traceback in
error, fix the code and try once more. After two failures on the same step, explain what failed in plain words and ask how to proceed.
Resolve Python that bites
- Everything counts from 1: tracks (
timeline.GetItemListInTrack("video", 1)), nodes (graph.SetLUT(1, path),1 <= nodeIndex <= graph.GetNumNodes()), timelines (project.GetTimelineByIndex(1)) and node stack layers. Frame numbers on a timeline start at its start timecode (timeline.GetStartFrame(): 01:00:00:00 at 24 fps is frame 86400); the plugin's ownframearguments count from 0 at the start of the timeline. project_manager.CreateProject(name)makes and opens a project that is not in the project library yet:GetProjectListInCurrentFolder()leaves it out,nolgia_app_saverefuses it,project.ExportProject()answers False andCloseProject()loses it. It joins the library at its first change (a bin added, a clip imported), so make that change, then save, before anything else.media_pool.CreateEmptyTimeline(name)makes the timeline in the current media pool folder. Callmedia_pool.SetCurrentFolder(media_pool.GetRootFolder())first when it belongs at the root.project.GetCurrentTimeline()(and thetimelineglobal) is None when no timeline is open. A timeline you make in a run is not thetimelineglobal: keep the objectCreateEmptyTimelinereturned, callproject.SetCurrentTimeline(tl)and checkproject.GetCurrentTimeline().GetName().media_pool.AppendToTimelinealways appends to the current timeline.- Settings are dicts of strings:
timeline.SetSettings({"useCustomSettings": "1", "timelineResolutionWidth": "1080", "timelineResolutionHeight": "1920", "timelineFrameRate": "24"}). Timeline settings other thanuseCustomSettingsonly change while it is"1", and Resolve applies that key first.timelineFrameRateis read as a number and set as a string ("29.97 DF"for drop frame).GetSettings()answers the project's settings whileuseCustomSettingsis"0". The one-keySetSettingandGetSettingforms are deprecated; use the dict forms. - Most calls answer False instead of raising. Check every return value and read back what you set (
GetLUT,GetSettings,GetTrackCount,GetName) before reporting it.SetSettingskeeps the keys it applied before the one that failed. - Render jobs are asynchronous:
project.AddRenderJob()answers a job id,project.StartRendering([job])starts it, and the job is done only whenproject.GetRenderJobStatus(job)["JobStatus"]isComplete(FailedcarriesError); poll it with a pause between reads, and delete only the job you added (project.DeleteRenderJob(job)). Prefernolgia_app_export, which does all of this and puts the Deliver page back as it was. media_pool.ImportMedia([{"FilePath": path}])takes file paths on the person's computer and imports into the current media pool folder: callmedia_pool.SetCurrentFolder(bin)first and put the folder back afterwards. NOLGIA assets come in throughnolgia_app_import, which downloads them to the computer and imports them for you.- Clip facts are
clip.GetClipProperty()(one dict; the keys are the Clip Attributes names:FPSis a number,Resolutionis"1920x1080",TypeisVideo,AudioorVideo + Audio,Durationa timecode,Framesa count,File Paththe file). An audio clip has noFrames,ResolutionorFPS: take a music length from the cut, not from the clip. - Grades:
item.GetNodeGraph()is a clip's node graph andtimeline.GetNodeGraph()the timeline's own;GetNumNodes(),GetNodeLabel(i),GetToolsInNode(i)andGetLUT(i)read a node,SetLUT(i, path)andSetNodeEnabled(i, on)change it. The API cannot add a node: a fresh timeline graph has none (GetNumNodes()is 0), while an ungraded clip has one empty node.GetToolsInNode(i)answers None, not[], for an empty node.SetLUTtakes an absolute path or a path relative to Resolve's LUT folder (NOLGIA/Kodak Portra 400.cube) that Resolve has already listed (project.RefreshLUTList());GetLUT(i)reads it back with the computer's own separator (NOLGIA\Kodak Portra 400.cubeon Windows), so compare by name.timeline.GetCurrentVideoItem()is the clip under the playhead andtimeline.GetSelectedClips()the selection; when a grading call answers None or False, switch to the Color page withresolve.OpenPage("color"), run the step, and put the page back (resolve.GetCurrentPage()read first). - The scripting API cannot add a node to a grade, cannot read or set a node's key output gain, cannot move a clip on the timeline once placed, cannot say whether the project has unsaved changes, and cannot press buttons in Resolve's dialogs. Say so plainly and ask the person for the click instead of promising it.
project_manager.SaveProject()on a project that was never saved with a name (Resolve's own New Project or Untitled Project:project.GetName()is not inproject_manager.GetProjectListInCurrentFolder()andproject_manager.GetProjectLastModifiedTime(name)is None) opens Resolve's Save dialog and blocks every script until someone closes it. Never call it on such a project. The plugin'ssavecommand checks first and refuses with a message;infosaysin_library: false. Ask the person to save the project once with a name (File > Save Project), then go on. Loading another project over an unsaved project with content can raise the same question, andproject_manager.CloseProject()does not close such a project (Resolve 21.1.1 answers False, renames it with a timestamp and leaves an "Untitled Project" in the library);resolve.Quit()asks too. The plugin'sopenrefuses over it; ask the person to save or close it by hand.- Right after Resolve starts only its Project Manager is up:
resolve.GetCurrentPage()is None,resolve.OpenPage()does nothing andmedia_pool.ImportMedia()answers None.nolgia_app_infoshowspage: nullthen; ask the person to open or create a project (or use the plugin'sopencommand, which works from that state). project.ExportCurrentFrameAsStill(path)has been seen to answer False on a fresh Resolve session (once, during a long session of imports and renders; six fresh sessions since exported their first still fine). When it does,nolgia_app_previewshows the Color page for a moment, comes back and tries again. In your own code do the same:resolve.OpenPage("color"), go back to the page you read first, and try again.- A long
runholds the NOLGIA window until it ends. Keep runs short and settimeout_secondsfor anything that may take a while. A dialog open in Resolve (a missing media prompt, a question about a project) holds every script until someone closes it: if a command sits inrunningfor no reason, ask the person to look at Resolve.
Using NOLGIA where it helps
- NOLGIA's film stocks:
nolgia_list_color_presetslists them with their slugs, names and one-line descriptions (the same list asGET https://api.nolgia.ai/v1/color-presets).nolgia_app_importwithcolor_preset: "<slug>"installs the stock's.cubeLUT into theNOLGIAfolder of Resolve's LUT folder for this person, refreshes Resolve's LUT list, and answers the path Resolve lists it under (lut, such asNOLGIA/Kodak Portra 400.cube). Installing a LUT is free. - Missing shots, stills, music and sound: make them with
nolgia_text_to_video,nolgia_image_to_video,nolgia_text_to_imageornolgia_text_to_audioand bring them in withnolgia_app_import(into theNOLGIA importsbin, or a bin you name withbin;asset_idstakes up to 100 at a time, in order;append: trueputs them on the end of the current timeline). - These generations cost credits: say what you are about to make and roughly what it costs (read it from the tool's estimate) before you run it. Work in Resolve itself, previews and renders included, is free.
Finishing
- Save the project with
nolgia_app_save, with nopath: Resolve keeps projects in its project library and saves the open one under its own name. Never switch projects (nolgia_app_open) to save. - Export a preview with
nolgia_app_export(pngfor a still,mp4for motion) so the person has it in their NOLGIA library, and show the still. - Leave nothing behind in the render queue, and tell the person, in a few lines: what you built, where it lives (bin, timeline, track, node or color version names, the LUT's path), the one or two things they are most likely to adjust and where those are in Resolve, and the path of the safety copy.
Grade a timeline in DaVinci Resolve
Give the clips on the person's timeline the look of a real film stock: a NOLGIA film stock LUT installed in their Resolve, applied in a place of its own so their own grade stays exactly as it was, with a before and an after still from the same frame to judge it by. The stock can be swapped, switched off or dialled back by the person at any time.
Ask
- Which clips get the stock: every clip on the current timeline (default), the clips selected in the timeline, the clip under the playhead, or one video track.
- The look they are after: a few words ("warm and soft", "clean daylight", "night, tungsten"), a film or a reference image, or your suggestion. Look at a still first (see below) and propose two or three stocks that suit the footage, by their real names, with one line each on why. (Default: your first suggestion.)
- Where the stock may live. The default is an empty node at the end of each clip's grade (an ungraded clip has exactly one, so nothing of theirs changes). When the timeline's own node graph already has an empty node (the person added one on the Color page; a fresh timeline graph has none and the API cannot add one), the stock can go there once for every clip. The other way is a new local color version of each clip named after the stock, so their own version stays as it was. (Default: an empty node on each clip; the timeline graph when it has one; a new version when a clip has no empty node.)
- Whether the footage is camera log: flat, grey and washed out on the timeline because the camera recorded Sony S-Log3, ARRI LogC3, Panasonic V-Log or Blackmagic Film. Read the clip metadata first (step 1) and look at the before still; ask only when neither settles it. (Default: what the metadata and the still say; plain Rec.709 when it is a normal picture.)
Build
- Read the timeline and the grades. One
nolgia_app_runthat lists the clips in scope (track, name, first and last frame, duration,FPSandResolutionfromGetMediaPoolItem().GetClipProperty()) and, for each, its grade:item.GetNodeGraph(),GetNumNodes(), and per nodeGetNodeLabel(i),GetToolsInNode(i)andGetLUT(i), plusitem.GetCurrentVersion(). Read the camera facts too: the clip propertiesGamma Notes,Color Space Notes,Camera Type,Camera ManufacturerandInput Color Space(any may be empty), and the project settingcolorScienceMode(project.GetSetting("colorScienceMode")). Read the timeline's own graph the same way (timeline.GetNodeGraph()). Keep this list: at the end you compare against it. Say in one line what is already graded (a clip with a LUT or an output transform means the stock will stack on top; say so). - The before still. Pick a frame that shows skin or the main subject in good light, in the middle of a clip (frame counts from 0 at the start of the timeline), and call
nolgia_app_previewwith thatframe. Remember the frame number: the after still is taken from the same one. - Propose stocks. From the still and the clip facts (daylight or tungsten, how much contrast there is, how saturated it is, whether skin is in the frame), name two or three stocks with their real names and descriptions, read from
nolgia_list_color_presets. Log footage changes which LUT you install, not which stock you suggest (step 4). These are NOLGIA's film stocks:
| Slug | Name | Description |
|---|---|---|
kodak-vision3-500t | Kodak Vision3 500T | The modern film workhorse: tungsten balanced, warm shadows, soft highlight roll. |
kodak-vision3-250d | Kodak Vision3 250D | Daylight balanced negative: clean neutral skin, fine grain, gentle roll. |
kodak-vision3-200t | Kodak Vision3 200T | Medium speed tungsten stock: 500T's warmth with a tighter, cleaner feel. |
kodak-2383-print | Kodak 2383 Print | Theatrical print stock: deeper blacks, gentle cyan shadows, warm highlights. Pairs over any negative. |
kodak-portra-400 | Kodak Portra 400 | Pastel warmth and forgiving skin: low contrast, creamy highlights. |
kodak-portra-800 | Kodak Portra 800 | Portra's skin with more presence: a touch more contrast and warmth for low light. |
kodak-ektar-100 | Kodak Ektar 100 | Saturated daylight stock: punchy reds and blues, fine grain, crisp contrast. |
kodachrome-64 | Kodachrome 64 | The archive look: rich reds, dense shadows, unmistakable warmth. |
fuji-eterna-3510 | Fuji Eterna 3510 | The cinematic counterweight to Kodak: soft contrast, cool neutral, quiet skin. |
fuji-eterna-vivid | Fuji Eterna Vivid | Eterna's cool base with the color turned up: saturated without going warm. |
fuji-reala-500d | Fuji Reala 500D | Neutral daylight negative: honest color, natural greens, easy skin. |
fuji-velvia-50 | Fuji Velvia 50 | The landscape slide: high saturation, deep blues and greens, dense contrast. |
fuji-provia-100f | Fuji Provia 100F | The neutral slide: accurate color with slide-film snap, nothing pushed. |
fuji-superia-400 | Fuji Superia 400 | The consumer 90s negative: green tinted shadows, a magenta bias in skin. |
cinestill-800t | CineStill 800T | Tungsten night stock with the remjet gone: teal shadows and red halation blooming around light sources. |
ilford-hp5 | Ilford HP5 Plus | Documentary black and white: soft contrast, generous shadows, honest grain. |
kodak-tri-x | Kodak Tri-X 400 | The classic reportage black and white: punchy contrast, deep blacks, bite. |
agfa-vista | Agfa Vista | The corner store classic: warm reds against slightly cool shadows. |
arri-alexa-rec709 | ARRI Alexa Rec709 | The K1S1 LogC to Rec709 look: the neutral cinematic display transform. |
Daylight footage with people usually wants Portra 400, Vision3 250D or Reala 500D; tungsten interiors Vision3 500T or 200T; neon and street light at night CineStill 800T; landscapes Ektar 100 or Velvia 50. The list also holds stylised looks (teal and orange, bleach bypass, cross process, and others): offer those only when the person asks for a stylised look. Wait for a choice unless they said "go", then take your first suggestion.
- Install the stock.
nolgia_app_importwithcolor_preset: "<slug>"and nothing else. For camera log footage pass the stock's log version: the same slug with the camera's suffix,-slog3(Sony S-Log3 / S-Gamut3.Cine),-logc3(ARRI LogC3),-vlog(Panasonic V-Log) or-bmdfilm5(Blackmagic Film Gen 5), for examplekodak-portra-400-slog3. That LUT converts the log picture to Rec.709 with a film curve and then applies the stock, in one node, so the flat clip comes out finished. Use the plain stock instead when the log is already converted before your node: a Color Space Transform or a camera LUT in the clip's grade, anInput Color Spaceset on the clip, or a color managed project (colorScienceModeis notdavinciYRGB); converting twice crushes it. Say which you installed and why. The import installs<name>.cubein theNOLGIAfolder of Resolve's LUT folder, refreshes the LUT list and answerslut(the path Resolve lists it under,NOLGIA/Kodak Portra 400.cube, orNOLGIA/Kodak Portra 400 (S-Log3).cubefor the log version) andpath(the file). Keeplut. - Apply it in a place of its own. One
nolgia_app_run, in this order of preference, never on a node that already holds tools or a LUT. An empty node is one whereGetToolsInNode(i)answers None or[]andGetLUT(i)is"": - Each clip:
g = item.GetNodeGraph(), find an empty node, preferring the last one so the stock comes after their corrections (an ungraded clip has one node, empty), callg.SetLUT(i, lut)and readg.GetLUT(i)back. - All clips at once, only when the timeline graph has an empty node:
g = timeline.GetNodeGraph(); wheng.GetNumNodes()is at least 1 and one node is empty,SetLUTthere and every clip gets the stock after its own grade. A fresh timeline graph has no node and the API cannot add one, so this is the exception, not the default. - A clip with no empty node: the API cannot add a node. Either add a new local color version named
NOLGIA <stock name>(item.AddVersion(name, 0)thenitem.LoadVersionByName(name, 0)), read what its graph holds withGetNumNodes()andGetToolsInNode(i)before you set the LUT on an empty node of it, and tell the person that their own version is still there under the clip's Versions menu; or ask the person to add a serial node at the end of the grade of those clips (Alt+S, Option+S on a Mac, on the Color page) and say which clips. Grading calls work on the Color page: ifGetNodeGraph()answers None orSetLUTkeeps answering False, readresolve.GetCurrentPage(), switch withresolve.OpenPage("color"), run the step and put the page back.SetLUTtakeslut(relative) orpath(absolute); if both answer False, callproject.RefreshLUTList()once and try again. Record inresult, per clip, exactly where the stock went (timeline node 1, clip node 3, or version name) and which clips got nothing and why. - The after still.
nolgia_app_previewat the sameframeas the before still. Show both and say what changed in two lines (skin, shadows, highlights, saturation). Then offer: keep it, try another stock (set the newluton the same node withSetLUT, so there is still only one), or dial it back. - Dialling it back. The scripting API cannot read or set a node's key output gain, so say where it is: Color page, click the node that holds the stock, open the Key palette and lower Key Output Gain (1.0 is the full stock, about 0.5 is half).
SetNodeEnabled(i, False)switches the node off and on again for a quick comparison. A gentler stock (Portra 400 instead of Ektar 100, Vision3 250D instead of 2383) is the other way.
Check
- Before and after at the timeline's width (the plugin caps
widthat it): skin must still read as skin (no green or magenta cast), blacks must not be crushed and highlights must not clip harder than before; on log footage the after still must look like a finished picture, not still flat (a plain stock on log) and not harsh (a log version on footage already converted); a stock stacked on a clip that already had a LUT must be said and shown. - Read the grades again, as in step 1, and compare: every node the person had still has the same label, tools and LUT; the only differences are the node (or version) you used.
- Preview two more frames (a darker clip, a second scene) and look at them.
Deliver
Save the project. Export the after frame with nolgia_app_export png, and offer an mp4 of a short range (frames such as 0-119) so they can see the stock in motion. Tell the person: the stock's name and its LUT path (NOLGIA/<name>.cube), where it sits on each clip (timeline node, clip node or version), how to switch it off (the node's toggle on the Color page, or their own version in the clip's Versions menu), how to dial it back (Key Output Gain), and the path of the safety copy.
What this workflow never does: it never changes, resets or disables the person's own nodes, LUTs, versions or settings; it never adds a LUT to a node that holds anything; and it never renders, overwrites or deletes anything without asking first.
Provalo in DaVinci Resolve Studio.
Installa il plugin gratuito NOLGIA per DaVinci Resolve Studio, accedi, poi chiedi al tuo agente.

