К основному содержанию
скилл CX Codex

extension-camera — скилл для Claude Code: что делает и как установить

Добавляет в агент правила работы с веб-камерой через React-хук useCamera. Пригодится для съёмки фото и видеопревью в браузере.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add caffeinelabs/skills --skill extension-camera -a claude-code
Открыть на GitHub

Что делает extension-camera

Скилл учит агента внедрять готовый хук useCamera из пакета @caffeineai/camera. В коде ничего не придётся писать с нуля: хук уже содержит методы управления видеопотоком, проверку поддержки браузером и типизированные ошибки вроде отказа в доступе к устройству.

Внутри зашиты чёткие правила построения интерфейса. Агент привязывает videoRef к элементу <video>, скрывает служебный <canvas> и блокирует кнопки управления до завершения инициализации. Снимки сохраняются как объекты File с выбором формата (jpeg, png, webp) и качества сжатия от 0 до 1.

На десктопе переключение камеры работать не будет — активен только режим environment. Это ограничение заложено в логику хука, поэтому на обычных компьютерах кнопку смены камеры оставлять бессмысленно.

Какие задачи решает

  • встроить видеопревью веб-камеры через хук useCamera
  • настроить захват и сохранение снимков в File
  • обработать ошибки разрешений и отсутствия веб-камеры
  • заблокировать интерфейс на время инициализации камеры

Примеры запросов агенту

  • Добавь компонент для съёмки фото с веб-камеры через хук useCamera
  • Сделай превью камеры с кнопками старта, остановки и переключения на фронталку
  • Настрой обработку ошибок доступа к веб-камере в интерфейсе

Как установить extension-camera

1Через Skills CLI (Vercel)

npx skills add caffeinelabs/skills --skill extension-camera -a claude-code

2Вручную: положить файлы

~/.claude/skills/extension-camera/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/extension-camera/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о extension-camera

Как установить extension-camera в Claude Code?

Выполните команду npx skills add caffeinelabs/skills --skill extension-camera -a claude-code. Файл навыка сохранится по пути ~/.claude/skills/extension-camera/SKILL.md.

Что делает скилл extension-camera?

Он даёт агенту инструкции и примеры для встраивания веб-камеры через React-хук useCamera. Включает методы запуска потока, съёмки фото и проверки поддержки в браузере.

Можно ли переключать камеру на обычном компьютере?

Нет, инструкция прямо указывает, что на десктопе переключение не работает и используется только режим environment. Смена камеры рассчитана на мобильные устройства.

Исходный текст

SKILL.md · Apache-2.0
---
name: extension-camera
description: Web-camera support.
version: 0.1.4
compatibility:
  npm:
    "@caffeineai/camera": "~0.1.1"
caffeineai-subscription: [none]
---

