Skip to main content
Glama
bbernstein
by bbernstein

optimize_cue_timing

Enhance cue timing in theatrical lighting by applying strategy-based adjustments to smooth transitions, dramatic timing, technical precision, or energy efficiency. Input cue and project IDs for optimization.

Instructions

Optimize the timing of cues in a cue list

Input Schema

NameRequiredDescriptionDefault
cueListIdYesCue list ID to optimize
optimizationStrategyNoOptimization strategy to applysmooth_transitions
projectIdYesProject ID containing the cue list

Input Schema (JSON Schema)

{ "properties": { "cueListId": { "description": "Cue list ID to optimize", "type": "string" }, "optimizationStrategy": { "default": "smooth_transitions", "description": "Optimization strategy to apply", "enum": [ "smooth_transitions", "dramatic_timing", "technical_precision", "energy_conscious" ], "type": "string" }, "projectId": { "description": "Project ID containing the cue list", "type": "string" } }, "required": [ "cueListId", "projectId" ], "type": "object" }

Implementation Reference

  • Main handler function for optimize_cue_timing tool. Parses input schema, validates project and cue list, generates timing optimizations using helper method, computes statistics, and returns optimization results including changes and reasoning.
    async optimizeCueTiming(args: z.infer<typeof OptimizeCueTimingSchema>) { const { cueListId, projectId, optimizationStrategy } = OptimizeCueTimingSchema.parse(args); try { const project = await this.graphqlClient.getProject(projectId); if (!project) { throw new Error(`Project with ID ${projectId} not found`); } const cueList = project.cueLists.find((cl) => cl.id === cueListId); if (!cueList) { throw new Error(`Cue list with ID ${cueListId} not found`); } const optimizations = this.generateTimingOptimizations( cueList.cues, optimizationStrategy, ); return { cueListId, strategy: optimizationStrategy, originalTiming: { totalCues: cueList.cues.length, averageFadeIn: this.calculateAverageFadeTime( cueList.cues, "fadeInTime", ), averageFadeOut: this.calculateAverageFadeTime( cueList.cues, "fadeOutTime", ), followCues: cueList.cues.filter((cue) => cue.followTime !== undefined) .length, }, optimizedTiming: optimizations.newTiming, changes: optimizations.changes, reasoning: optimizations.reasoning, estimatedImprovement: optimizations.improvement, }; } catch (error) { throw new Error(`Failed to optimize cue timing: ${error}`); } }
  • Zod input schema validation for the optimize_cue_timing tool defining required cueListId, projectId, and optional optimizationStrategy.
    const OptimizeCueTimingSchema = z.object({ cueListId: z.string(), projectId: z.string(), optimizationStrategy: z .enum([ "smooth_transitions", "dramatic_timing", "technical_precision", "energy_conscious", ]) .default("smooth_transitions"), });
  • src/index.ts:1256-1282 (registration)
    Tool registration in ListToolsRequestSchema handler, defining name, description, and inputSchema matching the Zod schema.
    name: "optimize_cue_timing", description: "Optimize the timing of cues in a cue list", inputSchema: { type: "object", properties: { cueListId: { type: "string", description: "Cue list ID to optimize", }, projectId: { type: "string", description: "Project ID containing the cue list", }, optimizationStrategy: { type: "string", enum: [ "smooth_transitions", "dramatic_timing", "technical_precision", "energy_conscious", ], default: "smooth_transitions", description: "Optimization strategy to apply", }, }, required: ["cueListId", "projectId"], },
  • src/index.ts:2282-2294 (registration)
    Tool call handler registration in CallToolRequestSchema switch statement, dispatching to cueTools.optimizeCueTiming.
    case "optimize_cue_timing": return { content: [ { type: "text", text: JSON.stringify( await this.cueTools.optimizeCueTiming(args as any), null, 2, ), }, ], };
  • Private helper method implementing the core optimization logic based on strategy, generating changes, reasoning, and improvement metrics used by the handler.
    private generateTimingOptimizations(cues: any[], strategy: string) { // Simplified optimization logic - in practice this would be more sophisticated const changes = []; let improvement = ""; switch (strategy) { case "smooth_transitions": changes.push("Standardized fade times for consistency"); changes.push("Added buffer time between manual cues"); improvement = "Smoother visual transitions"; break; case "dramatic_timing": changes.push("Shortened fade times for dramatic moments"); changes.push("Added follow cues for automatic sequences"); improvement = "Enhanced dramatic impact"; break; case "technical_precision": changes.push("Standardized cue numbering increments"); changes.push("Consistent fade time patterns"); improvement = "Easier operation and fewer mistakes"; break; case "energy_conscious": changes.push("Longer fade times to reduce power spikes"); changes.push("Staggered fixture activation"); improvement = "Reduced power consumption peaks"; break; } return { newTiming: { /* optimized timing values */ }, changes, reasoning: `Applied ${strategy} optimization strategy`, improvement, }; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bbernstein/lacylights-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server