Skip to content

Navigation Menu

Sign in
Sign up

Repository files navigation

SonicNest

SonicNest logo

Visit the Ram Sandesh Gumroad storefront

πŸ›οΈ Gumroad Store: https://ramsandesh.gumroad.com

SonicNest is a privacy-first, cross-platform sound and voice recorder built with Flutter. It combines reliable capture, a searchable recording library, playback, bookmarks, non-destructive editing/export, input-device awareness, theme/accessibility support, and a clean open-source architecture.

Made by the Sanskar

Status

Current development version: 0.1.0. The repository is structured as a production project with automated analysis/tests, Android/Linux/Windows/macOS/iOS/Web build validation, Debian Linux package validation, Windows portable-package validation, six-platform non-production release-candidate configuration, open-source documentation, continuation state, reproducible platform bootstrap and branding tooling, and explicit manual release gates. This is still a development preview until fresh hosted validation for the current six-platform revision plus physical-device/browser, accessibility, signing, and production-hosting gates are complete.

Major features

  • Voice and general sound recording with start, configurable/cancellable countdown, pause, resume, stop, cancel, safe cleanup, and recoverable error handling.
  • M4A/AAC, WAV, FLAC, Opus, MP3, OGG/Vorbis, and raw AAC output/export paths where the runtime codec stack supports them.
  • Speech, meeting, lecture, interview, podcast, music, high-quality, lossless, small-file, and custom presets.
  • Bitrate, sample rate, mono/stereo, automatic gain, echo cancellation, and noise suppression settings where the platform honors them.
  • Smart filename templates with prefix, suffix, category, date/time, individual date/time fields, and sequence tokens.
  • Optional keep-screen-awake behavior during active recording, with cleanup after stop/cancel/failure.
  • Live amplitude waveform, clipping warning, recording timer, markers/bookmarks, and input-device-aware recording services.
  • Persisted waveform envelopes for recorded, imported, processed, and recovered managed media.
  • Searchable library with favorites, pinned items, tags, folders, trash/restore, rename, duplicate, import, export, share, sorting, format/folder/tag/date filtering, and multi-selection bulk actions.
  • Multi-file import isolates copy/probe/waveform failures so a corrupt or missing selected audio file is cleaned up and does not prevent later valid selections from being imported.
  • Local metadata decoding tolerates damaged optional fields and malformed individual records, normalizes unsafe numeric/waveform values, isolates duplicate IDs/paths, preserves structurally corrupt metadata for diagnostics, and can recover a valid .bak left by an interrupted metadata replacement.
  • Startup orphan recovery reconstructs metadata for supported regular audio files that still exist in managed Recordings or .trash after a crash, interrupted metadata write/deletion, or unrecoverable metadata reset; damaged media remains visible with best-effort metadata instead of being silently discarded.
  • Managed-storage guards require supported regular audio and reject external, unsupported, symbolic-link, and non-file metadata paths before rename, duplicate, move-to-Trash, restore, or permanent-delete operations.
  • Persistence-safe library mutations restore in-memory metadata and roll filesystem moves back when metadata persistence fails; permanent deletion persists metadata first so a crash prefers a recoverable orphan over irreversible data loss.
  • Collision-safe managed and external destinations treat existing files, directories, symbolic links, and broken links as occupied instead of overwriting/following them.
  • Batch tools can convert several recordings or copy selected originals directly to a user-selected folder with collision-safe naming.
  • Desktop secondary/right-click access to the same complete recording action surface used by touch/menu workflows.
  • Multi-recording batch format conversion uses a deterministic service with target-format selection, progress, per-file conversion failure isolation, external-copy failure isolation, preserved source files, retained markers, and successful-output registration in the library.
  • Stop after current file prevents another batch item from starting after the current conversion finishes; leaving Batch Convert raises the same stop request instead of forcibly killing the active encoder.
  • Managed storage statistics for recordings, Trash, and temporary processing files, plus guarded temporary-file cleanup. Recording/Trash totals count supported top-level regular managed audio rather than arbitrary files in those directories.
  • Integrated player with seek, jump controls, volume, speed, repeat-one, previous/next recording navigation, A-B selection looping, bookmarks, and silence-skip support where available.
  • Android, iOS, and macOS media-session metadata plus notification/lock-screen playback integration using just_audio_background and tagged media sources.
  • Non-destructive FFmpeg-backed editing: keep selection, cut selection, split, merge, normalize, fades, silence removal/insertion, gain changes, basic noise cleanup, compressor, limiter, high-pass/low-pass filters, format conversion, draggable selection handles, selection undo/redo, and export presets.
  • Browser-safe Web recorder with microphone permission, input-device selection, PCM16 capture, pause/resume, amplitude metering, local WAV packaging, in-session playback, and explicit share/download without importing native filesystem or FFmpeg services.
  • In-app Diagnostics & QA reports provide privacy-safe runtime, aggregate library/storage, recorder-state, and settings evidence for physical-device/support testing. Reports exclude recording content, titles, paths, notes, tags, bookmarks, smart-naming text, and input-device names; they are created only on user request and are never automatically uploaded.
  • In-app Manual QA evidence sessions mirror the remaining real-device/system release checks and persist only fixed source-controlled check IDs, Not run/Passed/Failed/Blocked status, and timestamps. Evidence can be copied as JSON or explicitly shared as Markdown, has no free-form tester-note field, drops stale catalog IDs, and never turns a manual observation into an automatic release approval.
  • Native and Web launcher/splash branding generated reproducibly from project-controlled SonicNest mark geometry, plus branded Flutter startup UI with startup-error recovery.
  • Debian .deb packaging for Linux with desktop entry, AppStream metadata, generated SonicNest icon integration, package checksums, structural verification, hosted-runner installation/startup smoke, and uninstall cleanup verification.
  • Initial public Linux distribution policy: verified .deb + SHA-256 checksum through GitHub Releases; no initial custom APT repository.
  • Versioned x64 portable ZIP packaging for Windows with complete Flutter runner-bundle validation, credential-material checks, SHA-256 output, bounded extracted-package startup smoke, optional final Authenticode verification, and hosted unsigned package artifacts.
  • Initial Windows public distribution policy: GitHub Releases with the final Authenticode-verified portable ZIP and its post-signing SHA-256 checksum; Microsoft Store/MSIX/MSI/installer channels are not currently claimed.
  • Android release-candidate validation verifies package identity and explicitly classifies hosted release-mode APK/AAB output as Android Debug-certificate non-production artifacts instead of calling them unsigned.
  • Initial Android public distribution policy: Google Play with Play App Signing and a separately protected maintainer-controlled upload key; hosted CI has no production Play signing credentials.
  • Initial Apple distribution policy: TestFlight/App Store for iOS and signed/notarized GitHub Releases for macOS; hosted Apple artifacts remain no-codesign/non-publication validation output.
  • Localization-ready presentation layer with primary Flutter surfaces centralized in the localization catalog; English is currently the shipped locale. Product-facing text is localized while raw backend diagnostics remain technical evidence.
  • Light, dark, and system themes; responsive phone/tablet/desktop/browser navigation; reduced-motion preference; keyboard navigation and recorder/player shortcuts where applicable.
  • Offline-first local metadata and audio storage on native platforms; the Web recorder keeps audio local to the browser session unless the user explicitly shares/downloads it. No hidden upload, tracking, or analytics.
  • Android foreground recording-service integration through reproducible platform overrides.
  • Lazy native recorder initialization: constructing application/controller services does not touch the recorder method channel until recorder functionality is actually requested.
  • Source-controlled cross-platform store/distribution listing and privacy copy that must be reviewed against the exact release candidate before submission.

Desktop shortcuts

  • Ctrl+1 through Ctrl+5: Home, Recorder, Library, Settings, About.
  • F9: start/stop recording, or cancel an active countdown.
  • F10: pause/resume recording.
  • Ctrl+Alt+P: play/pause the loaded recording.
  • Ctrl+Alt+Left / Ctrl+Alt+Right: jump backward/forward by the configured interval.
  • Secondary/right-click on a recording tile opens its recording action surface on desktop pointer devices.

Batch conversion

Open Batch Convert from Home, select one or more saved non-Trash recordings, choose the target format, and start conversion. SonicNest processes selected items sequentially. The source recording is never overwritten; successful converted files are registered as new Library recordings and a failure in one item does not discard earlier successful outputs. Optional external copies happen only after the managed result is registered, so an unavailable external destination does not invalidate a conversion already preserved in SonicNest.

See docs/BATCH_CONVERSION.md for execution ordering, failure isolation, stop semantics, and the manual-evidence boundary.

Supported platforms

SonicNest targets Android, iOS, macOS, Windows, Linux, and Web. The shared lib/main.dart entry point uses conditional exports to select native services on Dart IO platforms and the browser-safe recorder on Dart Web platforms. Platform host projects are generated with the installed Flutter SDK by tool/bootstrap_platforms.sh on Bash-capable environments or tool/bootstrap_platforms.ps1 on Windows. Branding is generated after dependency resolution with tool/apply_branding.sh or tool/apply_branding.ps1. This keeps all six host scaffolds and generated brand resources reproducible from repository source.