# Camera
Camera extension for [Caffeine AI](https://caffeine.ai?utm_source=caffeine-skill&utm_medium=referral).

## Overview

This skill adds web-camera access via a prefabricated React hook. Supports photo capture, camera switching, and error handling.

# Frontend

For camera support:

There is a prefabricated React hook `@caffeinelabs/camera/hooks/useCamera.ts` that cannot be modified.

```typescript filepath=@caffeinelabs/camera/hooks/useCamera.ts
import { RefObject } from 'react';

export interface CameraConfig {
  // Camera facing mode - 'user' for front camera, 'environment' for back camera
  facingMode?: 'user' | 'environment';
  // Ideal video width and height in pixels
  width?: number;
  height?: number;
  // Image quality for capture (0-1, where 1 is highest quality)
  quality?: number;
  format?: 'image/jpeg' | 'image/png' | 'image/webp';
}

export interface CameraError {
  type: 'permission' | 'not-supported' | 'not-found' | 'unknown' | 'timeout';
  message: string;
}

export interface UseCameraReturn {
  // Whether camera is currently active and streaming
  isActive: boolean;
  // Whether camera is supported in current browser (null while checking)
  isSupported: boolean | null;
  // Current error state, if any
  error: CameraError | null;
  // Whether camera is initializing, starting, switching, or stopping
  isLoading: boolean;
  currentFacingMode: 'user' | 'environment';
  
  // Returns true on success
  startCamera: () => Promise<boolean>;
  stopCamera: () => Promise<void>;
  capturePhoto: () => Promise<File | null>;
  // Returns true on success
  switchCamera: () => (newFacingMode?: 'user' | 'environment') : Promise<boolean>;
  // Returns true on success
  retry: () => Promise<boolean>;
  
  // Ref to attach to video element for camera preview
  videoRef: RefObject<HTMLVideoElement>;
  // Ref to canvas element used for photo capture (can be hidden)
  canvasRef: RefObject<HTMLCanvasElement>;
}

export declare function useCamera(config?: CameraConfig): UseCameraReturn;
```

Usage example:

```
import { useCamera } from '@caffeineai/camera';

function CameraComponent() {
    const { 
        isActive, 
        isSupported, 
        error, 
        isLoading,
        startCamera, 
        stopCamera, 
        capturePhoto,
        switchCamera,
        videoRef, 
        canvasRef 
    } = useCamera({ 
        autoStart: true,
        facingMode: 'environment' 
    });

    if (isSupported === false) {
        return <div>Camera not supported</div>;
    }

    return (
        <div>
            <video 
                ref={videoRef} 
                style={{ width: '100%', height: 'auto' }}
                playsInline
                muted
            />
            <canvas ref={canvasRef} style={{ display: 'none' }} />
            
            {error && <div>Error: {error.message}</div>}
            
            <div>
                <button onClick={startCamera} disabled={isLoading || isActive}>
                    Start Camera
                </button>
                <button onClick={stopCamera} disabled={isLoading || !isActive}>
                    Stop Camera
                </button>
                <button onClick={switchCamera} disabled={isLoading || !isActive}>
                    Switch Camera
                </button>
                <button onClick={capturePhoto} disabled={!isActive}>
                    Take Photo
                </button>
            </div>
        </div>
    );
}
```

Always place a capture button on camera preview!
Always show a camera preview when the user opens the camera
On desktop, make sure that camera cannot be switched. Only 'environment' is working.
Properly display camera error messages in the app.
Do not make camera buttons clickable until the camera is fully initialized and ready.
Ensure the camera preview has explicit, non-zero dimensions (fixed height, min-height, or an aspect-ratio wrapper) so it never collapses due to layout.
Make the preview responsive across screen sizes (e.g., width: 100% with a stable aspect ratio).

© caffeinelabs · Apache-2.0 · caffeinelabs/skills

Похожие скиллы

Всё по теме «Фронтенд и UI» →
camera-systems gamedev-skills Рецепты для игровых камер в 2D и 3D: плавное следование, мёртвые зоны, опережение движения и обработка столкновений для Godot и Unity. CX Codex +1 7 400установок roblox-camera TabooHarmony Скилл для скриптинга камеры в Roblox: CFrame, рейкасты с экрана, первый и третий вид, катсцены. Пригодится, когда камера дрожит или лезет сквозь стены. CX Codex +1 1 800установок build-game-camera-controls MengTo Скилл для настройки игровых камер в Three.js: изометрия, слежение, орбита, окклюзия, тряска и тач-жесты. CX Codex +1 1 300установок jetson-customize-camera Jetson Team Подключает сенсоры MIPI и GMSL на платах Jetson Thor или Orin через оверлей дерева устройств ядра. Помогает настроить порты CSI, когда v4l2-ctl не видит каналы захвата видео. CX Codex +1 1 100установок iphone-duo-camera mirzaaghazadeh Скилл для работы с двумя фронтальными камерами iPhone Duo: виртуальная камера, внутренняя под экраном и внешняя ultra-wide. CX Codex +1 500установок fishjam software-mansion-labs Скилл по платформе Fishjam и её SDK: помогает агенту писать бэкенд и клиент для видео, аудио и трансляций. CX Codex +1 761установок

Из того же набора25

extension-email-calendar-events Скилл добавляет в приложение календарные события и рассылку iCalendar-приглашений по почте. Пригодится, если нужны встречи с гостями без ручной сборки ICS. CX Codex +1 28 400установок extension-email-marketing Добавляет в приложение на Caffeine AI маркетинговые письма по темам: подписчики, токены отписки и страница /unsubscribe на своём фронтенде. CX Codex +1 28 100установок extension-qr-code Добавляет в React-приложение сканирование QR-кодов через камеру устройства. Пригодится, когда нужно считать код прямо в браузере. CX Codex +1 28 200установок extension-stripe Добавляет в проект на Caffeine AI оплату картами через Stripe: создание checkout-сессии и проверку её статуса. Пригодится, когда нужен приём платежей внутри канистры. CX Codex +1 28 200установок extension-posting-to-x Скилл для сборок Caffeine, которые публикуют твиты в X. Задаёт единственный поддерживаемый путь через пакет x-client и OAuth 2.0 PKCE. CX Codex +1 28 100установок extension-openai Задаёт правила интеграции OpenAI в канистры Motoko через пакет openai-client. Защищает API-ключ от утечки при реплицированных вызовах. CX Codex +1 28 100установок extension-email-raw Скилл добавляет в проект отправку одного письма сразу нескольким получателям через to, cc и bcc. Пригодится, когда нужно разослать уведомление участникам встречи. CX Codex +1 28 100установок extension-invite-links Скилл добавляет в проект систему приглашений и сбор ответов RSVP. Гости отправляют подтверждения по кодам без авторизации, а администратор видит сводку через вход в систему. CX Codex +1 28 100установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой