Camera and video creation in the Genuin SDK

Record, import, edit, and post video from inside your app with the Genuin camera modules, and control who can create from Brand Control Center.

Members create posts without leaving your app. They record clips with the device camera or import a video from the gallery, trim and decorate it, and post it to a group in your community. Creation ships as a separate module on Android and iOS, so an app that only shows feeds doesn't carry the video toolchain. The Web SDK has no camera; on the web, members create posts on your community site by uploading a file.

Creation needs a signed-in member. A guest who taps a create action is asked to sign in first. See Choose how members sign in to the Genuin SDK.

Modules

PlatformModuleInstallAddsRequires
AndroidCameracom.begenuin:camera:2.1.5 (48 MB AAR)Recording, gallery import, trimmer, editor, post screen, and the background upload servicecore, ui
iOSGenuinCamerapod "GenuinCamera" from https://bitbucket.org/genuindev/genuin_sdk_ios.git, tag 2.1.5Recording, gallery import, editor, post screen, and the upload managerGenuinCore, GenuinUI
WebNone—The Web SDK renders feeds only. Your community site's Create page accepts an uploaded MP4 or WebM file.—

On Android, Core finds the Camera module at runtime. Without it, a tap on a create action shows your brand's unsupported-feature message as a toast. On iOS, register the module once at launch, after the core SDK:

AppDelegate.swift
swift
import GenuinCore
import GenuinCamera

func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  GenuinSDK.shared.initialize(apiKey: "{{API_KEY}}")
  GenuinCamera.shared.initialize()   // registers the camera with Core
  return true
}

Without GenuinCamera.shared.initialize(), the create actions on iOS return without opening anything.

The camera opens from the create button in feeds and from the reply and video-comment actions. iOS also exposes a direct entry point that signs the member in with your token and presents the camera full screen:

Open the camera
swift
GenuinSDK.shared.initiateCreatePost(
  fromVC: self,
  ssoToken: "{{SSO_TOKEN}}",
  params: ["name": "John Doe", "email": "john.doe@example.com"]   // optional
)

Permissions

The modules don't declare the camera, microphone, or media permissions themselves. Your app declares them, and the SDK checks for the declaration before it opens a camera or gallery screen, then requests access from the member at runtime.

Android

Add the permissions to your AndroidManifest.xml. The Camera module's own manifest declares none of them, and Core declares only INTERNET, ACCESS_NETWORK_STATE, VIBRATE, and WAKE_LOCK.

AndroidManifest.xml
xml
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
PermissionNeeded forWithout the declaration
android.permission.CAMERARecording clips, profile and community photos, link thumbnailsCreate actions show the unsupported-feature toast and log a camera-access-denied event
android.permission.RECORD_AUDIOAudio on recordings, voice comments, on-device transcriptsSame as above; the SDK checks CAMERA and RECORD_AUDIO together before opening the camera
android.permission.READ_MEDIA_VIDEOGallery import on Android 13 (API 33) and laterThe gallery button shows the toast and logs a gallery-access-denied event
android.permission.READ_EXTERNAL_STORAGE with android:maxSdkVersion="32"Gallery import on Android 12 and lowerSame as above on those versions
android.permission.WRITE_EXTERNAL_STORAGEOptional. Saving the finished video to the device from the preview screen on Android 9 and lowerThe save button asks for the permission and skips the save if it's denied

At runtime the SDK requests CAMERA and RECORD_AUDIO together when the camera opens, and the media permission when the member taps the gallery. A member who denies them sees the SDK's permission screen with a Settings button; your app doesn't need its own prompt.

iOS

Add the usage descriptions to your app's Info.plist. Before opening a picker or camera, the SDK checks Bundle.main for the key and, when it's missing, shows your brand's unsupported-feature alert instead of crashing. iOS itself terminates an app that accesses the camera or microphone without the key.

Info.plist
xml
<key>NSCameraUsageDescription</key>
<string>Genuin needs permissions to open your camera and microphone. This allows Genuin to record videos that can be shared with other people.</string>
<key>NSMicrophoneUsageDescription</key>
<string>Genuin needs permissions to open your camera and microphone. This allows Genuin to record videos that can be shared with other people.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Genuin needs permissions to access your photo library. This allows Genuin to download videos to your phone and save it to your library.</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>The transcript of your recording will be displayed to you in the end for you to overlay it on the audio message.</string>
Info.plist keyNeeded forRequested with
NSCameraUsageDescriptionRecording clips and video commentsAVCaptureDevice.requestAccess(for: .video) when the camera opens
NSMicrophoneUsageDescriptionAudio on recordings and voice commentsAVCaptureDevice.requestAccess(for: .audio) when the camera opens
NSPhotoLibraryUsageDescriptionGallery import, cover images from Photos, saving videosPHPhotoLibrary.requestAuthorization when the member opens the camera roll; limited access is accepted
NSSpeechRecognitionUsageDescriptionThe transcript shown after an audio recordingSFSpeechRecognizer authorization when the member records audio