Google Play is the initial Android public channel. Production distribution requires maintainer-owned Play Console/App Signing/upload-key configuration outside this repository. See docs/ANDROID_DISTRIBUTION_POLICY.md.

iOS uses TestFlight/App Store as the initial Apple mobile channel; macOS initially uses signed/notarized GitHub Releases. See docs/APPLE_DISTRIBUTION_POLICY.md.

Debian .deb is the initial repository-supported Linux installation package. It is built from the generated Flutter Linux release bundle rather than committed binary output. The initial public Linux channel is GitHub Releases; see docs/LINUX_DISTRIBUTION_POLICY.md.

A versioned x64 portable ZIP is the initial repository-supported Windows package. It is built from the complete generated Flutter Windows release bundle. Hosted validation ZIPs are unsigned; a stable public Windows ZIP must satisfy the Authenticode and real-system gates before publication through the initial GitHub Releases channel. See docs/WINDOWS_PACKAGING.md and docs/WINDOWS_SIGNING_POLICY.md.

Web uses the normal Flutter entry point and a browser-safe service surface. Recording, pause/resume, amplitude, input selection, WAV playback, and explicit share/download are supported by the Web implementation. Native FFmpeg editing and native filesystem-managed library/recovery semantics are not falsely exposed in browsers because the current FFmpeg and path_provider dependencies do not provide Web implementations. See docs/WEB_SUPPORT.md for the complete capability boundary and docs/WEB_QA_CHECKLIST.md for exact-browser release evidence.

Quick start

macOS/Linux/Git Bash:

git clone https://github.com/sanskarIN/SonicNest.git
cd SonicNest
bash tool/bootstrap_platforms.sh
flutter pub get
bash tool/apply_branding.sh
flutter run

Windows PowerShell:

git clone https://github.com/sanskarIN/SonicNest.git
cd SonicNest
./tool/bootstrap_platforms.ps1
flutter pub get
./tool/apply_branding.ps1
flutter run

Web/Chrome after the same bootstrap and dependency steps:

flutter config --enable-web
flutter run -d chrome

Quality commands

flutter pub get
dart tool/generate_brand_assets_v2.dart
dart format --output=none --set-exit-if-changed lib test tool/generate_brand_assets_v2.dart
flutter analyze --no-fatal-infos
flutter test

The formatting step is an enforcement check and must not rewrite source during validation. If it reports drift, apply canonical dart format locally, review/commit that output, and rerun validation.

