July 2026 upgrades - #60
Conversation
…eration and improve gemini input handling
…n support, and refactor image processing for better performance.
…n generated images, and refactor border styling logic
…nstructions and update dependency lockfiles
There was a problem hiding this comment.
Code Review
This pull request introduces support for new AI models and backends (such as Omni and Gemini Animation), updates the project's documentation and configuration from Firebase Studio to Antigravity, and improves image processing, error handling, and caching. Key feedback includes addressing a potential unhandled file-not-found error in the Gemini animation frame generation when safety filters block an image, removing redundant variable re-declarations in the image processing helper, and reverting temporary changes to the default starting scene that bypass the main menu.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| await generateImageWithGemini( | ||
| "gemini_anim_frame", | ||
| objectType, | ||
| lastFrameImageData, | ||
| visualStyle, | ||
| currentFramePath | ||
| ); |
There was a problem hiding this comment.
If the Gemini image generation is blocked by safety filters, generateImageWithGemini returns "__BLOCKED__" and does not write to currentFramePath. This will cause the subsequent fs.readFileSync(currentFramePath) call to throw a FileNotFound (ENOENT) error. You should check the return value and handle the blocked case gracefully.
| await generateImageWithGemini( | |
| "gemini_anim_frame", | |
| objectType, | |
| lastFrameImageData, | |
| visualStyle, | |
| currentFramePath | |
| ); | |
| const resultPath = await generateImageWithGemini( | |
| "gemini_anim_frame", | |
| objectType, | |
| lastFrameImageData, | |
| visualStyle, | |
| currentFramePath | |
| ); | |
| if (resultPath === "__BLOCKED__") { | |
| throw new Error(`Gemini animation frame ${i} generation was blocked by safety filters`); | |
| } |
| const cornerRadius = 16; | ||
| const borderWidth = 4; // Uniform border width around all sides | ||
| const borderColor = "black"; // Border color |
There was a problem hiding this comment.
The variables cornerRadius, borderWidth, and borderColor are already declared at the top of the function (lines 65-67). Re-declaring them here inside the try block shadows the outer variables, which is redundant and confusing. Consider removing the outer declarations if they are no longer needed, or avoid re-declaring them here.
|
|
||
| create() { | ||
| this.scene.start('StageClean'); | ||
| this.scene.start('IOPuzzle_Fire'); |
There was a problem hiding this comment.
The default starting scene has been changed to 'IOPuzzle_Fire'. This bypasses the main menu and sandbox stage, which appears to be a leftover from local testing/debugging. Please verify if this should be reverted to 'StageClean' before merging.
| this.scene.start('IOPuzzle_Fire'); | |
| this.scene.start('StageClean'); |
|
|
||
| this.input.once('pointerdown', () => { | ||
| this.scene.start('StageClean'); | ||
| this.scene.start('IOPuzzle_Fire'); |
There was a problem hiding this comment.
The scene started upon pointer down has been changed to 'IOPuzzle_Fire'. This bypasses the sandbox stage ('StageClean'), which appears to be a leftover from local testing/debugging. Please verify if this should be reverted to 'StageClean'.
| this.scene.start('IOPuzzle_Fire'); | |
| this.scene.start('StageClean'); |
No description provided.