Coder Social home page Coder Social logo

capture's Introduction

πŸ‘‹ Hi there! I'm David

Mastodon


✨ Hi, I’m David, and I live in Landau, Germany. I work as an iOS developer for a German drugstore chain called dm which is among Germany’s most popular brands. We are currently building the Mein dm App.

  • πŸ’¬ Ask me about: Swift, iOS, macOS
  • πŸ“« How to reach me: @dvk
  • 🎾 In my freetime I like to play various sport games like soccer and tennis
  • β™Ÿ Ocassionally I also try to improve my chess skills over at lichess.org.

capture's People

Contributors

dehlen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

yujinqiu

capture's Issues

App Icon

Create a nice looking App Icon.

Bug - GIF Frame-rate

First want to say I'm really excited for this application. I've tried the other ones in the readme and even a paid one (GfFox) and I can say I like the design and UX of this much more than any of those apps.

Unfortunately I've been encountering an issue with capture I haven't been able to solve regarding the frame-rate of recorded Gifs, even after setting the frame rate in the application I'm finding the Gifs are LIGHTNING fast; I can barely see what I'm trying to show. I'm not sure if it's because of the default frame-rate that was set in V1.0 or if it's something on my side, but I thought I'd reach out and see if anyone else has had something similar/ knows how to fix it.

Here's an example and thanks again for the development of this app. πŸ‘

ScreenRecording 2019-03-13 14 42 38-trimmed

Sandbox

Turn Sandbox & Hardened Runtime on. Also make sure saving still works (Probably use OpenDialog) and make sure app is notarized.

Analyze problems when archiving app

When the app is archived and exported via "Copy App" the exporting does not work correctly. This might resolve itself when exported with a valid development signature, however the issue needs to be analyzed and addressed.

User Integrations

Add option to add integrations via user defined scripts. The application will inject multiple variables like the url of the recorded video. The already existing BitBucket integration could be refactored to a script like that.

Improve Accessibility Permission Dialog UX

Currently the user is asked to give accessibility permissions to Capture on the first app launch and on every recording. Also the dialog is provided from the System and does not really help the user.

A custom dialog to provide better UX should be added.

Flow for integrations/conversion

Instead of showing a sheet, a separate window should be presented. Inside this window will be a page view controller.

Flow:

  1. Video Trimming
  2. Export Video/Gif
  3. Integrations (Upload to BitBucket PR)
  4. Success/Failure (removes current local notification)

Sandbox Access when opening videos

When opening videos (via CMD+O or by dragging a video on the dock icon) to export a video without a recording as a GIF currently an error is shown when the file is not in sandbox environment (f.e in the Downloads folder). We need to ask for access to the files location otherwise Capture is not able to read the video file and will fail during the export.

Create Supporting files

Create a good README to be able to open source this tool. Also we need some kind of CI integration, linter, commit hooks, build script, etc...

Fix cell selection color

Cell selection color is not automatically updated when switching from dark/light mode and the application is currently running.

Bug Test Session

Check for open bugs which were introduced during development for v2.0

Can't stop recording

Can't stop recording if highlighting window is on top of the Capture applications recording button.

Only record selected window

This is a feature request I got from a colleague:

Problem description:
When selecting a window with rounded corners (for example the iOS Simulator) the recorded video currently records parts of the desktop background or any other underlying window. This happens because the frames of the recorded video are not "screenshots" of the window but "screenshots" of the screen at the given coordinates. There is nothing we can do about that when the user selects a custom crop frame. However when a window is selected and recorded without modifications to the crop frame we know for sure that only the selected window should be recorded.

Proposed Solution
There is a method called CGWindowListCreateImage which we could use to create snapshots of the selected window. This would lead to frames which have an alpha color around these rounded corners and would address the above stated problem. We would create a timer which creates such an image every 1/fps seconds and adds them to a queue. When the recording is finished this queue of images is then exported to a GIF/movie. However by doing so we introduce multiple implementation problems:

  1. We need to implement stitching these frame to a video file by our own since the user might want to have a resulting video file next to the GIF. This is currently done by AVCaptureSession. I am not sure it would be possible to still use AVCaptureSession. However this might just be me not finding the correct API to do so.
  2. The separate frames are pretty large in size and this leads to a very large GIF file (without making quality compromises). Again this might be addresses by some high level Apple API like AVCaptureSession but currently I only see how to capture input from a CGDirectDisplayID not from a CGWindowID.

So technically this is possible but we need to make sure that this enhancement will be worth the effort.

Support multi display setup in resizable & draggable capture window

Currently the capture window only works on one screen. This is either the screen a selected window was on or the main display if no selection was made. We should provide the ability to crop on every display (f.e like QuickTime does it).

Here are some notes how an implementation might look like:

  • Create NSWindow instances for all screens
  • Show notice like QT on main screen
  • If mouse moves to different screen hide notice on other screens and show notice on active screen
  • If user selects a crop frame by dragging a rectangle hide all notices
  • If no crop frame is selected (f.e user deselects crop frame) show notice on active screen
  • If start recording is pressed send the cropFrame in the notification info dictionary

Snippet to detect the display the mouse cursor is currently on:

var mouseLoc = CGEventGetLocation(CGEventCreate(nil).takeRetainedValue())


var display = UnsafeMutablePointer<CGDirectDisplayID>.alloc(1)
var count = UnsafeMutablePointer<UInt32>.alloc(1);
CGGetDisplaysWithPoint(mouseLoc, 1, display, count)

Automatically reload windows

First step: recalculate the frame before recording a window.
Next step: automatically refresh all windows when something changes or if this does not work, periodically.

Fix Click Down Event

When clicking a button the buttons action is executed. However when the user presses the button too long the mouseDown event will trigger a resize of the crop view since the button won't be visible at the clicked coordinate any longer. This needs to be addressed since otherwise when starting a recording the crop view might be changed which will lead to bad UX.

New UI

Currently the second window (export container) has several flaws which should be addressed.

  1. Set a better suited initial size of the export window. Best: set the initial size to be of the same aspect ratio as the video.

  2. Add possibility to toggle trimming

  3. Add bottom bar to change gif export settings, also add integrations to this bottom bar.

Refactor

A lot of this stuff currently implemented could need a protocol or a view model...

Re-exporting GIF

Once the user has finished recording a window/screen with a preselected frame rate, she can trim and export the GIF. After exporting was done, there is no way to adjust the result (e.g. change frame rate).

As a user I'd love to have the opportunity to navigate back to the trim window in order to re-export the video with new settings.

Simply provide a back button as part of the "Export finished" screen.

Add correct licenses

Show licenses of used dependencies in app and add correct licenses to source files

New Design for GIF Options

Add gif width/height, frame rate options to toolbar.
Gif width/height should reflect aspect ratio size when updated, only provide presets for gif frame rates.

Drawing Cutout only works for main screen

Currently drawing the cutout only works for the main screen. This is due to the fact that the coordinates are relative to the main screen and recording a different screen will result in negative coordinates for the cutout view whose coordinates should be relative to the containing window.

Change App Icon and name

The current App Icon and the apps name are only placeholders. Before releasing a v1.0 a better name and icon should be created.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.