GitHub Actions compile representative native builds and a Web release through the shared default entry point. The Linux package workflow builds a release-mode Linux bundle, creates a Debian package, verifies its payload/metadata/icon/checksum structure, installs it through the package manager, smoke-starts the installed application under a bounded virtual display, removes the package, verifies package-owned integration cleanup, and publishes a short-retention validation artifact. The Windows workflow builds a release-mode Windows bundle, creates a versioned portable ZIP, verifies its required runtime/data layout and checksum, checks for common private/signing material, smoke-starts the extracted package for a bounded interval, adds an explicit unsigned warning, and publishes a short-retention validation artifact. The manual release-candidate workflow is configured for Android, Linux, Windows, macOS, iOS, and Web: Web is built as a release static bundle, archived with a SHA-256 record, and required by the unified six-platform provenance manifest. The historical hosted release-candidate/provenance runs recorded in PROJECT_STATE.md predate Web support and are not treated as validation of the current six-platform revision.

The repository audit validates required project/policy files, sensitive-material rules, permanent-workflow read-only permissions, generated-host boundaries including web/, six-platform bootstrap/CI/release invariants, package/release invariants, and parses all tracked tool/*.sh and tool/*.ps1 helpers.

Hardware-dependent recorder, interruption, background, routing, screen-wake, media-button, batch-performance, native/Web brand visual inspection, representative Linux installation, Windows real-system portable-package behavior, browser permission/device/share/PWA behavior, production Web hosting/cache/TLS behavior, filesystem-failure, malformed-real-media, accessibility, production signing, store submission, and lock-screen behavior still require real target-system, representative-browser, or protected maintainer-environment evidence. The Manual QA evidence screen provides a local/exportable status ledger for native observations but does not mark repository gates complete; Web-specific manual evidence is defined in docs/WEB_QA_CHECKLIST.md. Exact latest source/workflow relationships are maintained in PROJECT_STATE.md and what_changed.md.

Build a Web release

flutter config --enable-web
bash tool/bootstrap_platforms.sh
flutter pub get
bash tool/apply_branding.sh
flutter build web --release

On Windows, use ./tool/bootstrap_platforms.ps1 and ./tool/apply_branding.ps1. The static output is generated under build/web/. Production hosting, TLS, DNS, cache policy, and deployment credentials are intentionally outside the repository. See docs/WEB_SUPPORT.md.

Build a Windows portable package

On a Windows build host with Flutter desktop prerequisites:

flutter config --enable-windows-desktop
./tool/bootstrap_platforms.ps1
flutter pub get
./tool/apply_branding.ps1
flutter build windows --release
./tool/build_windows_portable.ps1 -Configuration release -ArtifactSuffix unsigned
./tool/verify_windows_portable.ps1
./tool/smoke_test_windows_portable.ps1 -StartupSeconds 8

The hosted/development path uses the unsigned label. A final public candidate must be packaged from the final signed binaries and must pass ./tool/verify_windows_portable.ps1 -ArchivePath '<final-portable-zip>' -RequireSignature plus the bounded package startup smoke before its final SHA-256 is published. See docs/WINDOWS_PACKAGING.md.

Build a Linux Debian package

On a Debian/Ubuntu-compatible Linux build host with the Flutter Linux prerequisites, dpkg-deb, desktop-file-utils, and AppStream tools installed:

flutter config --enable-linux-desktop
bash tool/bootstrap_platforms.sh
flutter pub get
dart tool/generate_brand_assets_v2.dart
flutter build linux --release
bash tool/build_linux_deb.sh release
bash tool/verify_linux_deb.sh

The .deb and its SHA-256 checksum are written under build/linux-package/. See docs/LINUX_PACKAGING.md before installation or release testing.

Architecture

SonicNest separates models, services, controllers, presentation, reusable widgets, localization scaffolding, and platform configuration. The shared entry point additionally separates native and Web bootstrap dependency graphs. See docs/ARCHITECTURE.md and docs/WEB_SUPPORT.md.

Privacy

Recordings remain on-device by default. SonicNest does not upload microphone data or recordings without an explicit user-initiated action. The Web recorder holds captured audio in the current browser session until the user downloads/shares or deletes it; it does not automatically upload that audio. Diagnostics are generated only on request, exclude recording/library content and file paths, and are not automatically uploaded. Manual QA evidence stores only fixed check IDs, status values, and timestamps; it collects no free-form tester notes and is exported/shared only through explicit user actions. See PRIVACY.md, docs/DIAGNOSTICS_AND_QA.md, docs/MANUAL_QA_EVIDENCE.md, and docs/WEB_SUPPORT.md.

Codec notes

Native recording uses platform encoders through record. Formats requiring transcoding use an audio-focused FFmpeg package. The browser recorder intentionally uses the Web-supported PCM16 stream path and packages it as WAV in pure Dart. Capabilities vary by platform/device/browser, so SonicNest checks or documents support boundaries instead of claiming unsupported combinations. See docs/CODECS.md and docs/WEB_SUPPORT.md.

Building, integrity, recovery, localization, packaging, QA, and releases

  • docs/BUILDING.md β€” six-platform bootstrap/build commands and CI coverage.
  • docs/WEB_SUPPORT.md β€” Web entry point, browser recording features, capability boundaries, CI, release-candidate evidence, privacy, and QA.
  • docs/WEB_QA_CHECKLIST.md β€” real-browser permission, microphone, WAV, playback/share, responsive/accessibility, PWA, privacy, and production-hosting release gates.
  • docs/RELEASE_CANDIDATE_MANIFEST.md β€” six-platform checksummed candidate provenance contract and historical evidence boundary.
  • docs/METADATA_INTEGRITY.md β€” metadata corruption isolation, transaction rollback, reconciliation, and orphan recovery.
  • docs/MANAGED_STORAGE_BOUNDARY.md β€” supported regular-file boundaries, symbolic-link refusal, collision safety, and accounting.
  • docs/RECOVERY_TESTING.md β€” reproducible recovery validation scenarios.
  • docs/BATCH_CONVERSION.md β€” conversion ordering, failure isolation, stop behavior, and external-copy rules.
  • docs/LOCALIZATION_POLICY.md β€” user-facing translation versus raw technical diagnostic policy.
  • docs/DIAGNOSTICS_AND_QA.md β€” privacy contract, report fields, sharing behavior, and physical-QA evidence guidance.
  • docs/MANUAL_QA_EVIDENCE.md β€” local manual-test status sessions, privacy boundary, persistence, export format, and release-evidence usage.
  • docs/BRANDING.md β€” deterministic native/Web icon and splash generation.
  • docs/ANDROID_DISTRIBUTION_POLICY.md β€” Google Play, Play App Signing, upload-key, and Android candidate-signing boundary.
  • docs/APPLE_DISTRIBUTION_POLICY.md β€” TestFlight/App Store and macOS signed/notarized distribution boundary.
  • docs/LINUX_PACKAGING.md β€” Debian package construction and verification.
  • docs/LINUX_DISTRIBUTION_POLICY.md β€” initial GitHub Releases .deb distribution/signing boundary.
  • docs/WINDOWS_PACKAGING.md β€” initial Windows portable ZIP package/channel, structural verification, and bounded startup-smoke contract.
  • docs/WINDOWS_SIGNING_POLICY.md β€” stable public Windows Authenticode policy and private-credential boundary.
  • docs/STORE_LISTING.md β€” source-controlled listing copy and privacy-declaration draft for native distribution review.
  • docs/UNSIGNED_ARTIFACTS.md β€” platform-specific non-production candidate-artifact classification and boundaries.
  • docs/QA_CHECKLIST.md β€” native hardware/system and stable-release evidence checklist.
  • docs/RELEASING.md β€” release procedure.
  • RELEASE_NOTES.md β€” development-preview release notes.
  • TODO.md β€” evidence-based remaining gates, including fresh six-platform hosted validation and Web release checks.

Contributing

Please read CONTRIBUTING.md, CODE_OF_CONDUCT.md, and SECURITY.md before contributing.

Support and links

License

Apache License 2.0. See LICENSE and NOTICE. Dependency licenses remain their own.

About

SonicNest is a professional, modern, open-source sound and voice recorder worthy of public release.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /