Skip to content

Latest commit

 

History

History
109 lines (95 loc) · 6.47 KB

TODO.md

File metadata and controls

109 lines (95 loc) · 6.47 KB

TODO List

Version 1

  • Supress power save mode
  • Trim silence on uploaded assets
  • Reject files based on pre-processed file hash
  • CSV export to client log entries
  • Idiot mode, easy mode, advanced mode
  • Timeout on fetch? (websockets makes this unneeded, except for downloading files)
  • Attempt to prevent duplicate assets from playing within a certain time period
  • Start/end time for assets in client are based on "is likely to play at" time
  • Empty rotators are warned on (based on feature flag)
  • Deal with non-playable assets (error state ones)
  • Compression and selecting output device using a bridge to the web audio API.
  • Any custom django admin pages can follow this guide
  • Flash whole screen after configurable time with some messaging ("play the promos, station management has been notified")
  • Button to get out of fullscreen (useful on Linux)

Future Versions

Changes for 2024 based on real world usage in 2023 and feedback

  • Make rotators able to disabled (UI for assets / stopsets needs to show that too)
  • Implement soft delete for assets -- keep the file, but delete the DB entity
    • Behind the scenes track deleted files.
  • Easier way to toggle, simple / standard / advanced view settings in client. Not in settings.
    • Change advanced mode copy to "admin" mode
    • Build out "switch back to simple mode" timer feature a little better, ie comma separated times?
  • Better datetime picker in admin
  • Skip track in stopset when we get to it
  • Mark a bad asset? Interesting. Not sure how it would work. – too difficult to implement, too many opinions, person wishing to flag talks to manager-of-the-moment
  • Refresh playlist from backend. Connected client status from backend? Communicate what's in the playlist?
    • Minimally completed via RELOAD_PLAYLIST_AFTER_DATA_CHANGES setting
  • Backend client playlist editor
  • Status updates, ie news and traffic? Fullscreen thing? / Custom UI labels unused labels that play every N times (ie for telling the DJ to do something) -- Probably not
  • Round-robin (or "cycle evenly") rotator scheduling, ignoring weight as an option for a rotator
  • Check / validate randomization algorithm
    • Validated! Review of algorithm provided by Andy
  • Mini-player column in asset list view
  • Asset alternates (single asset has 4-5 underlying audio files that are cycled through)
    • Backend done
  • A large clock in the UI
  • Make weights for previous 24 hours... AND reflect that in front-end (day-of pill) and back-end (sortable)... will require change to END_DATE_PRIORITY_WEIGHT_MULTIPLIER
    • Added day-of-event pill
  • Rudimentary stopset editor, in the form of "skip/queue", regenerate asset, and swap asset
    • Ability to "audition" assets on a second audio output?
  • Stop playing at end of current asset. (Stop playing in 3s with fadeout as well?) (Covered by skip)
  • A way to send a custom text notification to all connected clients from backend UI
  • Audio visualization with WaveSurfer

Other things

  • Ability to do speech synthesis / pull asset from API? / weather
    • Best cross-platform way to do this might be to use text2wav.node.js to generate WAV files with a timeout
  • KLOS color scheme: #D91E75, #4B89BF, #8CBF3F, #F2D750, and #D95525
  • "Island Mode" with an embedded standalone Python distribution
  • Login interstitial to populate with demo data
  • Integrated Twilio call board
  • Single app client lock (ie only ONE client per username/password)'
  • Way to parse filename into rotator, start/end date
    • Submit form built into Tomato?
  • Silence detection REJECTs audio assets in backend (if there's more than 2 seconds?) (behind FEATURE flag)
  • Export all audio assets as zip
    • Import as well (have to be careful with different protocol.json:protocol_version)
  • Add configurable silence between ads. Crossfade, with fade points? Fancy!
  • Client "Demo mode", requiring no backend with demo assets.
  • Button to play an asset from a specific rotator
    • Backend done as SINGLE_PLAY_ROTATORS
  • Cursor can be a fun thing?
  • Clickable playbar that seeks?

August 2024 UX review with Miranda Kay

  • Button box flashes between assets
  • Switch connected icons with feather wifi on/off
  • Danger button in settings
  • Denser progress radials - decrease to 4rem
  • First asset of next stop doesn't show log tooltip if current stop startedPlaying
  • Assets queued for skipping should grey out
  • Seed, leaf, flower icon for simple, intermediate, advanced
  • Alternating grey/white rows in AssetPicker component
  • Fix regenerate/swap not working button when wait intervals are disabled
  • Seems to be a startup delay. Do profiling to figure it out.

2024 Feedback

  • A NO_REPEAT_ASSETS_TIME override
  • De-dupe multiple uploads better (ie tasks) for the purposes of client reloading via RELOAD_PLAYLIST_AFTER_DATA_CHANGES (batches cause many reloads)
    • Strip out django-pgtrigger (overly complicated), and just override ModelAdmin's delete_model(), save_model(), and delete_queryset() methods with hook. For quick actions where a model's update() method is called we'll need to hook get_actions(), redefining these action functions to call the hook. The hook can proably set a value on the request, that a middleware writes to. Bulk upload will need be marked dirty as well, after processing. Can use pg_notify() to notify websocket API.
  • Fades in controller get choppy after a certain amount of time, likely due to time.monotonic()
  • Always show scrollbars on macOS
  • Ability to bulk download assets on asset list view
  • Tagging system for all DB models (perhaps using django-taggit)
  • Rename 'audio assets' to 'assets'

2025 Things

  • Simplify permission system, removing groups and just having superusers + regular users + flags on user model?