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
Skills
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.
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.
Luise Frey photographs rooms
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.
Generate Content for
Multiple Panel Fields
Luise Frey: Rooms of Silence
Text ×
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');
}
];