Nodes and media
ثبت تصویر با دوربین
OpenClaw از ثبت تصویر دوربین برای گردشکارهای عامل در Nodeهای جفتشدهٔ iOS، Android، macOS و Linux پشتیبانی میکند: از طریق Gateway node.invoke یک عکس (jpg) یا کلیپ ویدیویی کوتاه (mp4، با صدای اختیاری) ثبت کنید.
تمام دسترسیهای دوربین در هر پلتفرم پشت یک تنظیم تحت کنترل کاربر قرار دارند.
Node در iOS
تنظیم کاربر در iOS
- زبانهٔ iOS Settings → Camera → Allow Camera (
camera.enabled).- پیشفرض: روشن (نبود کلید بهمعنای فعالبودن در نظر گرفته میشود).
- در حالت خاموش: فرمانهای
camera.*مقدارCAMERA_DISABLEDرا برمیگردانند.
فرمانهای iOS (از طریق Gateway node.invoke)
-
camera.list- بار پاسخ:
devices— آرایهای از{ id, name, position, deviceType }.
- بار پاسخ:
-
camera.snap- پارامترها:
facing:front|back(پیشفرض:front)maxWidth: عدد (اختیاری؛ پیشفرض1600)quality:0..1(اختیاری؛ پیشفرض0.9، محدودشده به[0.05, 1.0])format: در حال حاضرjpgdelayMs: عدد (اختیاری؛ پیشفرض0، با سقف داخلی10000)deviceId: رشته (اختیاری؛ ازcamera.list)
- بار پاسخ:
format: "jpg"،base64،width،height. - محافظ بار: عکسها دوباره فشرده میشوند تا بار کدگذاریشده با base64 زیر 5MB باقی بماند.
- پارامترها:
-
camera.clip- پارامترها:
facing:front|back(پیشفرض:front)durationMs: عدد (پیشفرض3000، محدودشده به[250, 60000])includeAudio: بولی (پیشفرضtrue)format: در حال حاضرmp4deviceId: رشته (اختیاری؛ ازcamera.list)
- بار پاسخ:
format: "mp4"،base64،durationMs،hasAudio.
- پارامترها:
الزام پیشزمینه در iOS
مانند canvas.*، Node در iOS فرمانهای camera.* را فقط در پیشزمینه مجاز میداند. فراخوانیهای پسزمینه NODE_BACKGROUND_UNAVAILABLE را برمیگردانند.
ابزار کمکی CLI
سادهترین راه برای دریافت فایلهای رسانهای، استفاده از ابزار کمکی CLI است که رسانهٔ رمزگشاییشده را در یک فایل موقت مینویسد و مسیر ذخیرهشده را چاپ میکند.
openclaw nodes camera snap --node <id> # پیشفرض: هر دو دوربین جلو و پشت (2 خط MEDIA)openclaw nodes camera snap --node <id> --facing frontopenclaw nodes camera clip --node <id> --duration 3000openclaw nodes camera clip --node <id> --no-audionodes camera snap بهطور پیشفرض --facing both است و هر دو نمای جلو و پشت را ثبت میکند تا عامل به هر دو نما دسترسی داشته باشد؛ --device-id را با یک جهت صریح واحد ارسال کنید (both هنگام تنظیم --device-id رد میشود). فایلهای خروجی موقت هستند (در پوشهٔ موقت سیستمعامل)، مگر اینکه پوشش اختصاصی خود را بسازید.
Node در Android
تنظیم کاربر در Android
- صفحهٔ Android Settings → Camera → Allow Camera (
camera.enabled).- در نصبهای جدید، پیشفرض خاموش است. نصبهای موجودی که پیش از معرفی این تنظیم انجام شدهاند به حالت روشن منتقل میشوند تا ارتقا باعث ازدسترفتن بیسروصدای دسترسی دوربینی که قبلاً کار میکرد نشود.
- در حالت خاموش: فرمانهای
camera.*مقدارCAMERA_DISABLED: enable Camera in Settingsرا برمیگردانند.
مجوزها
CAMERAبرای هر دوcamera.snapوcamera.clipالزامی است؛ نبودن یا ردشدن مجوز باعث بازگشتCAMERA_PERMISSION_REQUIREDمیشود.RECORD_AUDIOبرایcamera.clipهنگامی الزامی است کهincludeAudioبرابر باtrueباشد؛ نبودن یا ردشدن مجوز باعث بازگشتMIC_PERMISSION_REQUIREDمیشود.
برنامه در صورت امکان، مجوزهای زمان اجرا را درخواست میکند.
الزام پیشزمینه در Android
مانند canvas.*، Node در Android فرمانهای camera.* را فقط در پیشزمینه مجاز میداند. فراخوانیهای پسزمینه NODE_BACKGROUND_UNAVAILABLE: command requires foreground را برمیگردانند.
فرمانهای Android (از طریق Gateway node.invoke)
-
camera.list- بار پاسخ:
devices— آرایهای از{ id, name, position, deviceType }.
- بار پاسخ:
-
camera.snap- پارامترها:
facing(front|back، پیشفرضfront)،quality(پیشفرض0.95، محدودشده به[0.1, 1.0])،maxWidth(پیشفرض1600)،deviceId(اختیاری؛ شناسهٔ ناشناخته باINVALID_REQUESTناموفق میشود). - بار پاسخ:
format: "jpg"،base64،width،height. - محافظ بار: برای نگهداشتن base64 زیر 5MB دوباره فشرده میشود (همان بودجهٔ iOS).
- پارامترها:
-
camera.clip- پارامترها:
facing(پیشفرضfront)،durationMs(پیشفرض3000، محدودشده به[200, 60000])،includeAudio(پیشفرضtrue)،deviceId(اختیاری). - بار پاسخ:
format: "mp4"،base64،durationMs،hasAudio. - محافظ بار: حجم MP4 خام پیش از کدگذاری base64 به 18MB محدود است؛ کلیپهای بزرگتر با
PAYLOAD_TOO_LARGEناموفق میشوند (durationMsرا کاهش دهید و دوباره تلاش کنید).
- پارامترها:
برنامهٔ macOS
تنظیم کاربر در macOS
برنامهٔ همراه macOS یک کادر انتخاب ارائه میکند:
- Settings → General → Allow Camera (
openclaw.cameraEnabled).- پیشفرض: خاموش.
- در حالت خاموش: درخواستهای دوربین
CAMERA_DISABLED: enable Camera in Settingsرا برمیگردانند.
ابزار کمکی CLI (فراخوانی Node)
برای فراخوانی فرمانهای دوربین در Node مربوط به macOS، از CLI اصلی openclaw استفاده کنید.
openclaw nodes camera list --node <id> # فهرست شناسههای دوربینopenclaw nodes camera snap --node <id> # مسیر ذخیرهشده را چاپ میکندopenclaw nodes camera snap --node <id> --max-width 1280openclaw nodes camera snap --node <id> --delay-ms 2000openclaw nodes camera snap --node <id> --device-id <id>openclaw nodes camera clip --node <id> --duration 10s # مسیر ذخیرهشده را چاپ میکندopenclaw nodes camera clip --node <id> --duration-ms 3000 # مسیر ذخیرهشده را چاپ میکند (پرچم قدیمی)openclaw nodes camera clip --node <id> --device-id <id>openclaw nodes camera clip --node <id> --no-audioopenclaw nodes camera snapبهطور پیشفرضmaxWidth=1600است، مگر اینکه بازنویسی شود.camera.snapپس از گرمشدن و تثبیت نوردهی، پیش از ثبت بهمدتdelayMs(پیشفرض 2000ms، محدودشده به[0, 10000]) منتظر میماند.- بارهای عکس دوباره فشرده میشوند تا base64 زیر 5MB باقی بماند.
میزبان Node در Linux
Plugin همراه Linux Node، ثبت تصویر دوربین را به سرویس CLI openclaw node اضافه میکند. این قابلیت روی میزبان بدون رابط گرافیکی کار میکند و به برنامهٔ دسکتاپ Linux نیازی ندارد.
دسترسی دوربین بهطور پیشفرض خاموش است. آن را زیر ورودی Plugin فعال کنید، سپس سرویس Node را راهاندازی مجدد کنید تا اعلان Gateway آن دوباره ساخته شود:
{ plugins: { entries: { "linux-node": { config: { camera: { enabled: true }, }, }, }, },}الزامات:
- FFmpeg با ورودی V4L2،
libx264و پشتیبانی AAC - یک دستگاه
/dev/video*که برای کاربر سرویس Node قابل خواندن باشد؛ در توزیعهای رایج، آن کاربر را به گروهvideoاضافه کنید - برای کلیپهایی با
includeAudio: trueپیشفرض، یک سرور PulseAudio فعال یا لایهٔ سازگاری PulseAudio در PipeWire با یک منبع پیشفرض
Linux مسیرهای دستگاه V4L2 خواندنی و دارای قابلیت ثبت را از camera.list برمیگرداند؛ FFmpeg هر نامزد /dev/video* را بررسی میکند و Nodeهای فاقد فراداده یا صرفاً خروجی را کنار میگذارد. مقدار position دستگاه برابر با unknown است، بنابراین درخواستهای جهت بدون deviceId بهجای ادعای وجود دوربین جلو یا پشت، یک عکس یا کلیپ با موقعیت unknown تولید میکنند. وقتی میزبانی چند دوربین دارد، از deviceId استفاده کنید. camera.snap برای delayMs از گرمسازی ورودی FFmpeg استفاده میکند و ضمن محدودکردن عرض، نسبت ابعاد را حفظ میکند. camera.clip صدای میکروفون را بهعنوان ترک صوتی MP4 ضبط میکند؛ OpenClaw عمداً هیچ فرمان مستقل میکروفونی ارائه نمیدهد.
این Plugin برای ویدیوی MP4 از libx264 استفاده میکند و کدکها را بیسروصدا تغییر نمیدهد. یک ساخت FFmpeg بدون ورودی یا رمزگذارهای موردنیاز، CAMERA_UNAVAILABLE را برمیگرداند. عکسها و کلیپهایی که از بودجهٔ بار base64 برابر با 25MB فراتر بروند، با PAYLOAD_TOO_LARGE ناموفق میشوند.
camera.snap و camera.clip همچنان فرمانهایی خطرناک هستند. فقط هنگامی آنها را به gateway.nodes.commands.allow اضافه کنید که قصد فعالکردن ثبت را دارید؛ فعالکردن Plugin بهتنهایی سیاست Gateway را دور نمیزند.
ایمنی و محدودیتهای عملی
- دسترسی به دوربین و میکروفون درخواستهای معمول مجوز سیستمعامل را فعال میکند (و به رشتههای کاربرد در
Info.plistنیاز دارد). - کلیپهای ویدیویی برای جلوگیری از بارهای بیشازحد بزرگ Node به 60s محدود شدهاند (سربار base64 بهعلاوهٔ محدودیتهای پیام).
ویدیوی صفحهنمایش در macOS (سطح سیستمعامل)
برای ویدیوی صفحهنمایش (نه دوربین)، از برنامهٔ همراه macOS استفاده کنید:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # مسیر ذخیرهشده را چاپ میکندبه مجوز Screen Recording در macOS (TCC) نیاز دارد.