Replace the strings with your own wording; the ones above are Genuin's defaults. NSContactsUsageDescription, NSLocationWhenInUseUsageDescription, and NSUserTrackingUsageDescription belong to other features and are covered in the iOS SDK guide.

Web

No browser permission is involved. The community site's Create page takes an existing file through a drop zone and never opens the camera or microphone, so there's no getUserMedia prompt.

Recording and upload limits

LimitAndroidiOSWeb (community site)
Post length, maximum300 seconds across all clips300 seconds across all clips300 seconds
Post length, minimum4 secondsNot enforced; the record button re-enables 1 second after it starts4 seconds
Clips per postNo fixed count; the clips add up to the 300-second capSameOne file
Gallery importTrimmed to 300 seconds in the import editorSameRejected over 300 seconds
Video comment120 seconds120 seconds—
Audio comment—120 seconds—
Recording speed1x, 2x, 4x1x, 2x—
Countdown3 or 10 seconds, with a stop-recording-after timer3 seconds, with a stop-recording-after timer in 0.05-second steps—
Capture1280x720 when the camera offers it, otherwise the first 1920-wide size; H.264 video and AAC audio at the device's QUALITY_HIGH bit rate and frame rateAVCaptureSession preset 1280x720; export preset 1280x720—
OutputPortrait MP4 merged with FFmpeg to the size that matches the screen ratio: 640x960, 688x1220 (16:9), 720x1354 (17:9), 736x1472 (18:9), 760x1604 (19:9), or 800x1776 (20:9)Portrait MP4Uploaded as-is
File sizeNo client-side cap; the upload reports the size as video_sizeNo client-side cap2 GB, MP4 or WebM, 9:16 aspect ratio
Description2,000 charactersNot verifiedNot verified

The merge step scales each clip to the output size and pads it rather than cropping, so a landscape import keeps its full frame with bars above and below.

Editing tools

ToolAndroidiOS
Trim, reorder, retake, and delete clipsTrimmer with a frame strip, edit-clips and delete-clip actions on the cameraGallery video editor and clip editor with an add-clip cell while the total is under 300 seconds
Text overlayEight fonts, colours, a transparent, white, or black background, and left, centre, or right alignmentSame eight fonts: Inter (two styles), Bebas Neue, Courier Prime, Scope One, Lora, Varela Round, Nunito
StickersGIPHY picker with Recents, Stickers, Text, and Emoji tabsSame picker, draggable
Question overlayFor Q&A posts: pick, shuffle, add, or edit a questionQuestion editor and draggable question view
Link cardPreview of a shared link on the videoDraggable link view
Cover imagePick a frame as the thumbnail, or change it laterCover image selection
TranscriptOn-device speech-to-text shown under audio-only postsApple speech recognition shown after an audio recording
Post screenDescription with @mentions, cover, add link, Post to group picker, privacySame fields

Background music, transitions, and AI-generated captions aren't in version 2.1.5 of either module. Edit videos in the Genuin SDK describes each tool in detail.

Who can create

Three levels decide whether a member sees a create button and where the post can go.

Brand. Three flags on your brand record gate creation everywhere: camera_enabled (default on) shows or hides camera entry points, post_enabled (default on) shows or hides the create button in SDK feeds, and create_post_enabled (default off) shows the Create button on your community site. The Genuin team sets them; there's no screen for them in Brand Control Center.

Community. In Brand Control Center, go to Manage > Communities, open the community, and under Who can create Groups choose All community members or Admins. The same choice appears when you create a community.

Group. Posts always belong to a group. Go to Manage > Groups, open the group, and set its two access options. The choices depend on the community's privacy:

CommunityWho can see this GroupWho can post in this Group
PublicEveryone (including people without an account) or Group Members onlyAll community members or Group Members only
PrivateAll community members or Group Members onlyAll community members or Invite-only (members you invite or approve)

The SDK's post screen offers the member only the groups they're allowed to post in.

Limitations

  • Portrait only: The camera records and exports portrait video; landscape imports are padded, not rotated.
  • Module size: The Android Camera module adds about 48 MB before compression because it bundles the FFmpeg toolchain and the on-device speech model.
  • No camera on the web: The Web SDK can't record or upload. Creation on the web is the community site's Create page, which takes one MP4 or WebM file of 4 to 300 seconds and up to 2 GB.
  • Permissions are yours to declare: The SDK checks your manifest or Info.plist and shows the unsupported-feature message when a declaration is missing; it never adds permissions.
  • Brand flags aren't self-serve: camera_enabled, post_enabled, and create_post_enabled change through the Genuin team.
  • No music, transitions, or AI captions in the 2.1.5 camera modules.
  • Signed-in members only: Guests are asked to sign in before the camera opens.

See also

TRUST AND COMPLIANCE

© 2026 Genuin Inc.

Genuin Footer