Generate With AI
in the Kirby Panel
the selected text from the toolbar, or take an inline suggestion as you type.
Bring Context to Your
Prompt Party
View Button
Skills
Inline Suggestions
Luise Frey photographs rooms after everyone has left them: a school gym on the first morning of the holidays, a ferry terminal at four in the morning.
Toolbar Buttons
Luise Frey photographs rooms after everyone has left them: a school gym on the first morning of the holidays, a ferry terminal at four in the morning, the back office of a shop that closed last spring.
The twenty-eight prints in this exhibition were made over six winters in northern Germany and on the Faroe Islands. Frey works with a large-format camera and available light, which means exposures long enough for the dust to settle inside the frame.
Rooms of Silence is her first solo exhibition in Leipzig. A conversation with the artist takes place on 14 November at 7 pm, admission free.
Blocks & Layouts
Text ×
Luise Frey photographs rooms after everyone has left them: a school gym on the first morning of the holidays, a ferry terminal at four in the morning, the back office of a shop that closed last spring.
The twenty-eight prints in this exhibition were made over six winters in northern Germany and on the Faroe Islands. Frey works with a large-format camera and available light, which means exposures long enough for the dust to settle inside the frame.
Rooms of Silence is her first solo exhibition in Leipzig. A conversation with the artist takes place on 14 November at 7 pm, admission free.
Generate Content for
Multiple Panel Fields
Drive Copilot
From PHP
- Hooks & CLIGenerate content on save or in batch from the command line.
- Two Output ModesPlain text or structured objects validated against a JSON schema.
// Run: kirby generate-meta-descriptions
use JohannSchopplich\Copilot\AI\Client;
use Kirby\CLI\CLI;
return [
'description' => 'Generate missing meta descriptions for blog posts',
'command' => static function (CLI $cli): void {
$client = Client::instance();
foreach (page('blog')->children() as $post) {
if ($post->meta_description()->isNotEmpty()) {
continue;
}
$description = $client->generateText([
['role' => 'system', 'content' => 'Write a 155-character SEO description.'],
['role' => 'user', 'content' => $post->text()->kirbytext()],
]);
$post->update(['meta_description' => $description]);
$cli->out('✓ ' . $post->title());
}
$cli->success('Done');
}
];